[TTVD][Camera] Fix wrong MJPEG decoding format on X22UD 63/324963/5
authorJakub Gajownik <j.gajownik2@samsung.com>
Mon, 5 May 2025 17:36:19 +0000 (19:36 +0200)
committerBot Blink <blinkbot@samsung.com>
Thu, 29 May 2025 11:33:41 +0000 (11:33 +0000)
When captured video is decoded using hardware decoder on
X22UD board, it's converted internally to NV12 format, so
we need to adjust logic to handle this case.
New GPU workaround is added for this specific problem.

Bug: https://jira-eu.sec.samsung.net/browse/VDGAME-701
Change-Id: I1a7736d9245c466a97252952c9270b1e73ffd742
Signed-off-by: Jakub Gajownik <j.gajownik2@samsung.com>
gpu/config/gpu_driver_bug_list.json
gpu/config/gpu_workaround_list.txt
media/filters/tizen/omx/omx_facade_video.cc

index df4fcd3101f7cbd871c571432701d9d04e82e8a8..aab11909ddb41c65c56aedda13216ba95760fa90 100644 (file)
       "features": [
         "ttvd_texturing_breaks_overlay_mode"
       ]
+    },
+    {
+      "id": 436,
+      "description": "Hardware decoder automatically converts MJPEG YUV422 to NV12 format",
+      "os": {
+        "type": "linux"
+      },
+      "machine_model_name": ["X22UD"],
+      "features": [
+        "ttvd_mjpeg_converted_to_nv12"
+      ]
     }
   ]
 }
index fdb1b744411287955dc22e9f1d5b42d05b0cd459..b2643d38aa1f4a778fce446bc229b7e6e30d2a48 100644 (file)
@@ -111,6 +111,7 @@ ttvd_force_frames_rendering
 ttvd_disable_buffer_parallel_copy
 ttvd_disable_faster_decoder_selection
 ttvd_disable_manual_rendering
+ttvd_mjpeg_converted_to_nv12
 ttvd_prefer_manual_rendering_for_low_latency
 ttvd_texturing_breaks_overlay_mode
 scalarize_vec_and_mat_constructor_args
index dc6945a5c1b4abc0a17fb7a36663e5eb3c34ef58..ca8b9ef1a423ec075088041d22437bc51abb2a19 100644 (file)
@@ -98,7 +98,8 @@ void ConvertVideoDataOmx(const OMX_BUFFERHEADERTYPE* output_buf_hdr,
 #elif defined(TIZEN_TV_UPSTREAM_MULTIMEDIA_OMX_PPI)
 void ConvertVideoDataPpi(const OMX_BUFFERHEADERTYPE* output_buf_hdr,
                          OmxFacadeVideo::OutputData* output_data,
-                         MediaVideoCodec codec) {
+                         MediaVideoCodec codec,
+                         const gpu::GpuDriverBugWorkarounds& workarounds) {
   const auto* video_info =
       static_cast<OMX_VIDEO_FRAME_INFO*>(output_buf_hdr->pPlatformPrivate);
 
@@ -122,7 +123,9 @@ void ConvertVideoDataPpi(const OMX_BUFFERHEADERTYPE* output_buf_hdr,
   if (num_planes == 0) {
     output_data->pixel_format = MediaVideoPixelFormat::kPixelFormatTiled;
   } else if (codec == MediaVideoCodec::kCodecMJPEG) {
-    output_data->pixel_format = MediaVideoPixelFormat::kPixelFormatNV16;
+    output_data->pixel_format = workarounds.ttvd_mjpeg_converted_to_nv12
+                                    ? MediaVideoPixelFormat::kPixelFormatNV12
+                                    : MediaVideoPixelFormat::kPixelFormatNV16;
   } else {
     output_data->pixel_format = MediaVideoPixelFormat::kPixelFormatNV12;
   }
@@ -403,7 +406,7 @@ void OmxFacadeVideo::HandleOutputData() {
 #if defined(TIZEN_TV_UPSTREAM_MULTIMEDIA_OMX)
   ConvertVideoDataOmx(output_buf_hdr_, &output_data);
 #elif defined(TIZEN_TV_UPSTREAM_MULTIMEDIA_OMX_PPI)
-  ConvertVideoDataPpi(output_buf_hdr_, &output_data, codec_);
+  ConvertVideoDataPpi(output_buf_hdr_, &output_data, codec_, workarounds_);
 #endif  // defined(TIZEN_TV_UPSTREAM_MULTIMEDIA_OMX)
 
   TIZEN_MEDIA_LOG(VERBOSE) << "Output cb: " << output_data.timestamp;