Skip to content

qtdemux: Fix reverse playback for pcm audio stream

Hosang Lee requested to merge Hosang/gstreamer:qt-reverse-playback into main

Some raw lpcm or adpcm may have larger sample sizes than the max buffer size value set. Trimming the buffer causes bogus size error on reverse playback.

Example adpcm audio stream.

0:00:00.049765219 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:11851:qtdemux_parse_trak:<qtdemux0> track subtype: soun
0:00:00.049767609 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:11908:qtdemux_parse_trak:<qtdemux0> stsd len:           68
0:00:00.049771956 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:11909:qtdemux_parse_trak:<qtdemux0> stsd entry count:   1
0:00:00.049774504 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:11924:qtdemux_parse_trak:<qtdemux0> stsd type:          ima4
0:00:00.049776464 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:11926:qtdemux_parse_trak:<qtdemux0> stsd type len:      52
0:00:00.049778650 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13080:qtdemux_parse_trak:<qtdemux0> version/rev:      00010000
0:00:00.049780583 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13081:qtdemux_parse_trak:<qtdemux0> vendor:           00000000
0:00:00.049782516 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13083:qtdemux_parse_trak:<qtdemux0> n_channels:       1
0:00:00.049784432 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13084:qtdemux_parse_trak:<qtdemux0> sample_size:      16
0:00:00.049786441 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13085:qtdemux_parse_trak:<qtdemux0> compression_id:   0
0:00:00.049788313 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13086:qtdemux_parse_trak:<qtdemux0> packet size:      0
0:00:00.049790928 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13088:qtdemux_parse_trak:<qtdemux0> sample rate:      22050
0:00:00.049792991 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13113:qtdemux_parse_trak:<qtdemux0> Sound sample description Version 1
0:00:00.049795027 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13114:qtdemux_parse_trak:<qtdemux0> samples/packet:   64
0:00:00.049796999 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13116:qtdemux_parse_trak:<qtdemux0> bytes/packet:     34
0:00:00.049798830 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13118:qtdemux_parse_trak:<qtdemux0> bytes/frame:      34
0:00:00.049800667 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13120:qtdemux_parse_trak:<qtdemux0> bytes/sample:     2
0:00:00.049802601 112786 0x7fccd0000eb0 LOG                  qtdemux qtdemux.c:13126:qtdemux_parse_trak:<qtdemux0> samples/frame:    64
0:00:00.049811274 112786 0x7fccd0000eb0 INFO                 qtdemux qtdemux.c:13957:qtdemux_parse_trak:<qtdemux0> unhandled type ima4
0:00:00.049815283 112786 0x7fccd0000eb0 INFO                 qtdemux qtdemux.c:13962:qtdemux_parse_trak:<qtdemux0> type ima4 caps audio/x-adpcm, layout=(string)quicktime
0:00:01.855474825 171664 0x7fbca8034a40 DEBUG                qtdemux qtdemux.c:5537:gst_qtdemux_stream_update_segment:<qtdemux0:audio_0> New segment: time segment start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.560000000, rate=-1.000000, applied_rate=1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999

0:00:01.855927786 171664 0x7fbca8034a40 DEBUG                qtdemux qtdemux.c:7140:gst_qtdemux_loop_state_movie:<qtdemux0> size 22050 larger than stream max_buffer_size 8192, trimming
0:00:01.856026989 171664 0x7fbca8034a40 DEBUG                qtdemux qtdemux.c:7140:gst_qtdemux_loop_state_movie:<qtdemux0> size 22050 larger than stream max_buffer_size 8192, trimming
0:00:01.856088429 171664 0x7fbca8034a40 WARN                 qtdemux qtdemux.c:558:gst_qtdemux_pull_atom:<qtdemux0> error: This file is invalid and cannot be played.
0:00:01.856092631 171664 0x7fbca8034a40 WARN                 qtdemux qtdemux.c:558:gst_qtdemux_pull_atom:<qtdemux0> error: atom has bogus size 4292411360
Edited by Hosang Lee

Merge request reports