OBS源码分析output_video_data

/*
    输出一帧数据到video的video_output的cache
    video  要输出的视频
    input_frame 要输出的帧
*/
static inline void output_video_data(struct obs_core_video *video,
                     struct video_data *input_frame, int count)
{
    const struct video_output_info *info;
    struct video_frame output_frame;
    bool locked;
    //得到要输出视频的基本信息  宽 高 时间 格式...等
    info = video_output_get_info(video->video);

    //得到一个空闲的cache frame空闲的cache frame  把它的地址拷贝到output_frame中
    locked = video_output_lock_frame(video->video, &output_frame, count,
                     input_frame->timestamp);
    if (locked) {

        if (video->gpu_conversion) {
            //拷贝数据到output_frame 也就是空闲的cache frame中
            set_gpu_converted_data(video, &output_frame,
                           input_frame, info);
        } else {
            copy_rgbx_frame(&output_frame, input_frame, info);
        }
        //拷贝完成  发出信号
        video_output_unlock_frame(video->video);
    }
}

 

posted @ 2020-09-29 17:15  同意并愿意  阅读(170)  评论(0)    收藏  举报