当我执行以下代码时:
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"
我认为运动矢量应该是一种长链。但是从上面......为什么那么短?