matroskadec: decode track private data if needed

original patch by Evgeniy Stepanov  eugeni.stepanov _at_ gmail _dot_ com

Originally committed as revision 13892 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Evgeniy Stepanov 2008-06-22 15:52:28 +00:00 committed by Aurelien Jacobs
parent 935ec5a1d5
commit 5e8477b011

View File

@ -1610,6 +1610,23 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
} }
} }
if (track->codec_priv_size && track->encoding_scope & 2) {
uint8_t *orig_priv = track->codec_priv;
int offset = matroska_decode_buffer(&track->codec_priv,
&track->codec_priv_size, track);
if (offset > 0) {
track->codec_priv = av_malloc(track->codec_priv_size + offset);
memcpy(track->codec_priv, track->encoding_settings, offset);
memcpy(track->codec_priv+offset, orig_priv, track->codec_priv_size);
track->codec_priv_size += offset;
av_free(orig_priv);
} else if (!offset) {
av_free(orig_priv);
} else
av_log(matroska->ctx, AV_LOG_ERROR,
"Failed to decode codec private data\n");
}
if (track->type && matroska->num_tracks < ARRAY_SIZE(matroska->tracks)) { if (track->type && matroska->num_tracks < ARRAY_SIZE(matroska->tracks)) {
matroska->tracks[matroska->num_tracks++] = track; matroska->tracks[matroska->num_tracks++] = track;
} else { } else {