summaryrefslogtreecommitdiff
path: root/libavformat/mov.c
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2013-07-09 10:19:21 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2013-07-09 11:43:33 +0200
commit9a1ec1f2f223b19f5ce574c3683ac6827fe93633 (patch)
tree8d48bc0b2c97dd0f4f3eb0544a5bdbfb801caf7a /libavformat/mov.c
parent3c5071db88b215d79a0b0f5b447d987b667e8817 (diff)
Force correct extradata for AVID AVCI50 in mov.
Fixes ticket #2106. Reviewed-by: Kieran Kunhya
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r--libavformat/mov.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 99c396e296..9c6ad99d90 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1014,6 +1014,22 @@ static int mov_read_avid(MOVContext *c, AVIOContext *pb, MOVAtom atom)
return mov_read_extradata(c, pb, atom, AV_CODEC_ID_AVUI);
}
+static int mov_read_ares(MOVContext *c, AVIOContext *pb, MOVAtom atom)
+{
+ AVCodecContext *codec = c->fc->streams[c->fc->nb_streams-1]->codec;
+ if (codec->codec_tag == MKTAG('A', 'V', 'i', 'n') &&
+ codec->codec_id == AV_CODEC_ID_H264 &&
+ atom.size > 11) {
+ avio_skip(pb, 10);
+ /* For AVID AVCI50, force width of 1440 to be able to select the correct SPS and PPS */
+ if (avio_rb16(pb) == 0xd4d)
+ codec->width = 1440;
+ return 0;
+ }
+
+ return mov_read_avid(c, pb, atom);
+}
+
static int mov_read_svq3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
return mov_read_extradata(c, pb, atom, AV_CODEC_ID_SVQ3);
@@ -2801,7 +2817,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
{ MKTAG('A','C','L','R'), mov_read_avid },
{ MKTAG('A','P','R','G'), mov_read_avid },
{ MKTAG('A','A','L','P'), mov_read_avid },
-{ MKTAG('A','R','E','S'), mov_read_avid },
+{ MKTAG('A','R','E','S'), mov_read_ares },
{ MKTAG('a','v','s','s'), mov_read_avss },
{ MKTAG('c','h','p','l'), mov_read_chpl },
{ MKTAG('c','o','6','4'), mov_read_stco },