通过message_loop将指针传递给线程

时间:2016-08-21 19:53:02

标签: c++ multithreading ffmpeg

我正在使用FFMPEG对视频进行编码,我为数据包设置了绿屏,我认为这意味着我将获得空缓冲区。我怀疑我传递参数错误。我想帮助正确传递参数。

    vpx_codec_iter_t iter = NULL;
    const vpx_codec_cx_pkt_t *pkt;
    // copy the pixels into our "raw input" container.
    int bytes_filled = avpicture_fill(&pic_raw, data, AV_PIX_FMT_YUV420P, out_width, out_height);
    if(!bytes_filled) {
        Logger::Log("Cannot fill the raw input buffer");
        return;
    }

    if(vpx_codec_encode(&codec, &raw, frame_cnt, 1, flags, VPX_DL_REALTIME))
          die_codec(&codec, "Failed to encode frame");

    while( (pkt = vpx_codec_get_cx_data(&codec, &iter)) ) {
        switch(pkt->kind) {
            case VPX_CODEC_CX_FRAME_PKT:
                glb_app_thread.message_loop().PostWork(callback_factory_.NewCallback(&EncoderInstance::write_ivf_frame_header, pkt));
                glb_app_thread.message_loop().PostWork(callback_factory_.NewCallback(&EncoderInstance::WriteFile, pkt));
                break;
            default:break;
        }
    }

用于事件处理程序

void EncoderInstance::WriteFile(int32_t result, const vpx_codec_cx_pkt_t *pkt){
    lock_file_.Acquire();
    (void) fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile);
    Logger::Log("Packet written");
    lock_file_.Release();

}

我的问题是,我是否正确地传递了pkt这个论点?或者我应该将这些数据包放入队列,然后让writeFile函数在队列上工作。

0 个答案:

没有答案