On Monday 16 February 2009, Vladimir Monchenko wrote:
> Maik Opitz wrote:
> > Some more info:
> > The VDR OSD is shown normaly. When there is no signal on DVB card (and  
> > so no video is shown) all seems OK. When the video comes in it  
> > segfaults.
> >   
> 
> Yes, you are right. I did not connect  DVB USB adapter to laptop.
> After connection DVB card I have segfault.

By default: I'm sorry for my delayed response.

For summary: original bug reporter used a ffmpeg checkout from 2008-12-19.
  That's about svn revision r16226 to r16244

My last used ffmpeg version was r16128

To reproduce errors with ffmpeg it is important to have exact
revision numbers, like those you get from command ffplay:
FFplay version SVN-r16128, Copyright (c) 2003-2008 Fabrice Bellard, et al.
  configuration: --enable-shared --enable-postproc --enable-gpl 
--enable-swscale --enable-libfaac --enable-libfaad --enable-pthreads
  libavutil     49.12. 0 / 49.12. 0
  libavcodec    52. 6. 1 / 52. 6. 1
  libavformat   52.23. 1 / 52.23. 1
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 6. 1 /  0. 6. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Dec 14 2008 18:17:02, gcc: 4.1.2 (Gentoo 4.1.2 p1.1)
An input file must be specified

I upgraded to this version now:
FFplay version SVN-r17385, Copyright (c) 2003-2009 Fabrice Bellard, et al.
  configuration: --enable-shared --enable-postproc --enable-gpl 
--enable-swscale --enable-libfaac --enable-libfaad --enable-pthreads
  libavutil     49.14. 0 / 49.14. 0
  libavcodec    52.15. 0 / 52.15. 0
  libavformat   52.29. 0 / 52.29. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 7. 0 /  0. 7. 0
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Feb 16 2009 20:50:07, gcc: 4.1.2 (Gentoo 4.1.2 p1.1)
An input file must be specified

But while upgrading ffmpeg my mind cleared a bit, and I remembered some
reverted changes I did even for my old 16128 revision.

Assuming you save attached patches above ffmpeg directory, please try to
apply both inside ffmpeg's directory in sequence with the following commands:

patch  -p1 -R <../r-15799.patch
patch  -p1 -R <../r-15634.patch

These patches fix my segfaults but I did only a short test.


-- 
Stefan Lucke
--- trunk/libavformat/aviobuf.c 2008/10/18 17:30:37     15634
+++ trunk/libavformat/aviobuf.c 2008/11/10 21:41:35     15799
@@ -290,7 +290,7 @@
 
 static void fill_buffer(ByteIOContext *s)
 {
-    uint8_t *dst= s->buf_end - s->buffer < s->buffer_size ? s->buf_ptr : 
s->buffer;
+    uint8_t *dst= !s->max_packet_size && s->buf_end - s->buffer < 
s->buffer_size ? s->buf_ptr : s->buffer;
     int len= s->buffer_size - (dst - s->buffer);
 
     assert(s->buf_ptr == s->buf_end);
--- trunk/libavformat/aviobuf.c 2008/10/04 21:11:58     15555
+++ trunk/libavformat/aviobuf.c 2008/10/18 17:30:37     15634
@@ -290,20 +290,25 @@
 
 static void fill_buffer(ByteIOContext *s)
 {
-    int len=0;
+    uint8_t *dst= s->buf_end - s->buffer < s->buffer_size ? s->buf_ptr : 
s->buffer;
+    int len= s->buffer_size - (dst - s->buffer);
+
+    assert(s->buf_ptr == s->buf_end);
 
     /* no need to do anything if EOF already reached */
     if (s->eof_reached)
         return;
 
-    if(s->update_checksum){
+    if(s->update_checksum && dst == s->buffer){
         if(s->buf_end > s->checksum_ptr)
             s->checksum= s->update_checksum(s->checksum, s->checksum_ptr, 
s->buf_end - s->checksum_ptr);
         s->checksum_ptr= s->buffer;
     }
 
     if(s->read_packet)
-        len = s->read_packet(s->opaque, s->buffer, s->buffer_size);
+        len = s->read_packet(s->opaque, dst, len);
+    else
+        len = 0;
     if (len <= 0) {
         /* do not modify buffer if EOF reached so that a seek back can
            be done without rereading data */
@@ -312,8 +317,8 @@
             s->error= len;
     } else {
         s->pos += len;
-        s->buf_ptr = s->buffer;
-        s->buf_end = s->buffer + len;
+        s->buf_ptr = dst;
+        s->buf_end = dst + len;
     }
 }
 
_______________________________________________
Softdevice-devel mailing list
Softdevice-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/softdevice-devel

Reply via email to