mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
avformat: add common mechanism for skipping samples at the start of file
This makes using the generic indexing code with mp3 easier at a later point. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
afc7748d1f
commit
7dd8bf53bd
@ -1082,6 +1082,15 @@ typedef struct AVStream {
|
||||
*/
|
||||
int skip_samples;
|
||||
|
||||
/**
|
||||
* If not 0, the number of samples that should be skipped from the start of
|
||||
* the stream (the samples are removed from packets with pts==0, which also
|
||||
* assumes negative timestamps do not happen).
|
||||
* Intended for use with formats such as mp3 with ad-hoc gapless audio
|
||||
* support.
|
||||
*/
|
||||
int64_t start_skip_samples;
|
||||
|
||||
/**
|
||||
* If not 0, the first audio sample that should be discarded from the stream.
|
||||
* This is broken by design (needs global sample count), but can't be
|
||||
|
@ -1416,6 +1416,8 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
sample < st->last_discard_sample)
|
||||
discard_padding = FFMIN(end_sample - st->first_discard_sample, duration);
|
||||
}
|
||||
if (st->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
|
||||
st->skip_samples = st->start_skip_samples;
|
||||
if (st->skip_samples || discard_padding) {
|
||||
uint8_t *p = av_packet_new_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, 10);
|
||||
if (p) {
|
||||
@ -1645,6 +1647,8 @@ void ff_read_frame_flush(AVFormatContext *s)
|
||||
|
||||
if (s->internal->inject_global_side_data)
|
||||
st->inject_global_side_data = 1;
|
||||
|
||||
st->skip_samples = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user