|
|
@@ -1358,13 +1358,14 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) |
|
|
|
if (ret >= 0) { |
|
|
|
AVStream *st = s->streams[pkt->stream_index]; |
|
|
|
int discard_padding = 0; |
|
|
|
if (st->end_discard_sample && pkt->pts != AV_NOPTS_VALUE) { |
|
|
|
if (st->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) { |
|
|
|
int64_t pts = pkt->pts - (is_relative(pkt->pts) ? RELATIVE_TS_BASE : 0); |
|
|
|
int64_t sample = ts_to_samples(st, pts); |
|
|
|
int duration = ts_to_samples(st, pkt->duration); |
|
|
|
int64_t end_sample = sample + duration; |
|
|
|
if (duration > 0 && end_sample >= st->end_discard_sample) |
|
|
|
discard_padding = FFMIN(end_sample - st->end_discard_sample, duration); |
|
|
|
if (duration > 0 && end_sample >= st->first_discard_sample && |
|
|
|
sample < st->last_discard_sample) |
|
|
|
discard_padding = FFMIN(end_sample - st->first_discard_sample, duration); |
|
|
|
} |
|
|
|
if (st->skip_samples || discard_padding) { |
|
|
|
uint8_t *p = av_packet_new_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, 10); |
|
|
|