Re: vdr-2.0.6 crashes at recording start with divide error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12.10.2014 16:30, Chris Mayo wrote:
I occasionally see vdr crashing when a recording starts like this:

kernel: traps: recording[352] trap divide error ip:4cfeff sp:7fc8e9523e00 error:0 in vdr[400000+156000]
runvdr[300]: Floating point exception

$ gdb /usr/bin/vdr
(gdb) disass /m 0x4cfeff

1514	in remux.c
    0x00000000004cfee6 <+870>:	mov    0x290(%rbx),%rsi
    0x00000000004cfeed <+877>:	xor    %edx,%edx
    0x00000000004cfeef <+879>:	mov    0x284(%rbx),%ecx
    0x00000000004cfef5 <+885>:	mov    0xc(%rbx),%eax
    0x00000000004cfefc <+892>:	add    0xc(%rsi),%ecx
    0x00000000004cfeff <+895>:	div    %ecx
    0x00000000004cff08 <+904>:	mov    %eax,%ecx

Point to this in remux.c?
1514: uint32_t Delta = ptsValues[0] / (framesPerPayloadUnit +  parser->IFrameTemporalReferenceOffset());

This should fix it:

--- remux.c     2014/03/08 15:10:24     2.75.1.5
+++ remux.c     2014/04/13 13:59:21     2.75.1.6
@@ -1511,7 +1511,12 @@
                        for (int i = 0; i < numPtsValues; i++)
                            ptsValues[i] = ptsValues[i + 1] - ptsValues[i];
                        qsort(ptsValues, numPtsValues, sizeof(uint32_t), CmpUint32);
-                       uint32_t Delta = ptsValues[0] / (framesPerPayloadUnit +  parser->IFrameTemporalReferenceOffset());
+                       int Div = framesPerPayloadUnit;
+                       if (framesPerPayloadUnit > 1)
+                          Div += parser->IFrameTemporalReferenceOffset();
+                       if (Div <= 0)
+                          Div = 1;
+                       uint32_t Delta = ptsValues[0] / Div;
                        // determine frame info:
                        if (isVideo) {
                           if (abs(Delta - 3600) <= 1)

Klaus

_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr




[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux