Ill provide some code samples (it's not purely correct), what i mean:

static int create_side_data(H264Picture *pic)

{

        int i, motion_val_size = 0;

        AVFrameSideData *mb_type_side_data = NULL;

        AVFrameSideData *motion_val_side_data = NULL;


        mb_type_side_data = av_frame_new_side_data(&pic->f,
AV_FRAME_DATA_MB_TYPE, sizeof(AVBufferRef));

    if (!mb_type_side_data)

                goto fail;


        memcpy(mb_type_side_data->data, pic->mb_type_buf, sizeof(AVBufferRef));


        motion_val_size = sizeof(pic->motion_val_buf) / 
sizeof(pic->motion_val_buf[0]);

        motion_val_side_data = av_frame_new_side_data(&pic->f,
AV_FRAME_DATA_MOTION_VAL,

                motion_val_size * sizeof(AVBufferRef));


        if (!motion_val_side_data)

                goto fail;


        for (i = 0; i < motion_val_size; ++i) {

        AVBufferRef *ref =
(AVBufferRef*)(&(motion_val_side_data->data[i *
sizeof(AVBufferRef)]));

        memcpy(ref, pic->motion_val_buf[i], sizeof(AVBufferRef));

        }


        return 0;


fail:

        if (mb_type_side_data)

                av_frame_remove_side_data(&pic->f, AV_FRAME_DATA_MB_TYPE);

        if (motion_val_side_data)

                av_frame_remove_side_data(&pic->f, AV_FRAME_DATA_MOTION_VAL);


        return AVERROR(ENOMEM);

}




2014-04-14 16:29 GMT+03:00 Roman Savchenko <[email protected]>:

> Hi All,
>
> a little bit intro: some times ago I asked at libav-user mailing list
> about how can I use mb_type and motion_val from H264Picture. They are used
> in some detection algo that i wrote (its called "Detection in compressed
> domain"). Luca Barbato answered that it can be a part of side data. But no
> future discussion are present. And I decided "to patch" by myself.
>
> But unfortunately I met a problem, because I don't fully understand
> architecture idea of some things. And, it'll be very nice, if u'll help me
> with some advice.
>
> For first I add AV_FRAME_DATA_MB_TYPE and AV_FRAME_DATA_MOTION_VAL in
> AVFrameSideData enum.
>
> For second i try to decide what type (or rather copy) in side data  I
> should use. Because If I'll use AVBufferRef I must (should I?) to ref with
> av_buffer_ref. But it will provide a allocation for AVBufferRef and
> AVFrameSideData will provide allocation for AVBufferRef too.  It'll not be
> a problem if I will copy by value.
>
> For third, its pretty the same as second, what type of copy should I use
> to copy H264Picture.motion_val. If it will be a deep copy should I expand
> memory to one line or simply provide AV_FRAME_DATA_MOTION_VAL0,
> AV_FRAME_DATA_MOTION_VAL1?
>
> For fourth, and last, can I use expanded_data rather side_data? Where
> should I store knowledge about indexes?
>
> Regards,
> R. Savchenko.
>
>
>
>
>
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to