Browse Source

compute dts shift with ctts value, cslg atom might be missing, fix #419

Originally committed as revision 20458 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.6
Baptiste Coudurier 16 years ago
parent
commit
e745272196
1 changed files with 5 additions and 24 deletions
  1. +5
    -24
      libavformat/mov.c

+ 5
- 24
libavformat/mov.c View File

@@ -1362,29 +1362,6 @@ static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
return 0;
}

static int mov_read_cslg(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
{
AVStream *st;
MOVStreamContext *sc;

if (c->fc->nb_streams < 1)
return 0;
st = c->fc->streams[c->fc->nb_streams-1];
sc = st->priv_data;

get_be32(pb); // version + flags

sc->dts_shift = get_be32(pb);
dprintf(c->fc, "dts shift %d\n", sc->dts_shift);

get_be32(pb); // least dts to pts delta
get_be32(pb); // greatest dts to pts delta
get_be32(pb); // pts start
get_be32(pb); // pts end

return 0;
}

static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
{
AVStream *st;
@@ -1415,7 +1392,12 @@ static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)

sc->ctts_data[i].count = count;
sc->ctts_data[i].duration= duration;
if (duration < 0)
sc->dts_shift = FFMAX(sc->dts_shift, -duration);
}

dprintf(c->fc, "dts shift %d\n", sc->shift);

return 0;
}

@@ -1978,7 +1960,6 @@ static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
static const MOVParseTableEntry mov_default_parse_table[] = {
{ MKTAG('a','v','s','s'), mov_read_extradata },
{ MKTAG('c','o','6','4'), mov_read_stco },
{ MKTAG('c','s','l','g'), mov_read_cslg },
{ MKTAG('c','t','t','s'), mov_read_ctts }, /* composition time to sample */
{ MKTAG('d','i','n','f'), mov_read_default },
{ MKTAG('d','r','e','f'), mov_read_dref },


Loading…
Cancel
Save