#include "media/base/tizen/logger/media_logger.h"
#include "media/filters/tizen/media_video_codec.h"
#include "media/filters/tizen/omx/omx_utils.h"
+#include "media/filters/tizen/video_utils.h"
namespace media {
}
namespace {
-MediaVideoPixelFormat ConvertToMediaPixelFormat(
- uint32_t num_planes,
- v4l2_drm_colorformat_type colorformat) {
- switch (colorformat) {
- case V4L2_DRM_COLORFORMAT_RGB444:
- case V4L2_DRM_COLORFORMAT_YUV444:
- case V4L2_DRM_COLORFORMAT_YUV420:
- if (num_planes == 0) {
- return MediaVideoPixelFormat::kPixelFormatTiled;
- }
- break;
- case V4L2_DRM_COLORFORMAT_YUV422:
- if (num_planes == 2) {
- return MediaVideoPixelFormat::kPixelFormatNV16;
- }
- break;
- case V4L2_DRM_COLORFORMAT_YC:
- if (num_planes == 2) {
- return MediaVideoPixelFormat::kPixelFormatNV12;
- }
- break;
-#if TIZEN_VERSION_AT_LEAST(8, 0, 0)
- case V4L2_DRM_COLORFORMAT_RGB444_10:
- break;
-#endif // TIZEN_VERSION_AT_LEAST(8, 0, 0)
- }
- TIZEN_MEDIA_LOG_NO_INSTANCE(WARNING)
- << "Cannot convert to pixel format, num planes: " << num_planes
- << ", colorformat: " << colorformat;
- return MediaVideoPixelFormat::kPixelFormatUnknown;
-}
-
uint32_t CountPlanes(const OmxFacadeVideo::OutputData& output_data) {
uint32_t result = 0;
if (output_data.nv12_data.y_data == nullptr) {
output_data.eos = (output_buf_hdr_->nFlags & OMX_BUFFERFLAG_EOS);
uint32_t num_planes = CountPlanes(output_data);
- output_data.pixel_format = ConvertToMediaPixelFormat(
- num_planes, drm->u.dec_info.pFrame[0].colorformat);
+ output_data.pixel_format = ConvertPlatformToMediaPixelFormat(
+ num_planes, static_cast<uint32_t>(drm->u.dec_info.pFrame[0].colorformat));
TIZEN_MEDIA_LOG(VERBOSE) << "Output cb: " << output_data.timestamp;
output_cb_.Run(output_data);
--- /dev/null
+// Copyright 2024 Samsung Electronics Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/filters/tizen/video_utils.h"
+
+#include "absl/types/optional.h"
+#include "build/tizen_version.h"
+#include "media/base/tizen/logger/media_logger.h"
+
+#if TIZEN_VERSION_AT_LEAST(8, 0, 0)
+#include <video-common-defs.h>
+#else
+#include <ivideo-renderer.hpp>
+#endif // TIZEN_VERSION_AT_LEAST(8, 0, 0)
+
+namespace media {
+
+namespace {
+// For internal usage only. We cannot use any existing struct for this, as
+// packages changes between Tizen versions. Instead, treat this as internal
+// intermediate enum with following conversion:
+// platform -> internal -> MediaVideoPixelFormat
+enum class PixelFormat {
+ kRGB444,
+ kYUV444,
+ kYUV422,
+ kYUV420,
+ kNV12,
+ kYUV444_10BIT,
+};
+
+absl::optional<PixelFormat> PlatformToPixelFormat(uint32_t color_format) {
+#if TIZEN_VERSION_AT_LEAST(8, 0, 0)
+ switch (color_format) {
+ case VIDEORCTRL_COLORFORMAT_RGB444:
+ return PixelFormat::kRGB444;
+ case VIDEORCTRL_COLORFORMAT_YUV444:
+ return PixelFormat::kYUV444;
+ case VIDEORCTRL_COLORFORMAT_YUV422:
+ return PixelFormat::kYUV422;
+ case VIDEORCTRL_COLORFORMAT_YUV420:
+ return PixelFormat::kYUV420;
+ case VIDEORCTRL_COLORFORMAT_YC:
+ return PixelFormat::kNV12;
+ case VIDEORCTRL_COLORFORMAT_RGB444_10:
+ return PixelFormat::kYUV444_10BIT;
+ }
+#else
+ switch (color_format) {
+ case IVideoRenderer::ColorFormatType::COLORFORMAT_RGB444:
+ return PixelFormat::kRGB444;
+ case IVideoRenderer::ColorFormatType::COLORFORMAT_YUV444:
+ return PixelFormat::kYUV444;
+ case IVideoRenderer::ColorFormatType::COLORFORMAT_YUV420:
+ return PixelFormat::kYUV420;
+ case IVideoRenderer::ColorFormatType::COLORFORMAT_YUV422:
+ return PixelFormat::kYUV422;
+ case IVideoRenderer::ColorFormatType::COLORFORMAT_YC:
+ return PixelFormat::kNV12;
+ }
+#endif // TIZEN_VERSION_AT_LEAST(8, 0, 0)
+ return absl::nullopt;
+}
+} // namespace
+
+MediaVideoPixelFormat ConvertPlatformToMediaPixelFormat(uint32_t num_planes,
+ uint32_t color_format) {
+ const auto pixel_format = PlatformToPixelFormat(color_format);
+ if (!pixel_format) {
+ TIZEN_MEDIA_LOG_NO_INSTANCE(WARNING)
+ << "Unknown color format: " << color_format;
+ return MediaVideoPixelFormat::kPixelFormatUnknown;
+ }
+
+ switch (*pixel_format) {
+ case PixelFormat::kRGB444:
+ case PixelFormat::kYUV444:
+ case PixelFormat::kYUV420:
+ if (num_planes == 0) {
+ return MediaVideoPixelFormat::kPixelFormatTiled;
+ }
+ break;
+ case PixelFormat::kYUV422:
+ if (num_planes == 2) {
+ return MediaVideoPixelFormat::kPixelFormatNV16;
+ }
+ break;
+ case PixelFormat::kNV12:
+ if (num_planes == 2) {
+ return MediaVideoPixelFormat::kPixelFormatNV12;
+ }
+ break;
+ case PixelFormat::kYUV444_10BIT:
+ break;
+ }
+ TIZEN_MEDIA_LOG_NO_INSTANCE(WARNING)
+ << "Cannot convert to pixel format, num planes: " << num_planes
+ << ", colorformat: " << color_format;
+ return MediaVideoPixelFormat::kPixelFormatUnknown;
+}
+
+} // namespace media