示例#1
0
static void fix_gpu_converted_alignment(struct obs_core_video *video,
		struct video_data *frame, int cur_texture)
{
	struct source_frame *new_frame = &video->convert_frames[cur_texture];
	uint32_t src_linesize = frame->linesize[0];
	uint32_t dst_linesize = video->output_width * 4;
	uint32_t src_pos      = 0;

	for (size_t i = 0; i < 3; i++) {
		if (video->plane_linewidth[i] == 0)
			break;

		src_pos = make_aligned_linesize_offset(video->plane_offsets[i],
				dst_linesize, src_linesize);

		copy_dealign(new_frame->data[i], 0, dst_linesize,
				frame->data[0], src_pos, src_linesize,
				video->plane_sizes[i]);
	}

	/* replace with cached frames */
	for (size_t i = 0; i < MAX_AV_PLANES; i++) {
		frame->data[i]     = new_frame->data[i];
		frame->linesize[i] = new_frame->linesize[i];
	}
}
示例#2
0
static void fix_gpu_converted_alignment(struct obs_core_video *video,
		struct video_frame *output, const struct video_data *input)
{
	uint32_t src_linesize = input->linesize[0];
	uint32_t dst_linesize = output->linesize[0] * 4;
	uint32_t src_pos      = 0;

	for (size_t i = 0; i < 3; i++) {
		if (video->plane_linewidth[i] == 0)
			break;

		src_pos = make_aligned_linesize_offset(video->plane_offsets[i],
				dst_linesize, src_linesize);

		copy_dealign(output->data[i], 0, dst_linesize,
				input->data[0], src_pos, src_linesize,
				video->plane_sizes[i]);
	}
}