小编M. *_*ing的帖子

在 C 中编码由 OpenGL 捕获的缓冲区

我正在尝试使用 OpenGL 来捕获计算机屏幕的后台缓冲区,然后使用 FFMPEG 的libavcodec库对缓冲区进行 H.264 编码。我遇到的问题是我想对视频进行编码AV_PIX_FMT_420P,但是 OpenGL 提供的后台缓冲区捕获功能glReadPixels()仅支持GL_RGB. 正如你在下面看到的,我尝试使用FFMPEG的swscale()函数从RGB转换为YUV,但是下面的代码swscale()在行中崩溃了。关于如何对 OpenGL 后台缓冲区进行编码的任何想法?

// CAPTURE BACK BUFFER USING OPENGL
    int width = 1280, height = 720;
    BYTE* pixels = (BYTE *) malloc(sizeof(BYTE));
    glReadPixels(0, 720, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);

//CREATE FFMPEG VARIABLES
    avcodec_register_all();

    AVCodec *codec;
    AVCodecContext *context;
    struct SwsContext *sws;
    AVPacket packet;
    AVFrame *frame;

    codec = avcodec_find_encoder(AV_CODEC_ID_H264);
    context = avcodec_alloc_context3(encoder->codec);
    context->dct_algo = FF_DCT_FASTINT;
    context->bit_rate = 400000;
    context->width = width; …
Run Code Online (Sandbox Code Playgroud)

c opengl ffmpeg h.264 libavcodec

5
推荐指数
1
解决办法
277
查看次数

标签 统计

c ×1

ffmpeg ×1

h.264 ×1

libavcodec ×1

opengl ×1