Opened 13 years ago

Closed 12 years ago

Last modified 11 years ago

#44 closed defect (fixed)

seeking in .dv file with lowres enabled crashes ffplay

Reported by: ami_stuff Owned by:
Priority: normal Component: avformat
Version: git Keywords: dvvideo crash SIGSEGV lowres roundup
Cc: cus@passwd.hu Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

issue 2511

http://samples.mplayerhq.hu/DV-raw/small_test2.dv

C:\>C:\MinGW2\bin\gdb.exe ffplay
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from C:\ffplay.exe...(no debugging symbols found)...done.
(gdb) run -lowres 1 C:\small_test2.dv
Starting program: C:\ffplay.exe -lowres 1 C:\small_test2.dv
[New Thread 2184.0x850]
FFplay version SVN-r26400, Copyright (c) 2003-2011 the FFmpeg developers

built on Jan 18 2011 04:09:28 with gcc 4.4.2
configuration: --enable-gpl --enable-version3 --enable-libgsm --enable-libvorb

is --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg

--enable-libschroedinger --enable-libopencore_amrwb --enable-libopencore_amrnb

--enable-libvpx --disable-decoder=libvpx --arch=x86 --enable-runtime-cpudetect -
-enable-libxvid --enable-libx264 --enable-librtmp --extra-libs='-lrtmp -lpolarss
l -lws2_32 -lwinmm' --target-os=mingw32 --enable-avisynth --enable-w32threads --
cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack

--enable-shared --disable-static

libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0

[New Thread 2184.0xecc]
[New Thread 2184.0x9f4]
[dv @ 01090050] Estimating duration from bitrate, this may be inaccurate
Input #0, dv, from 'C:\small_test2.dv':

Duration: 00:00:02.84, start: 0.000000, bitrate: 28800 kb/s

Stream #0.0: Video: dvvideo, yuv420p, 720x576, 28800 kb/s, PAR 16:15 DAR 4:3

, 25 tbr, 25 tbn, 25 tbc

Stream #0.1: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
Stream #0.2: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s

[pcm_s16le @ 010a1b40] The maximum value for lowres supported by the decoder is
0
[New Thread 2184.0x410]
[New Thread 2184.0x7e4]
Seek to 52% ( 0:00:01) of total duration ( 0:00:02) f=0/0 0/0

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 2184.0x9f4]
0x6495ef02 in dv_init_demux () from C:\avformat-52.dll
(gdb) bt
#0 0x6495ef02 in dv_init_demux () from C:\avformat-52.dll
#1 0x00000000 in ?? ()
(gdb)

Change History (7)

comment:1 by ami_stuff, 13 years ago

with the latest snapshot I can't reproduce the crash, but there is an invalid read (at least under amigaos), so it would be recommended to check what happens under valgrind.

comment:2 by Carl Eugen Hoyos, 13 years ago

Reproduced by developer: set
Status: newopen

(Seeking back.)

(gdb) r -an -lowres 1 small_test2.dv

Starting program: ffplay_g -an -lowres 1 small_test2.dv
[Thread debugging using libthread_db enabled]
FFplay version git-N-29061-g5c00687, Copyright (c) 2003-2011 the FFmpeg developers
  built on Apr 12 2011 18:07:12 with gcc 4.5.2
  configuration: --cc='/usr/local/gcc-4.5.2/bin/gcc -m32' --disable-asm
  libavutil    50. 40. 1 / 50. 40. 1
  libavcodec   52.119. 0 / 52.119. 0
  libavformat  52.106. 0 / 52.106. 0
  libavdevice  52.  4. 0 / 52.  4. 0
  libavfilter   1. 78. 0 /  1. 78. 0
  libswscale    0. 13. 0 /  0. 13. 0
[New Thread 0xf78e3b70 (LWP 26676)]
[New Thread 0xf7014b70 (LWP 26677)]
[dv @ 0x8c3f580] Estimating duration from bitrate, this may be inaccurate
Input #0, dv, from 'small_test2.dv':
  Duration: 00:00:02.84, start: 0.000000, bitrate: 28800 kb/s
    Stream #0.0: Video: dvvideo, yuv420p, 720x576, 28800 kb/s, PAR 16:15 DAR 4:3, 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
    Stream #0.2: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
[New Thread 0xf6786b70 (LWP 26678)]
[New Thread 0xf5f85b70 (LWP 26679)]
   0.64 A-V:  0.000 s:0.0 aq=    0KB vq=  844KB sq=    0B f=0/0   0/0
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf7014b70 (LWP 26677)]
dv_frame_offset (timestamp=-233, s=<value optimized out>, c=<value optimized out>,
    flags=<value optimized out>) at libavformat/dv.c:374
374         int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size;
(gdb) bt
#0  dv_frame_offset (timestamp=-233, s=<value optimized out>, c=<value optimized out>,
    flags=<value optimized out>) at libavformat/dv.c:374
#1  dv_read_seek (timestamp=-233, s=<value optimized out>, c=<value optimized out>,
    flags=<value optimized out>) at libavformat/dv.c:472
#2  0x081100f0 in av_seek_frame (s=0x8c3f580, stream_index=0, timestamp=-233, flags=1)
    at libavformat/utils.c:1788
