【发布时间】:2020-07-19 07:24:36
【问题描述】:
我正在开发一个 OpenGL 视频应用程序,我想在其中以全屏模式呈现视频。我正在尝试使用以下代码渲染视频:
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
glfwWindowHint(GLFW_RED_BITS, mode->redBits);
glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits);
glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits);
glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate);
但是,当我尝试缩放视频帧时,它会产生分段错误。
我正在使用ffmpeg 和sws 比例尺进行颜色转换。
sws_scaler_ctx = sws_getContext(width, height, av_codec_ctx->pix_fmt,
width, height, AV_PIX_FMT_RGB0,
SWS_FAST_BILINEAR, NULL, NULL, NULL);
uint8_t* dest[4] = { frame_buffer, NULL, NULL, NULL };
int dest_linesize[4] = { width*4, 0, 0, 0 };
sws_scale(sws_scaler_ctx, av_frame->data, av_frame->linesize, 0, av_frame->height, dest, dest_linesize);
有谁知道为什么在尝试缩放视频帧时会导致分段错误?
【问题讨论】:
-
如何分配
frame_buffer? -
嗨,我定义了帧缓冲区
uint8_t* frame_buffer。也以uint8_t* frame_buffer= new uint8_t[frame_width * frame_height * 4];发起。 -
assert(frame_width == width && frame_height == height)? -
@ybungalobill 它在我缩放时产生了错误。当我缩放视频帧并尝试将该帧转换为定义的高度和宽度时,它不起作用或转换这就是它产生此错误的原因。如果是因为我的显卡?
-
您的代码在 CPU 上扩展,因此您的显卡无法使用。我怀疑你想缩放你的框架,但你的代码不正确——你将相同的宽度和高度传递给
sws_getContext,用于源和目标。尝试修复它?
标签: c++ opengl ffmpeg rendering video-capture