[FFmpeg-devel] [PATCH] avformat/mxfenc: support XAVC long gop

Baptiste Coudurier baptiste.coudurier at gmail.com
Sun May 12 23:02:44 EEST 2019


Hi Tomas

> On May 12, 2019, at 6:47 AM, Tomas Härdin <tjoppen at acc.umu.se> wrote:
> 
> fre 2019-05-10 klockan 08:50 -0700 skrev Baptiste Coudurier:
>> +static inline int get_ue_golomb(GetBitContext *gb) {
>> +    int i, v;
>> +    for (i = 0; i < 32 && !get_bits1(gb); i++)
>> +        ;
>> +    for (v = 1; i--;)
>> +        v = (v << 1) | get_bits1(gb);
> 
> Isn't there already a function to get variable number of bits?

get_bits doesn’t work for n == 0

>> 
>> +
>> +    sps->profile_idc = get_bits(&gb, 8);
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 0; // constraint_set0_flag
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 1; // constraint_set1_flag
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 2; // constraint_set2_flag
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 3; // constraint_set3_flag
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 4; // constraint_set4_flag
>> +    sps->constraint_set_flags |= get_bits1(&gb) << 5; // constraint_set5_flag
> 
> Why not just get 6 bits at once?

That’s how it’s done in h264_ps.c currently.
 
>> +static void mxf_write_local_tags(AVIOContext *pb, const MXFLocalTagPair *local_tags, int count)
>> +{
>> +    int i;
>> +    for (i = 0; i < count; i++) {
>> +        avio_wb16(pb, local_tags[i].local_tag);
>> +        avio_write(pb, local_tags[i].uid, 16);
>> +    }
>> +}
> 
> This function could be used to simplify mxf_write_primer_pack(). But
> that probably belongs in a separate patch.

Yes, it does

>> +
>>  static void mxf_write_primer_pack(AVFormatContext *s)
>>  {
>>      MXFContext *mxf = s->priv_data;
>>      AVIOContext *pb = s->pb;
>>      int local_tag_number, i = 0;
>> +    int avc_tags_count = 0;
>>  
>>      local_tag_number = FF_ARRAY_ELEMS(mxf_local_tag_batch);
>>      local_tag_number += mxf->store_user_comments * FF_ARRAY_ELEMS(mxf_user_comments_local_tag);
>>  
>> +    for (i = 0; i < s->nb_streams; i++) {
>> +        MXFStreamContext *sc = s->streams[i]->priv_data;
>> +        if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_H264 && !sc->avc_intra) {
>> +            avc_tags_count = FF_ARRAY_ELEMS(mxf_avc_subdescriptor_local_tags);
>> +            local_tag_number += avc_tags_count;
> 
> This will output a broken file if there's more than one XAVC stream.
> Not possible now I think, but will be a problem is someone decides to
> give higher operational patterns a try

Yes, it will get caught when this happens.

— 
Baptiste



More information about the ffmpeg-devel mailing list