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