avcodec YUV to RGB
avcodec YUV to RGB
我正在尝试使用libswscale将YUV帧转换为RGB。
下面是我的代码:AVFrame *RGBFrame;
SwsContext *ConversionContext;
ConversionContext = sws_getCachedContext(NULL, FrameWidth, FrameHeight, AV_PIX_FMT_YUV420P, FrameWidth, FrameHeight, AV_PIX_FMT_RGB24, SWS_BILINEAR, 0, 0, 0);
RGBFrame = av_frame_alloc();
avpicture_fill((AVPicture *)RGBFrame, &FillVect[0], AV_PIX_FMT_RGB24, FrameWidth, FrameHeight);
sws_scale(ConversionContext, VideoFrame->data, VideoFrame->linesize, 0, VideoFrame->height, RGBFrame->data, RGBFrame->linesize);
我的程序在sws_scale函数上执行SEGFAULT。
VideoFrame是一个AVFrame结构体,它保存我解码的帧。
我认为这是因为YUV帧来自avcodec_decode_video2,它返回这样的数组:
VideoFrame->data[0] // Y array, linesize = frame width
VideoFrame->data[1] // U array, linesize = frame width/2
VideoFrame->data[2] // V array, linesize = frame width/2
而YUV420P理论上只有一个平面(根据维基百科,YUV420P是平面格式,那么Y, U, V数据被分组在一起)。所以,我不知道如何继续转换我的数组,其中Y, U, V数据被分割成RGB24,使用swscale。
请帮帮我,谢谢:)
av_frame_alloc
只为帧对象本身分配内存,它不分配内存来存储图像数据。你做了吗?
FillVect.resize( avpicture_get_size( PIX_FMT_RGB24, FrameWidth, FrameHeight ) );
在你的代码某处调用avpicture_fill
之前?或者其他方式来确保FillVect分配足够的内存来保存整个解码图像?
您是否尝试在valgrind下运行它以查看究竟是什么触发了SEGFAULT?
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- cpp rgb to yuv422 conversion
- HSV (0 .. 255) to RGB (0 .. 255)
- avcodec YUV to RGB