You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Theora: Fix UV channel offset when cropping region
This commit is contained in:
@@ -235,13 +235,16 @@ void VideoStreamPlaybackTheora::video_write(th_ycbcr_buffer yuv) {
|
||||
uint8_t *w = frame_data.ptrw();
|
||||
char *dst = (char *)w;
|
||||
uint32_t y_offset = region.position.y * yuv[0].stride + region.position.x;
|
||||
uint32_t uv_offset = region.position.y * yuv[1].stride + region.position.x;
|
||||
uint32_t uv_offset = 0;
|
||||
|
||||
if (px_fmt == TH_PF_444) {
|
||||
uv_offset += region.position.y * yuv[1].stride + region.position.x;
|
||||
yuv444_2_rgb8888((uint8_t *)dst, (uint8_t *)yuv[0].data + y_offset, (uint8_t *)yuv[1].data + uv_offset, (uint8_t *)yuv[2].data + uv_offset, region.size.x, region.size.y, yuv[0].stride, yuv[1].stride, region.size.x << 2);
|
||||
} else if (px_fmt == TH_PF_422) {
|
||||
uv_offset += region.position.y * yuv[1].stride + region.position.x / 2;
|
||||
yuv422_2_rgb8888((uint8_t *)dst, (uint8_t *)yuv[0].data + y_offset, (uint8_t *)yuv[1].data + uv_offset, (uint8_t *)yuv[2].data + uv_offset, region.size.x, region.size.y, yuv[0].stride, yuv[1].stride, region.size.x << 2);
|
||||
} else if (px_fmt == TH_PF_420) {
|
||||
uv_offset += region.position.y * yuv[1].stride / 2 + region.position.x / 2;
|
||||
yuv420_2_rgb8888((uint8_t *)dst, (uint8_t *)yuv[0].data + y_offset, (uint8_t *)yuv[1].data + uv_offset, (uint8_t *)yuv[2].data + uv_offset, region.size.x, region.size.y, yuv[0].stride, yuv[1].stride, region.size.x << 2);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user