#3  0x08050c4f in decode_thread (arg=0xf7015020) at ffplay.c:2524
#4  0xf7e04391 in ?? () from /usr/lib/libSDL-1.2.so.0
#5  0xf7e506eb in ?? () from /usr/lib/libSDL-1.2.so.0
#6  0xf7de06e5 in start_thread () from /lib/libpthread.so.0
#7  0xf7de0600 in ?? () from /lib/libpthread.so.0
(gdb) disass $pc-31 $pc+32
Dump of assembler code from 0x8083240 to 0x808327f:
0x08083240 <dv_frame_offset+0>: mov    0x8(%ebx),%eax
0x08083243 <dv_frame_offset+3>: mov    0x8(%eax),%eax
0x08083246 <dv_frame_offset+6>: mov    %eax,(%esp)
0x08083249 <dv_frame_offset+9>: call   0x81db3c0 <ff_dv_codec_profile>
0x0808324e <dv_frame_offset+14>:        mov    0x60(%esp),%edx
0x08083252 <dv_frame_offset+18>:        mov    %eax,%ebp
0x08083254 <dv_frame_offset+20>:        mov    0x10(%edx),%eax
0x08083257 <dv_frame_offset+23>:        mov    %eax,(%esp)
0x0808325a <dv_frame_offset+26>:        call   0x807b270 <avio_size>
0x0808325f <dv_frame_offset+31>:        mov    0x8(%ebp),%ebp
0x08083262 <dv_frame_offset+34>:        mov    %ebp,0x28(%esp)
0x08083266 <dv_frame_offset+38>:        mov    %edx,%edi
0x08083268 <dv_frame_offset+40>:        mov    0x60(%esp),%edx
0x0808326c <dv_frame_offset+44>:        mov    %eax,%esi
0x0808326e <dv_frame_offset+46>:        mov    0xf04(%edx),%eax
0x08083274 <dv_frame_offset+52>:        mov    0xf08(%edx),%edx
0x0808327a <dv_frame_offset+58>:        sub    %eax,%esi
0x0808327c <dv_frame_offset+60>:        mov    %eax,0x30(%esp)
End of assembler dump.
(gdb) info registers
eax            0x9c4000 10240000
ecx            0xf7014060       -150912928
edx            0x0      0
ebx            0x8c68560        147228000
esp            0xf70140f0       0xf70140f0
ebp            0x0      0x0
esi            0x0      0
edi            0xffffff17       -233
eip            0x808325f        0x808325f <dv_frame_offset+31>
eflags         0x10282  [ SF IF RF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x63     99

comment:3 by Carl Eugen Hoyos, 13 years ago

Component: undeterminedavformat
Version: unspecifiedgit

comment:4 by ami_stuff, 12 years ago

when I use ffmpeg with lowres then the output video have still the same resolution as input, so maybe this is the reasone why ffplay crashes after seeking?

374         int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size;
C:\>ffmpeg -lowres 3 -i C:\small_test2.dv out.avi
ffmpeg version N-34031-ge403a97, Copyright (c) 2000-2011 the FFmpeg developers
  built on Oct 25 2011 15:06:47 with gcc 4.6.1
  configuration: --enable-gpl --enable-version3 --enable-runtime-cpudetect --ena
ble-avisynth --enable-bzlib --enable-frei0r --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --ena
ble-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --en
able-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib

  libavutil    51. 22. 0 / 51. 22. 0
  libavcodec   53. 23. 0 / 53. 23. 0
  libavformat  53. 17. 0 / 53. 17. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 45. 0 /  2. 45. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[dv @ 02092320] Estimating duration from bitrate, this may be inaccurate
Input #0, dv, from 'C:\small_test2.dv':
  Duration: 00:00:02.84, start: 0.000000, bitrate: 28800 kb/s
    Stream #0:0: Video: dvvideo, yuv420p, 720x576, 28800 kb/s, SAR 16:15 DAR 4:3
, 25 tbr, 25 tbn, 25 tbc
    Stream #0:1: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
    Stream #0:2: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
w:720 h:576 pixfmt:yuv420p tb:1/1000000 sar:16/15 sws_param:
[pcm_s16le @ 02606100] The maximum value for lowres supported by the decoder is
0
Output #0, avi, to 'out.avi':
  Metadata:
    ISFT            : Lavf53.17.0
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 720x576 [SAR 16:15 D
AR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 32000 Hz, 2 channels, s16, 12
8 kb/s
Stream mapping:
  Stream #0.0 -> #0.0 (dvvideo -> mpeg4)
  Stream #0.1 -> #0.1 (pcm_s16le -> libmp3lame)
Press [q] to stop, [?] for help
[buffer @ 020A2740] Buffer video input changed from size:720x576 fmt:yuv420p to
size:90x72 fmt:yuv420p
[buffer @ 020A2740] Inserting scaler filter
[buffersink @ 020A29C0] auto-inserting filter 'Input equalizer' between the filt
er 'src' and the filter 'out'
[scale @ 020A3E20] w:90 h:72 fmt:yuv420p -> w:720 h:576 fmt:yuv420p flags:0x2
frame=   28 fps=  0 q=8.7 size=      99kB time=00:00:01.04 bitrate= 775.6kbits/s
frame=   56 fps=  0 q=18.4 size=     165kB time=00:00:02.12 bitrate= 634.5kbits/
AC EOB marker is absent pos=71
frame=   72 fps= 56 q=20.7 Lsize=     206kB time=00:00:02.88 bitrate= 585.9kbits
/s
video:148kB audio:45kB global headers:0kB muxing overhead 6.936536%

comment:5 by Marton Balint, 12 years ago

Cc: cus@passwd.hu added
Resolution: fixed
Status: openclosed

This should be fixed in current git with commit 7b2dba1c50c92c76f147727be7c27872252e29f6.

comment:6 by ami_stuff, 12 years ago

Confirmed, thanks for the fix.

comment:7 by Carl Eugen Hoyos, 11 years ago

Keywords: dvvideo crash SIGSEGV lowres roundup added
Note: See TracTickets for help on using tickets.