From d8af34cf318e337c4412bcb2655e2f85b2c05b1a Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sun, 9 Feb 2025 22:19:36 +0100 Subject: [PATCH 1/2] Add YUV422 to NV12 conversion --- unicapture/converter.c | 45 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/unicapture/converter.c b/unicapture/converter.c index 72fa7b9..38a399e 100644 --- a/unicapture/converter.c +++ b/unicapture/converter.c @@ -155,8 +155,47 @@ int converter_run(converter_t* this, frame_info_t* input, frame_info_t* output, output->width, output->height); return 0; - } else { - // Only support ARGB for now... - return -1; } + + if (target_format == PIXFMT_YUV420_SEMI_PLANAR && input->pixel_format == PIXFMT_YUV422_SEMI_PLANAR) { + this->buffers[0] = realloc(this->buffers[0], input->planes[0].stride * input->height); // Y + this->buffers[1] = realloc(this->buffers[1], input->width / 2 * input->height); // U + this->buffers[2] = realloc(this->buffers[2], input->width / 2 * input->height); // V + this->buffers[3] = realloc(this->buffers[3], input->width / 2 * input->height); // UV + SplitUVPlane( + input->planes[1].buffer, + input->planes[1].stride, + this->buffers[1], + input->width / 2, + this->buffers[2], + input->width / 2, + input->width / 2, + input->height); + + // Passing the UV plane as VU to I422ToNV21 to convert to NV12 + I422ToNV21( + input->planes[0].buffer, + input->planes[0].stride, + this->buffers[2], + input->width / 2, + this->buffers[1], + input->width / 2, + this->buffers[0], + input->planes[0].stride, + this->buffers[3], + input->width, + input->width, + input->height); + + output->width = input->width; + output->height = input->height; + + output->planes[0].buffer = this->buffers[0]; + output->planes[0].stride = input->planes[0].stride; + output->planes[1].buffer = this->buffers[3]; + output->planes[1].stride = input->width; + output->pixel_format = PIXFMT_YUV420_SEMI_PLANAR; + } + + return -1; } From 87ca30d25315165095b6a6ccd49605f092abc37c Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 10 Feb 2025 11:56:17 +0100 Subject: [PATCH 2/2] Fix UV plane order --- unicapture/converter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unicapture/converter.c b/unicapture/converter.c index 38a399e..34f7a9f 100644 --- a/unicapture/converter.c +++ b/unicapture/converter.c @@ -99,10 +99,10 @@ int converter_run(converter_t* this, frame_info_t* input, frame_info_t* output, I422ToARGB( input->planes[0].buffer, input->planes[0].stride, - this->buffers[2], - input->width / 2, this->buffers[1], input->width / 2, + this->buffers[2], + input->width / 2, output->planes[0].buffer, output->planes[0].stride, output->width,