[mythtv] [patch] Backtrace for SEGV while editing recording

Neale Swinnerton mythtv-dev.spam at isismanor.com
Sat Jun 4 15:34:00 UTC 2005


Yeah, this is working for me..... I found a recording that caused the
backtrace I've posted before, applied the patch and hey presto, no
backtrace!

FYI: I am using this with my afd patch.

thanks

Neale

Stuart Auchterlonie wrote:
> On Thu, Apr 28, 2005 at 09:24:51PM +0100, Mark Seagrief wrote:
> 
>>Hi,
>>
>>I've been seeing this same problem for a while now.  The backtrace from GDB
>>looks identical to Neale's.  I sprinkled a lot of printf statements into the
>>code and the problem appears to be occurring with the m_displaypos.y being
>>wrong (as above), the value of m_displaypos.y only goes incorrect (that I've
>>observed), under the following conditions:
>>
>>* Editing a clip that has both 16:9 and 4:3 content
>>* Already have edit markers visible on the screen
>>* Navigate from a 16:9 to 4:3 section of the video clip or from a 16:9 to a
>>4:3 section
>>
>>Navigating between 16:9 and 4:3 sections without any edit markers in place
>>is fine and doesn't cause a crash.
>>
> 
> 
> I've been having a look into this and believe I've found the problem.
> 
> Valgrind pointed me in the right direction, namely that in
> 
> void OSDTypeImage::Reinit(float wmult, float hmult)
> {
>     int x = (int)(m_displaypos.x() * wmult / m_wmult);
>     int y = (int)(m_displaypos.y() * hmult / m_hmult);
> ....  
> (osdtypes.cpp)
> 
> 
> Both m_wmult & m_hmult were being used without being initialized.
> 
> I've attached a patch to fix the problem.
> 
> Could everyone give it a go and see if it works for them....
> 
> 
> Thanks,
> Stuart
> 
> 
> 
> ------------------------------------------------------------------------
> 
> Index: libs/libmythtv/osdtypes.cpp
> ===================================================================
> --- libs/libmythtv/osdtypes.cpp	(revision 36)
> +++ libs/libmythtv/osdtypes.cpp	(working copy)
> @@ -195,7 +195,7 @@
>          }
>          else if (OSDTypeImage *item = dynamic_cast<OSDTypeImage*>(type))
>          {
> -            item->Reinit(wmult, hmult);
> +            item->Reinit(wchange, hchange, wmult, hmult);
>          }
>          else if (OSDTypeBox *item = dynamic_cast<OSDTypeBox*>(type))
>          {
> @@ -796,10 +796,10 @@
>      m_name = name;
>  }
>  
> -void OSDTypeImage::Reinit(float wmult, float hmult)
> +void OSDTypeImage::Reinit(float wchange, float hchange, float wmult, float hmult)
>  {
> -    int x = (int)(m_displaypos.x() * wmult / m_wmult);
> -    int y = (int)(m_displaypos.y() * hmult / m_hmult);
> +    int x = (int)(m_displaypos.x() * wchange);
> +    int y = (int)(m_displaypos.y() * hchange);
>  
>      m_displaypos.setX(x);
>      m_displaypos.setY(y);
> @@ -1080,7 +1080,7 @@
>  
>      m_displayrect = QRect(x, y, width, height);
>  
> -    OSDTypeImage::Reinit(wmult, hmult);
> +    OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
>  }
>  
>  void OSDTypePosSlider::SetPosition(int pos)
> @@ -1129,7 +1129,7 @@
>  
>      m_displayrect = QRect(x, y, width, height);
>  
> -    OSDTypeImage::Reinit(wmult, hmult);
> +    OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
>  }
>  
>  void OSDTypeFillSlider::SetPosition(int pos)
> @@ -1654,7 +1654,7 @@
>  void OSDTypePositionImage::Reinit(float wchange, float hchange, float wmult, 
>                                    float hmult)
>  {
> -    OSDTypeImage::Reinit(wmult, hmult);
> +    OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
>  
>      for (int i = 0; i < m_numpositions; i++)
>      {
> Index: libs/libmythtv/osdtypes.h
> ===================================================================
> --- libs/libmythtv/osdtypes.h	(revision 36)
> +++ libs/libmythtv/osdtypes.h	(working copy)
> @@ -226,7 +226,7 @@
>      virtual ~OSDTypeImage();
>  
>      void SetName(const QString &name);
> -    void Reinit(float wmult, float hmult);
> +    void Reinit(float wchange, float hchange, float wmult, float hmult);
>  
>      void LoadImage(const QString &filename, float wmult, float hmult, 
>                     int scalew = -1, int scaleh = -1);
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev at mythtv.org
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev


More information about the mythtv-dev mailing list