|
@@ -0,0 +1,354 @@
|
|
|
+Fix build with gcc-15.x
|
|
|
+
|
|
|
+Upstream: https://sourceforge.net/p/mjpeg/Code/3513/
|
|
|
+
|
|
|
+Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
|
|
|
+
|
|
|
+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 <class REGION, class REGION_TEMP>
|
|
|
+- 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 <class REGION>
|
|
|
+ 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 <class REGION, class REGION_O, class REGION_TEMP>
|
|
|
+- 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 <class REGION_TEMP>
|
|
|
+- 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 <class REGION>
|
|
|
+ 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 <class REGION, class REGION_O, class REGION_TEMP>
|
|
|
+- 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 <class INDEX, class SIZE>
|
|
|
+-template <class REGION, class REGION_TEMP>
|
|
|
+-void
|
|
|
+-Region2D<INDEX,SIZE>::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 <class INDEX, class SIZE>
|
|
|
+@@ -511,184 +383,6 @@
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+-
|
|
|
+-
|
|
|
+-// Make the current region represent the union between itself
|
|
|
+-// and the other given region.
|
|
|
+-template <class INDEX, class SIZE>
|
|
|
+-template <class REGION, class REGION_O, class REGION_TEMP>
|
|
|
+-void
|
|
|
+-Region2D<INDEX,SIZE>::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 <class INDEX, class SIZE>
|
|
|
+-template <class REGION, class REGION_O, class REGION_TEMP>
|
|
|
+-void
|
|
|
+-Region2D<INDEX,SIZE>::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 <class INDEX, class SIZE>
|
|
|
+ template <class CONTROL>
|