mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avformat/matroskadec: Cache whether a track needs to be decoded
There is no need to recheck this for every frame. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
b577968cab
commit
96012d17a9
@ -249,6 +249,7 @@ typedef struct MatroskaTrack {
|
||||
AVStream *stream;
|
||||
int64_t end_timecode;
|
||||
int ms_compat;
|
||||
int needs_decoding;
|
||||
uint64_t max_block_additional_id;
|
||||
|
||||
uint32_t palette[AVPALETTE_COUNT];
|
||||
@ -2405,6 +2406,11 @@ static int matroska_parse_tracks(AVFormatContext *s)
|
||||
}
|
||||
}
|
||||
}
|
||||
track->needs_decoding = encodings && !encodings[0].type &&
|
||||
encodings[0].scope & 1 &&
|
||||
(encodings[0].compression.algo !=
|
||||
MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP ||
|
||||
encodings[0].compression.settings.size);
|
||||
|
||||
for (j = 0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++) {
|
||||
if (!strncmp(ff_mkv_codec_tags[j].str, track->codec_id,
|
||||
@ -3413,12 +3419,11 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska,
|
||||
uint8_t *additional, uint64_t additional_id, int additional_size,
|
||||
int64_t discard_padding)
|
||||
{
|
||||
MatroskaTrackEncoding *encodings = track->encodings.elem;
|
||||
uint8_t *pkt_data = data;
|
||||
int res = 0;
|
||||
AVPacket pktl, *pkt = &pktl;
|
||||
|
||||
if (encodings && !encodings->type && encodings->scope & 1) {
|
||||
if (track->needs_decoding) {
|
||||
res = matroska_decode_buffer(&pkt_data, &pkt_size, track);
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
Loading…
Reference in New Issue
Block a user