Opened 15 years ago
Closed 14 years ago
#183 closed defect (fixed)
ASF/WMV partial packet change causes infinite loop
| Reported by: | tracey jaquith | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | avcodec |
| Version: | git-master | Keywords: | wma, regression |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description
hi all,
I'm new to posting bugs with FFmpeg, but have been using ffmpeg heavily for years, even customizing and patching it. At some point, I'd like to try to work with folks to see about adding some patches.
OK, back to the "bug" -- granted this is a likely *heavily* poorly (and cutoff) video, but it's representative at times of the random stuff we get in our 500,000+ videos are Internet Archive / archive.org 8-)
The patch here:
causes ffmpeg to spin and write (seemingly) without end -- I have to kill it.
A one-line "revert" for part of that patch will make it stop spinning and just kind of cut off the audio like it used to,
but it'd be nice if the original diff provider / moderator to the longer change (above) could take a look and see what
they think might be best:
if (ret != asf->packet_frag_size) {
av_log(s, AV_LOG_ERROR, "xxxx scrambled\n"); return ret >= 0 ? AVERROR_EOF : ret;
(that is, inserting that one line "fixes my problem" but likely the greater patch had other intentions to it).
Example: run
ffmpeg -i holymatrimony.wmv -vn audio.wav
Attachments (1)
Change History (3)
by , 15 years ago
| Attachment: | holymatrimony.wmv added |
|---|
comment:1 by , 15 years ago
| Keywords: | asf regression added; ASF demuxer removed |
|---|---|
| Priority: | normal → important |
| Reproduced by developer: | set |
| Status: | new → open |
| Version: | git → git-master |
I get no useful backtrace with -vn
(gdb) r -i holymatrimony.wmv -f null -
Starting program: ffmpeg_g -i holymatrimony.wmv -f null -
ffmpeg version git-N-29734-g38bb5a5, Copyright (c) 2000-2011 the FFmpeg developers
built on May 10 2011 00:36:05 with gcc 4.5.2
configuration: --cc='/usr/local/gcc-4.5.2/bin/gcc -m32' --enable-gpl
libavutil 51. 2. 1 / 51. 2. 1
libavcodec 53. 5. 0 / 53. 5. 0
libavformat 53. 0. 3 / 53. 0. 3
libavdevice 53. 0. 0 / 53. 0. 0
libavfilter 2. 5. 0 / 2. 5. 0
libswscale 0. 14. 0 / 0. 14. 0
Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 23.00 (23/1)
Input #0, asf, from 'holymatrimony.wmv':
Metadata:
title : Holy Matrimony Billy!
artist : Mark Kenneth Woods
copyright : Mark Kenneth Woods, 2004.
comment :
Duration: 00:04:25.61, start: 0.000000, bitrate: 40 kb/s
Stream #0.0: Audio: wmav2, 48000 Hz, 2 channels, s16, 128 kb/s
Stream #0.1: Video: wmv1, yuv420p, 240x176, 23 tbr, 1k tbn, 1k tbc
[buffer @ 0x8c9b700] w:240 h:176 pixfmt:yuv420p tb:1/1000000 sar:0/1
Output #0, null, to 'pipe:':
Metadata:
title : Holy Matrimony Billy!
artist : Mark Kenneth Woods
copyright : Mark Kenneth Woods, 2004.
comment :
encoder : Lavf53.0.3
Stream #0.0: Video: rawvideo, yuv420p, 240x176, q=2-31, 200 kb/s, 90k tbn, 23 tbc
Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
Program received signal SIGSEGV, Segmentation fault.
0x081553ac in ff_interleave_add_packet (pkt=0xffffbefc, s=0x8c9a420, compare=<value optimized out>) at libavformat/utils.c:3016
3016 this_pktl->pkt= *pkt;
(gdb) bt
#0 0x081553ac in ff_interleave_add_packet (pkt=0xffffbefc, s=0x8c9a420, compare=<value optimized out>) at libavformat/utils.c:3016
#1 av_interleave_packet_per_dts (pkt=0xffffbefc, s=0x8c9a420, compare=<value optimized out>) at libavformat/utils.c:3064
#2 0x08155623 in av_interleave_packet (flush=0, in=0xffffbefc, out=0xffffba9c, s=<value optimized out>) at libavformat/utils.c:3101
#3 av_interleaved_write_frame (flush=0, in=0xffffbefc, out=0xffffba9c, s=<value optimized out>) at libavformat/utils.c:3122
#4 0x0804cb58 in write_frame (s=0x8c9a420, pkt=0xffffbefc, avctx=0x8c9b020, bsfc=0x0) at ffmpeg.c:782
#5 0x0804f71c in do_audio_out (size=192000,
buf=0xf7c99020 "\230\353\230\353\332\351\332\351=\351=\351\067\351\067\351|\351|\351\320\351\320\351\273\351\273\351]\353]\353\354\355\354\355\317\357\317\357;\362;\362\315\363\315\363\255\363\255\363\001\364\001\364\323\364\323\364\r\367\r\367\236\371\236\371U\373U\373\225\376\225\376\031\002\031\002\371\004\371\004\230\006\230\006N\tN\t\255\f\255\f\213\016\213\016", ist=0x8c9b600, ost=0x8c9b440, s=0x8c9a420) at ffmpeg.c:1031
#6 output_packet (size=192000,
buf=0xf7c99020 "\230\353\230\353\332\351\332\351=\351=\351\067\351\067\351|\351|\351\320\351\320\351\273\351\273\351]\353]\353\354\355\354\355\317\357\317\357;\362;\362\315\363\315\363\255\363\255\363\001\364\001\364\323\364\323\364\r\367\r\367\236\371\236\371U\373U\373\225\376\225\376\031\002\031\002\371\004\371\004\230\006\230\006N\tN\t\255\f\255\f\213\016\213\016", ist=0x8c9b600, ost=0x8c9b440, s=0x8c9a420) at ffmpeg.c:1707
#7 0x08052878 in transcode (nb_output_files=1, nb_input_files=1, stream_maps=0x0, nb_stream_maps=0, input_files=0x872a600, output_files=0x872a460) at ffmpeg.c:2706
#8 0x080586f3 in main (argc=<value optimized out>, argv=<value optimized out>) at ffmpeg.c:4506
(gdb) disass $pc-21 $pc+32
Dump of assembler code from 0x8155397 to 0x81553cc:
0x08155397 <ff_interleave_add_packet+0>: movl $0x48,(%esp)
0x0815539e <ff_interleave_add_packet+7>: mov %ebx,%esi
0x081553a0 <ff_interleave_add_packet+9>: call 0x85d57c0 <av_mallocz>
0x081553a5 <ff_interleave_add_packet+14>: mov $0x11,%ecx
0x081553aa <ff_interleave_add_packet+19>: mov %eax,%edi
0x081553ac <ff_interleave_add_packet+21>: rep movsl %ds:(%esi),%es:(%edi)
0x081553ae <ff_interleave_add_packet+23>: movl $0x0,0x2c(%ebx)
0x081553b5 <ff_interleave_add_packet+30>: mov %eax,0x18(%esp)
0x081553b9 <ff_interleave_add_packet+34>: mov %eax,(%esp)
0x081553bc <ff_interleave_add_packet+37>: call 0x817e8c0 <av_dup_packet>
0x081553c1 <ff_interleave_add_packet+42>: mov 0x18(%ebx),%edx
0x081553c4 <ff_interleave_add_packet+45>: mov 0x18(%ebp),%eax
0x081553c7 <ff_interleave_add_packet+48>: mov (%eax,%edx,4),%eax
0x081553ca <ff_interleave_add_packet+51>: mov %eax,0x1c(%esp)
End of assembler dump.
(gdb) info registers
eax 0x0 0
ecx 0x11 17
edx 0x0 0
ebx 0xffffbefc -16644
esp 0xffffba30 0xffffba30
ebp 0x8c9a420 0x8c9a420
esi 0xffffbefc -16644
edi 0x0 0
eip 0x81553ac 0x81553ac <ff_interleave_add_packet+21>
eflags 0x210282 [ SF IF RF ID ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
comment:2 by , 14 years ago
| Component: | avformat → avcodec |
|---|---|
| Keywords: | wma added; asf removed |
| Resolution: | → fixed |
| Status: | open → closed |
Fixed in git-N-30122-geb97d4d



truncated .wmv that gives ffmpeg grief