[FFmpeg-devel] [PATCH] Read mov/mp4 timed text extradata

Baptiste Coudurier baptiste.coudurier
Sun Jan 11 08:55:19 CET 2009


David Conrad wrote:
> On Jan 11, 2009, at 1:13 AM, Baptiste Coudurier wrote:
> 
>> Hi,
>>
>> David Conrad wrote:
>>> Hi,
>>>
>>> mov/mp4 timed text stores some needed info for rendering (specifically
>>> display flags, justification, background color, fonts, and default
>>> styles) as a part of the stsd atom. Everything except the font table
>>> (which is a subatom) is an extension of the stsd atom, so unfortunately
>>> I can't simply add an entry in mov_default_parse_table.
>>>
>>> [...]
>>>
>>> --- a/libavformat/mov.c
>>> +++ b/libavformat/mov.c
>>> @@ -978,6 +978,11 @@ static int mov_read_stsd(MOVContext *c,
>>> ByteIOContext *pb, MOVAtom atom)
>>>             }
>>>         } else if(st->codec->codec_type==CODEC_TYPE_SUBTITLE){
>>>             st->codec->codec_id= id;
>>> +            if (id == CODEC_ID_MOV_TEXT) {
>>> +                st->codec->extradata_size = size - (url_ftell(pb) -
>>> start_pos);
>>> +                st->codec->extradata =
>>> av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
>>> +                get_buffer(pb, st->codec->extradata,
>>> st->codec->extradata_size);
>>> +            }
>>>         } else {
>>>             /* other codec type, just skip (rtp, mp4s, tmcd ...) */
>>>             url_fskip(pb, size - (url_ftell(pb) - start_pos));
>>>
>>
>> This duplicates mov_read_glbl, IMHO call it with fake atom.
>> Besides Iam really thinking about exporting whole 'stsd' atom containing
>> all extradata, this would avoid exporting on a per case basis, and would
>> allow user to retrieve all information he desires. We could provide
>> helpers to parse atoms also.
> 
> Like so?
> 
> 
> ------------------------------------------------------------------------
> 
> commit 71a905a16dc69a1c1e5d55aa86fdc85629701951
> Author: David Conrad <davedc at Kozue.local>
> Date:   Sun Jan 11 01:22:56 2009 -0500
> 
>     Read extradata (justification, colors, fonts) for mov/mp4 timed text
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index c0c057a..c34903d 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -977,7 +977,9 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
>                  sc->sample_size = (bits_per_sample >> 3) * st->codec->channels;
>              }
>          } else if(st->codec->codec_type==CODEC_TYPE_SUBTITLE){
> +            MOVAtom fake_atom = { .size = size - (url_ftell(pb) - start_pos) };
>              st->codec->codec_id= id;
> +            mov_read_glbl(c, pb, fake_atom);
>          } else {
>              /* other codec type, just skip (rtp, mp4s, tmcd ...) */
>              url_fskip(pb, size - (url_ftell(pb) - start_pos));

Yes, with a comment explaining what is it good for (rendering infos etc..)

-- 
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no




More information about the ffmpeg-devel mailing list