[FFmpeg-devel] [RFC] comment mpegvideo_split

Baptiste Coudurier baptiste.coudurier
Thu Mar 20 10:34:22 CET 2008


Hi,

Michael Niedermayer wrote:
> On Wed, Mar 19, 2008 at 04:11:37PM +0100, Baptiste Coudurier wrote:
>> Baptiste Coudurier wrote:
>>> Michael Niedermayer wrote:
>>>> On Tue, Mar 18, 2008 at 01:16:34AM +0100, Baptiste Coudurier wrote:
>>>>> Hi,
>>>>>
>>>>> Currently, mpegvideo split function causes problems with containers
>>>>> setting AVFMT_GLOBAL_HEADER, mov and mp4 in particular, because
>>>>> MPEG-1/2 in those containers are to be muxed normally.
>>>>>
>>>>> I don't know any particular usage of the mpegvideo split function, so I
>>>>> tend to want to comment it, to finally fix this issue.
>>>>>
>>>>> Anyone see another better alternative ?
>>>> After a few more seconds :)
>>>> The muxers could just dump extradata for the case of mpeg1/2 before keyframes,
>>>> that should fix it i think. Its of course a little odd to first extract and
>>>> then put it back in the muxer.
>>>>
>>> Would the attached patch be ok ?
>>>
>> This one is more correct, messy though.
>>
>> -- 
>> Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
>> SMARTJOG SAS                                     http://www.smartjog.com
>> Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
>> Phone: +33 1 49966312
> 
>> Index: libavformat/movenc.c
>> ===================================================================
>> --- libavformat/movenc.c	(revision 12503)
>> +++ libavformat/movenc.c	(working copy)
>> @@ -386,7 +386,8 @@
>>          mov_write_esds_tag(pb, track);
>>      else if(track->enc->codec_id == CODEC_ID_AMR_NB)
>>          mov_write_amr_tag(pb, track);
>> -    else if(track->vosLen > 0)
>> +    else if(track->enc->codec_id != CODEC_ID_MPEG2VIDEO &&
>> +            track->vosLen > 0)
>>          mov_write_glbl_tag(pb, track);
>>  
>>      return updateSize (pb, pos);
> 
> I think this is unneeded ?

Well, for known wrapping methods, I prefer avoiding to write unneeded atom,
which have the tendency to confuse FCP or Quicktime.

>> @@ -1537,6 +1538,7 @@
>>      AVCodecContext *enc = trk->enc;
>>      unsigned int samplesInChunk = 0;
>>      int size= pkt->size;
>> +    int dump_extradata = 0;
>>  
>>      if (url_is_streamed(s->pb)) return 0; /* Can't handle that */
>>      if (!size) return 0; /* Discard 0 sized packets */
>> @@ -1582,6 +1584,10 @@
>>          trk->vosLen = 640;
>>          trk->vosData = av_malloc(trk->vosLen);
>>          memcpy(trk->vosData, pkt->data, 640);
>> +    } else if (enc->codec_id == CODEC_ID_MPEG2VIDEO && trk->vosLen > 4 &&
>> +               AV_RB32(trk->vosData) == 0x000001b3 && pkt->flags & PKT_FLAG_KEY) {
>> +        size += trk->vosLen;
>> +        dump_extradata = 1;
>>      }
>>  
>>      if (!(trk->entry % MOV_INDEX_CLUSTER_SIZE)) {
>> @@ -1609,6 +1615,10 @@
>>      trk->sampleCount += samplesInChunk;
>>      mov->mdat_size += size;
>>  
>> +    if (dump_extradata) {
>> +        put_buffer(pb, trk->vosData, trk->vosLen);
>> +        size -= trk->vosLen;
>> +    }
>>      put_buffer(pb, pkt->data, size);
>>  
>>      put_flush_packet(pb);
> 
> ok, its not beautifull but i dont know a better solution. Maybe some
> auto insertion of a bitstream filter, that could also be usefull to
> simplify other cases ...
> Anyway i think its better to commit this, we can always revert it if
> someone does find a better solution.

Sure.

-- 
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
SMARTJOG SAS                                     http://www.smartjog.com
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
Phone: +33 1 49966312




More information about the ffmpeg-devel mailing list