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