gpt4 book ai didi

c++ - ffmpeg avcodec_encode_video2 到 avcodec_decode_video2

转载 作者:行者123 更新时间:2023-12-04 23:29:42 24 4
gpt4 key购买 nike

我完全困惑为什么这不起作用......

因此,我已经验证了我的 mjpg 编码正在工作,因为我在将 jpg 图像写入文件后验证了它。作为测试,我想在编码后对数据进行解码,只是为了进行完整性检查,但我不断遇到访问冲突,我完全不知道为什么。

这就是我定义解码缓冲区的方式

AVFrame *pFrameDecoded = avcodec_alloc_frame();
int num_bytes2 = avpicture_get_size(PIX_FMT_YUVJ422P, 320, 248);
uint8_t* frame2_buffer2 = (uint8_t *)av_malloc(num_bytes2*sizeof(uint8_t));
avpicture_fill((AVPicture*)pFrameDecoded, frame2_buffer2, PIX_FMT_YUVJ422P, 320, 240);

这是失败的代码段......
AVPacket packet 
av_init_packet(&packet);
packet.data = NULL;
packet.size = 0;


out_size = avcodec_encode_video2(codecContext, &packet, frame2, &got_output);
if (got_output && got_output > 0) {
int finaldone;
// ERROR OCCURS HERE!!!
avcodec_decode_video2( codecContext, pFrameDecoded, &finaldone, &packet );
}

最佳答案

因此,您的崩溃发生是因为您为编码初始化了 codecContext,并且它的当前状态(例如保留的最后一帧)与编码有关。但是现在您尝试使用相同的上下文进行解码。编解码器上下文附加到特定的视频文件和操作。例如,您不能拥有一个上下文,将来自不同视频的随机数据包传递给它并期望它工作。您需要在您的情况下初始化不同的上下文以进行解码。

您还需要检查 out_size在您的情况下,值可能是非负的 got_output是 1 但 avcodec_encode_video2仍然返回错误。

关于c++ - ffmpeg avcodec_encode_video2 到 avcodec_decode_video2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22431334/

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