From 45cdb5decb6e9c5f0e908c055b2cd721f0e8c476 Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Sun, 18 May 2025 19:46:27 +0200 Subject: [PATCH] package/mjpegtools: fix build with gcc-15.x Signed-off-by: Bernd Kuhls Signed-off-by: Julien Olivain --- package/mjpegtools/0001-gcc15.patch | 354 ++++++++++++++++++++++++++++ 1 file changed, 354 insertions(+) create mode 100644 package/mjpegtools/0001-gcc15.patch diff --git a/package/mjpegtools/0001-gcc15.patch b/package/mjpegtools/0001-gcc15.patch new file mode 100644 index 0000000000..019317c7fd --- /dev/null +++ b/package/mjpegtools/0001-gcc15.patch @@ -0,0 +1,354 @@ +Fix build with gcc-15.x + +Upstream: https://sourceforge.net/p/mjpeg/Code/3513/ + +Signed-off-by: Bernd Kuhls + +Index: trunk/mjpeg_play/y4mdenoise/Region2D.hh +=================================================================== +--- mjpeg_play/y4mdenoise/Region2D.hh (Revision 3512) ++++ mjpeg_play/y4mdenoise/Region2D.hh (Revision 3513) +@@ -97,35 +97,11 @@ + // Add the given horizontal extent to the region. Note that + // a_tnXEnd is technically one past the end of the extent. + +- template +- void UnionDebug (Status_t &a_reStatus, INDEX a_tnY, +- INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp); +- // Add the given horizontal extent to the region. Note that +- // a_tnXEnd is technically one past the end of the extent. +- // Exhaustively (i.e. slowly) verifies the results, using a +- // much simpler algorithm. +- // Requires the use of a temporary region, usually of the +- // final subclass' type, in order to work. (Since that can't +- // be known at this level, a template parameter is included for +- // it.) +- + template + void Union (Status_t &a_reStatus, const REGION &a_rOther); + // Make the current region represent the union between itself + // and the other given region. + +- template +- void UnionDebug (Status_t &a_reStatus, +- REGION_O &a_rOther, REGION_TEMP &a_rTemp); +- // Make the current region represent the union between itself +- // and the other given region. +- // Exhaustively (i.e. slowly) verifies the results, using a +- // much simpler algorithm. +- // Requires the use of a temporary region, usually of the +- // final subclass' type, in order to work. (Since that can't +- // be known at this level, a template parameter is included for +- // it.) +- + //void Merge (Status_t &a_reStatus, INDEX a_tnY, INDEX a_tnXStart, + // INDEX a_tnXEnd); + // Merge this extent into the current region. +@@ -166,36 +142,11 @@ + // Subtract the given horizontal extent from the region. Note + // that a_tnXEnd is technically one past the end of the extent. + +- template +- void SubtractDebug (Status_t &a_reStatus, INDEX a_tnY, +- INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp); +- // Subtract the given horizontal extent from the region. Note +- // that a_tnXEnd is technically one past the end of the extent. +- // Exhaustively (i.e. slowly) verifies the results, using a +- // much simpler algorithm. +- // Requires the use of a temporary region, usually of the +- // final subclass' type, in order to work. (Since that can't +- // be known at this level, a template parameter is included for +- // it.) +- + template + void Subtract (Status_t &a_reStatus, const REGION &a_rOther); + // Subtract the other region from the current region, i.e. + // remove from the current region any extents that exist in the + // other region. +- +- template +- void SubtractDebug (Status_t &a_reStatus, REGION_O &a_rOther, +- REGION_TEMP &a_rTemp); +- // Subtract the other region from the current region, i.e. +- // remove from the current region any extents that exist in the +- // other region. +- // Exhaustively (i.e. slowly) verifies the results, using a +- // much simpler algorithm. +- // Requires the use of a temporary region, usually of the +- // final subclass' type, in order to work. (Since that can't +- // be known at this level, a template parameter is included for +- // it.) + + //typedef ... ConstIterator; + //ConstIterator Begin (void) const { return m_setExtents.Begin(); } +@@ -404,85 +355,6 @@ + + + +-// Add the given horizontal extent to the region. +-template +-template +-void +-Region2D::UnionDebug (Status_t &a_reStatus, INDEX a_tnY, +- INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp) +-{ +- typename REGION::ConstIterator itHere; +- typename REGION_TEMP::ConstIterator itHereO; +- INDEX tnX; +- // Used to loop through points. +- +- // Make sure they didn't start us off with an error. +- assert (a_reStatus == g_kNoError); +- +- // Calculate the union. +- a_rTemp.Assign (a_reStatus, *this); +- if (a_reStatus != g_kNoError) +- return; +- a_rTemp.Union (a_reStatus, a_tnY, a_tnXStart, a_tnXEnd); +- if (a_reStatus != g_kNoError) +- return; +- +- // Loop through every point in the result, make sure it's in +- // one of the two input regions. +- for (itHereO = a_rTemp.Begin(); itHereO != a_rTemp.End(); ++itHereO) +- { +- const Extent &rHere = *itHereO; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!((rHere.m_tnY == a_tnY +- && (tnX >= a_tnXStart && tnX < a_tnXEnd)) +- || this->DoesContainPoint (rHere.m_tnY, tnX))) +- goto error; +- } +- } +- +- // Loop through every point in the original region, make sure +- // it's in the result. +- for (itHere = this->Begin(); itHere != this->End(); ++itHere) +- { +- const Extent &rHere = *itHere; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- +- // Loop through every point in the added extent, make sure it's in +- // the result. +- for (tnX = a_tnXStart; tnX < a_tnXEnd; ++tnX) +- { +- if (!a_rTemp.DoesContainPoint (a_tnY, tnX)) +- goto error; +- } +- +- // The operation succeeded. Commit it. +- Assign (a_reStatus, a_rTemp); +- if (a_reStatus != g_kNoError) +- return; +- +- // All done. +- return; +- +-error: +- // Handle deviations. +- fprintf (stderr, "Region2D::Union() failed\n"); +- fprintf (stderr, "Input region:\n"); +- PrintRegion (*this); +- fprintf (stderr, "Input extent: [%d,%d-%d]\n", +- int (a_tnY), int (a_tnXStart), int (a_tnXEnd)); +- fprintf (stderr, "Result:\n"); +- PrintRegion (a_rTemp); +- assert (false); +-} +- +- +- + // Make the current region represent the union between itself + // and the other given region. + template +@@ -511,184 +383,6 @@ + } + } + +- +- +-// Make the current region represent the union between itself +-// and the other given region. +-template +-template +-void +-Region2D::UnionDebug (Status_t &a_reStatus, +- REGION_O &a_rOther, REGION_TEMP &a_rTemp) +-{ +- typename REGION::ConstIterator itHere; +- typename REGION_O::ConstIterator itHereO; +- typename REGION_TEMP::ConstIterator itHereT; +- INDEX tnX; +- // Used to loop through points. +- +- // Make sure they didn't start us off with an error. +- assert (a_reStatus == g_kNoError); +- +- // Calculate the union. +- a_rTemp.Assign (a_reStatus, *this); +- if (a_reStatus != g_kNoError) +- return; +- a_rTemp.Union (a_reStatus, a_rOther); +- if (a_reStatus != g_kNoError) +- return; +- +- // Loop through every point in the result, make sure it's in +- // one of the two input regions. +- for (itHereT = a_rTemp.Begin(); itHereT != a_rTemp.End(); ++itHereT) +- { +- const Extent &rHere = *itHereT; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!a_rOther.DoesContainPoint (rHere.m_tnY, tnX) +- && !this->DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- +- // Loop through every point in the first input region, make sure +- // it's in the result. +- for (itHere = this->Begin(); itHere != this->End(); ++itHere) +- { +- const Extent &rHere = *itHere; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- +- // Loop through every point in the second input region, make sure +- // it's in the result. +- for (itHereO = a_rOther.Begin(); +- itHereO != a_rOther.End(); +- ++itHereO) +- { +- const Extent &rHere = *itHereO; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- +- // The operation succeeded. Commit it. +- Assign (a_reStatus, a_rTemp); +- if (a_reStatus != g_kNoError) +- return; +- +- // All done. +- return; +- +-error: +- // Handle deviations. +- fprintf (stderr, "Region2D::Union() failed\n"); +- fprintf (stderr, "First input region:\n"); +- PrintRegion (*this); +- fprintf (stderr, "Second input region:\n"); +- PrintRegion (a_rOther); +- fprintf (stderr, "Result:\n"); +- PrintRegion (a_rTemp); +- assert (false); +-} +- +- +- +-// Subtract the other region from the current region, i.e. +-// remove from the current region any areas that exist in the +-// other region. +-template +-template +-void +-Region2D::SubtractDebug (Status_t &a_reStatus, +- REGION_O &a_rOther, REGION_TEMP &a_rTemp) +-{ +- typename REGION::ConstIterator itHere; +- typename REGION_O::ConstIterator itHereO; +- typename REGION_TEMP::ConstIterator itHereT; +- INDEX tnX; +- // Used to loop through points. +- +- // Make sure they didn't start us off with an error. +- assert (a_reStatus == g_kNoError); +- +- // Calculate the difference. +- a_rTemp.Assign (a_reStatus, *this); +- if (a_reStatus != g_kNoError) +- return; +- a_rTemp.Subtract (a_reStatus, a_rOther); +- if (a_reStatus != g_kNoError) +- return; +- +- // Loop through every point in the result, make sure it's in +- // the first input region but not the second. +- for (itHereT = a_rTemp.Begin(); itHereT != a_rTemp.End(); ++itHereT) +- { +- const Extent &rHere = *itHereT; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!(this->DoesContainPoint (rHere.m_tnY, tnX) +- && !a_rOther.DoesContainPoint (rHere.m_tnY, tnX))) +- goto error; +- } +- } +- +- // Loop through every point in the first input region, and if it's +- // not in the second input region, make sure it's in the result. +- for (itHere = this->Begin(); itHere != this->End(); ++itHere) +- { +- const Extent &rHere = *itHere; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (!a_rOther.DoesContainPoint (rHere.m_tnY, tnX)) +- { +- if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- } +- +- // Loop through every point in the second input region, make sure +- // it's not in the result. +- for (itHereO = a_rOther.Begin(); +- itHereO != a_rOther.End(); +- ++itHereO) +- { +- const Extent &rHere = *itHere; +- for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX) +- { +- if (a_rTemp.DoesContainPoint (rHere.m_tnY, tnX)) +- goto error; +- } +- } +- +- // The operation succeeded. Commit it. +- Assign (a_reStatus, a_rTemp); +- if (a_reStatus != g_kNoError) +- return; +- +- // All done. +- return; +- +-error: +- // Handle deviations. +- fprintf (stderr, "Region2D::Subtract() failed\n"); +- fprintf (stderr, "First input region:\n"); +- PrintRegion (*this); +- fprintf (stderr, "Second input region:\n"); +- PrintRegion (a_rOther); +- fprintf (stderr, "Result:\n"); +- PrintRegion (a_rTemp); +- assert (false); +-} +- +- +- + // Flood-fill the current region. + template + template