On Sat, Jan 09, 2016 at 12:02:19PM +0100, Mats Peterson wrote: > Minor simplification of get_qt_codec(). Description follows: > > This patch adds a new static function get_qt_codec() that takes care > of the initial retrieval of the fourcc and codec ID for A_QUICKTIME > and V_QUICKTIME. It also normalizes noncompliant private data found > in some older files that incorrectly starts with the fourcc by > expanding/shifting the data by 4 bytes, and storing the data size at > the start. This is necessary in order for the rest of the code in > the A_QUICKTIME and V_QUICKTIME blocks (and most likely other code > as well) to correctly parse the private data. > > Mats > > -- > Mats Peterson > http://matsp888.no-ip.org/~mats/
> matroskadec.c | 47 ++++++++++++++++++++++++++++++++++------------- > 1 file changed, 34 insertions(+), 13 deletions(-) > 714309bb2cd9614cb58dfdaa5c05574d53386bb5 > 0001-lavf-matroskadec-Normalize-noncompliant-A_QUICKTIME-.patch > From 9448cff9c5cdd1e301da8868c8e2e189ef34c760 Mon Sep 17 00:00:00 2001 > From: Mats Peterson <matsp...@yahoo.com> > Date: Sat, 9 Jan 2016 11:59:18 +0100 > Subject: [PATCH v4] lavf/matroskadec: Normalize noncompliant > A_QUICKTIME/V_QUICKTIME private data > > Minor simplification of get_qt_codec(). Description follows: > > This patch adds a new static function get_qt_codec() that takes care of > the initial retrieval of the fourcc and codec ID for A_QUICKTIME and > V_QUICKTIME. It also normalizes noncompliant private data found in some > older files that incorrectly starts with the fourcc by expanding/shifting > the data by 4 bytes, and storing the data size at the start. This is > necessary in order for the rest of the code in the A_QUICKTIME and > V_QUICKTIME blocks (and most likely other code as well) to correctly > parse the private data. > > Mats > > --- > libavformat/matroskadec.c | 47 > ++++++++++++++++++++++++++++++++------------- > 1 file changed, 34 insertions(+), 13 deletions(-) > > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index be4e300..71bf5e5 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -1708,6 +1708,32 @@ static void mkv_stereo_mode_display_mul(int > stereo_mode, int *h_width, int *h_he > } > } > > +static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum > AVCodecID *codec_id) > +{ > + const AVCodecTag *codec_tags; > + > + codec_tags = track->type == MATROSKA_TRACK_TYPE_VIDEO ? > + ff_codec_movvideo_tags : ff_codec_movaudio_tags; > + > + /* Normalize noncompliant private data that starts with the fourcc > + * by expanding/shifting the data by 4 bytes and storing the data > + * size at the start. */ > + if (ff_codec_get_id(codec_tags, AV_RL32(track->codec_priv.data))) { > + if (!(track->codec_priv.data = av_realloc(track->codec_priv.data, > + track->codec_priv.size + 4))) > + return AVERROR(ENOMEM); in case of this failing the memory is not freed and leaks see av_reallocp() if you want it to be freed, alternatively the code could continue without the move/update [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Complexity theory is the science of finding the exact solution to an approximation. Benchmarking OTOH is finding an approximation of the exact
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel