verem <[email protected]> added the comment: May be i am wrong, but actually added condition (avi->stream_index < 0) prevents from broking ast->remaining value: - ast->remaining been initialized in /index honour/ code then (avi->stream_index < 0) - ast->remaining been decremented in packet splitting code then (avi->stream_index >= 0)
Actually ast->remaining initialized either in /index honour/ code or in a resync part after reading appropriate avi chunk. So i do not see a situation for breaking packet splitting code. PS: I did a patch with a lot of av_log to find the problem and there is some logging output (i selected some continuous av_read_packet calls): N-th avi_read_packet call (reads completely one video frame and returns as one packet): [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=-1 [avi @ 0x89c7420]avi_read_packet(): i=0, ts=240000 st->time_base=1/25, ast->frame_offset=6, st->nb_index_entries=48, ast->sample_size=0 [avi @ 0x89c7420]avi_read_packet(): i=1, ts=250000 st->time_base=1/48000, ast->frame_offset=48000, st->nb_index_entries=7, ast->sample_size=4 [avi @ 0x89c7420]avi_read_packet(): best_stream_index=0, best_ts=240000 [avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0 [avi @ 0x89c7420]avi_read_packet(): i=6, best_ast->frame_offset=6 [avi @ 0x89c7420]avi_read_packet(): best_ast->packet_size=best_ast->remaining=144000 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:6 offset:6 1/25 smpl_siz:0 base:1000000 st:0 size:144000 [avi @ 0x89c7420]size=144000. ast->remaining=0 (N+1)-th avi_read_packet call (reads audio chunk 48000 bytes length and returns packet 256 bytes, so remains is 47744 bytes): [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=-1 [avi @ 0x89c7420]avi_read_packet(): i=0, ts=280000 st->time_base=1/25, ast->frame_offset=7, st->nb_index_entries=48, ast->sample_size=0 [avi @ 0x89c7420]avi_read_packet(): i=1, ts=250000 st->time_base=1/48000, ast->frame_offset=48000, st->nb_index_entries=7, ast->sample_size=4 [avi @ 0x89c7420]avi_read_packet(): best_stream_index=1, best_ts=250000 [avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0 [avi @ 0x89c7420]avi_read_packet(): i=1, best_ast->frame_offset=48000 [avi @ 0x89c7420]avi_read_packet(): best_ast->packet_size=best_ast->remaining=48000 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:12000 offset:48000 4/192000 smpl_siz:4 base:1000000 st:1 size:256 [avi @ 0x89c7420]size=256. ast->remaining=47744 (N+2)-th avi_read_packet call (return 256 bytes packet, remains 47488 bytes): [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:12064 offset:48256 4/192000 smpl_siz:4 base:1000000 st:1 size:256 [avi @ 0x89c7420]size=256. ast->remaining=47488 (N+3)-th avi_read_packet call: [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:12128 offset:48512 4/192000 smpl_siz:4 base:1000000 st:1 size:256 [avi @ 0x89c7420]size=256. ast->remaining=47232 (N+J)-th avi_read_packet call: [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:23904 offset:95616 4/192000 smpl_siz:4 base:1000000 st:1 size:256 [avi @ 0x89c7420]size=256. ast->remaining=128 (N+J+1)-th avi_read_packet call (return last 128 bytes packet): [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:23968 offset:95872 4/192000 smpl_siz:4 base:1000000 st:1 size:128 [avi @ 0x89c7420]size=128. ast->remaining=0 (N+J+2)-th avi_read_packet call: [avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=-1 [avi @ 0x89c7420]avi_read_packet(): i=0, ts=280000 st->time_base=1/25, ast->frame_offset=7, st->nb_index_entries=48, ast->sample_size=0 [avi @ 0x89c7420]avi_read_packet(): i=1, ts=500000 st->time_base=1/48000, ast->frame_offset=96000, st->nb_index_entries=7, ast->sample_size=4 [avi @ 0x89c7420]avi_read_packet(): best_stream_index=0, best_ts=280000 [avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0 [avi @ 0x89c7420]avi_read_packet(): i=7, best_ast->frame_offset=7 [avi @ 0x89c7420]avi_read_packet(): best_ast->packet_size=best_ast->remaining=144000 [avi @ 0x89c7420]avi_read_packet(): resync: [avi @ 0x89c7420]dts:7 offset:7 1/25 smpl_siz:0 base:1000000 st:0 size:144000 [avi @ 0x89c7420]size=144000. ast->remaining=0 _____________________________________________________ FFmpeg issue tracker <[email protected]> <https://roundup.ffmpeg.org/roundup/ffmpeg/issue1343> _____________________________________________________
avdec_dig1.patch
Description: Binary data
