gpt4 book ai didi

返回到帧数组时损坏的帧

转载 作者:行者123 更新时间:2023-12-02 19:02:03 24 4
gpt4 key购买 nike

运行以下代码时,我遇到了损坏的帧。它们在帧解码过程中是有效的帧,

(gdb) print frame->side_data 
$2 = (AVFrameSideData **) 0x1a2ad40
(gdb) print frame->side_data->type
$3 = AV_FRAME_DATA_MOTION_VECTORS

但是,当它们返回到 AVFrame 数组时,我发现数组内有损坏的帧,这意味着指针仍然在那里,但我无法访问指针实际指向的内容:

(gdb) print frames_video1[1]->side_data 
$4 = (AVFrameSideData **) 0x1a21bc0
(gdb) print frames_video1[1]->side_data->type
Cannot access memory at address 0x0

我认为负责它的代码已被证明如下:

AVFrame frames_video1[3];
char *src_filename1;

int main()
{
...
decode_video(src_filename1, frames_video1);
...
}

int decode_video(char *src_filename, AVFrame frames_video[])
{
...
video_dec_ctx->flags2 |= AV_CODEC_FLAG2_EXPORT_MVS;
...
decode_packet(&got_frame, 0, frames_video);
...
}

static int decode_packet(int *got_frame, int cached, AVFrame frames_video[])
{
int ret = 0;
int decoded = pkt.size;
*got_frame = 0;
if (pkt.stream_index == video_stream_idx) {
/* decode video frame */
ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
if (ret < 0) {
fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret));
return ret;
}
if (*got_frame) {
if(video_frame_count < FRAME_TO_COMPARE_NUM){
AVFrame tmp;
tmp = *frame; //here I inserted a breakpoint, frames here are still valid...
frames_video[video_frame_count] = tmp;
}
video_frame_count++;
}
return decoded;
}

有人可以告诉我如何正确地返回帧数组,以便帧内的指针仍然是有效的指针吗?

我想听听您的回复,是我没有把问题描述清楚,所以您没有理解透彻,那么我想更详细地解释一下,或者您没有遇到过这种情况之前的问题?

最佳答案

您正在按值将“frames_video[]”传递到decode_packet方法中,因此您无法在此方法中更新它。尝试更改它以将其作为指向数组的指针传递。

关于返回到帧数组时损坏的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com