[FFmpeg-devel] [PATCH 4/4] movenc: Write QuickTime chapters

Baptiste Coudurier baptiste.coudurier
Mon May 3 21:20:27 CEST 2010


On 05/03/2010 03:50 AM, Martin Storsj? wrote:
> On Mon, 26 Apr 2010, Martin Storsj? wrote:
>
>> On Wed, 21 Apr 2010, David Conrad wrote:
>>
>>> On Apr 19, 2010, at 5:27 PM, Baptiste Coudurier wrote:
>>>
>>>> Hi David,
>>>>
>>>> On 04/19/2010 10:24 AM, David Conrad wrote:
>>>>> ---
>>>>>   libavformat/movenc.c |   78 ++++++++++++++++++++++++++++++++++++++++++++++---
>>>>>   1 files changed, 73 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>>>>> index 4efed1b..3cec73c 100644
>>>>> --- a/libavformat/movenc.c
>>>>> +++ b/libavformat/movenc.c
>>>>> @@ -77,12 +77,14 @@ typedef struct MOVIndex {
>>>>>       MOVIentry   *cluster;
>>>>>       int         audio_vbr;
>>>>>       int         height; ///<   active picture (w/o VBI) height for D-10/IMX
>>>>> +    int         qt_chapterid; ///<   trackID of the qt chapter track
>>>>
>>>> Any reason why putting qt_ in front of the name ?
>>>
>>> I thought it might be confusing since there's two different chapter methods, changed to use a more generic tref naming.
>>>
>>>>>   } MOVTrack;
>>>>>
>>>>>   typedef struct MOVMuxContext {
>>>>>       int     mode;
>>>>>       int64_t time;
>>>>>       int     nb_streams;
>>>>> +    int     qt_chapters; ///<   number of the qt chapter track
>>>>
>>>> Ditto.
>>>>
>>>>> [...]
>>>>>
>>>>> +static int mov_write_packet(AVFormatContext *s, AVPacket *pkt);
>>>>
>>>> Can the function be moved to avoid forward declaration ?
>>>> If yes, please move it.
>>>
>>>
>>> Done
>>>
>>>>> +
>>>>> +// QuickTime chapters involve an additional text track with the chapter names
>>>>> +// as samples, and a tref pointing from the other tracks to the chapter one.
>>>>> +static void mov_create_qt_chapter_track(AVFormatContext *s, int tracknum)
>>>>
>>>> _qt_ seems useless to me. there is already mov_ prefix.
>>>>
>>>>> +{
>>>>> +    MOVMuxContext *mov = s->priv_data;
>>>>> +    MOVTrack *track =&mov->tracks[tracknum];
>>>>> +    AVPacket pkt = { .stream_index = tracknum, .flags = AV_PKT_FLAG_KEY };
>>>>> +    int i, len;
>>>>> +
>>>>> +    track->mode = mov->mode;
>>>>> +    track->tag = MKTAG('t','e','x','t');
>>>>> +    track->timescale = MOV_TIMESCALE;
>>>>> +    track->enc = avcodec_alloc_context();
>>>>
>>>> Shouldn't enc be freed ?
>>>
>>> It was after writing trak, but I guess it makes more sense to do so in write_trailer
>>>
>>>>> [...]
>>>>>
>>>>> @@ -1832,7 +1894,11 @@ static int mov_write_header(AVFormatContext *s)
>>>>>           }
>>>>>       }
>>>>>
>>>>> -    mov->tracks = av_mallocz(s->nb_streams*sizeof(*mov->tracks));
>>>>> +    mov->nb_streams = s->nb_streams;
>>>>> +    if (mov->mode&   (MODE_MOV|MODE_IPOD)&&   mov->nb_streams&&   s->nb_chapters)
>>>>> +        mov->qt_chapters = mov->nb_streams++;
>>>>
>>>> mov->nb_streams cannot be 0 since s->nb_streams cannot.
>>>
>>> Fixed
>>
>> Baptiste, is this ok to be commited? I've based my RTP hinting patches on
>> this now, since it includes some generic things that I need, too.
>
> Ping

Yes, both patches are good.

-- 
Baptiste COUDURIER
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer                                  http://www.ffmpeg.org



More information about the ffmpeg-devel mailing list