关于AVFrameSideData和运动矢量的问题

时间:2016-04-30 13:18:15

标签: c ffmpeg

当我执行以下代码时:

    AVFrameSideData* avfsd=NULL;
    avfsd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS);
    if(avfsd->data != NULL)
        printf("avfsd->data != NULL\n");

我遇到了分段错误。在我看来,avfsd不允许访问数据字段。但是当我查看AVFrameSideData的文档时,我发现:

typedef struct AVFrameSideData {
        enum AVFrameSideDataType type;
        uint8_t *data;
        int      size;
        AVDictionary *metadata;
    } AVFrameSideData;

为什么我无法通过unint8_t *data访问avfsd->data?坦率地说,avfsd并不是Null。以下是一些调试信息:

(gdb) print avfsd 
$5 = <optimized out>
(gdb) print *avfsd
value has been optimized out
(gdb) print avfsd->data
value has been optimized out
(gdb) print frame->side_data 
$6 = (AVFrameSideData **) 0x1bc4000

顺便说一句,这里的数据是帧的运动矢量数据吗?为什么这么短:看看我从gdb得到了什么:

(gdb) print frame->side_data[0]->type
$2 = AV_FRAME_DATA_MOTION_VECTORS
(gdb) print frame->side_data[0]->data   
$1 = (uint8_t *) 0x1c32540 "\377\377\377\377\020\020\006"

我认为运动矢量应该是一种长链。但是从上面......为什么那么短?

0 个答案:

没有答案