1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef VIDEO_PROCESSING_CAPI_CAPABILITY_H 17 #define VIDEO_PROCESSING_CAPI_CAPABILITY_H 18 19 #include <unordered_map> 20 21 #include "v1_0/cm_color_space.h" 22 #include "native_buffer.h" 23 #include "surface_type.h" 24 25 #include "video_processing_types.h" 26 #include "algorithm_common.h" 27 28 namespace OHOS { 29 namespace Media { 30 namespace VideoProcessingEngine { 31 using namespace HDI::Display::Graphic::Common::V1_0; 32 33 const std::unordered_map<OH_NativeBuffer_ColorSpace, CM_ColorSpaceType> NATIVE_COLORSPACE_TO_CM_MAP = { 34 {OH_COLORSPACE_BT601_EBU_LIMIT, CM_BT601_EBU_LIMIT}, 35 {OH_COLORSPACE_BT601_SMPTE_C_LIMIT, CM_BT601_SMPTE_C_LIMIT}, 36 {OH_COLORSPACE_BT709_LIMIT, CM_BT709_LIMIT}, 37 {OH_COLORSPACE_BT2020_HLG_LIMIT, CM_BT2020_HLG_LIMIT}, 38 {OH_COLORSPACE_BT2020_PQ_LIMIT, CM_BT2020_PQ_LIMIT}, 39 {OH_COLORSPACE_BT601_EBU_FULL, CM_BT601_EBU_FULL}, 40 {OH_COLORSPACE_BT601_SMPTE_C_FULL, CM_BT601_SMPTE_C_FULL}, 41 {OH_COLORSPACE_BT709_FULL, CM_BT709_FULL}, 42 {OH_COLORSPACE_BT2020_HLG_FULL, CM_BT2020_HLG_FULL}, 43 {OH_COLORSPACE_BT2020_PQ_FULL, CM_BT2020_PQ_FULL}, 44 }; 45 const std::unordered_map<OH_NativeBuffer_MetadataType, CM_HDR_Metadata_Type> NATIVE_METADATATYPE_TO_CM_MAP = { 46 {OH_VIDEO_HDR_HLG, CM_VIDEO_HLG}, 47 {OH_VIDEO_HDR_HDR10, CM_VIDEO_HDR10}, 48 {OH_VIDEO_HDR_VIVID, CM_VIDEO_HDR_VIVID}, 49 }; 50 const std::unordered_map<OH_NativeBuffer_Format, GraphicPixelFormat> NATIVE_FORMAT_TO_GRAPHIC_MAP = { 51 {NATIVEBUFFER_PIXEL_FMT_RGBA_8888, GRAPHIC_PIXEL_FMT_RGBA_8888}, 52 {NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP, GRAPHIC_PIXEL_FMT_YCBCR_420_SP}, 53 {NATIVEBUFFER_PIXEL_FMT_YCRCB_420_SP, GRAPHIC_PIXEL_FMT_YCRCB_420_SP}, 54 {NATIVEBUFFER_PIXEL_FMT_RGBA_1010102, GRAPHIC_PIXEL_FMT_RGBA_1010102}, 55 {NATIVEBUFFER_PIXEL_FMT_YCBCR_P010, GRAPHIC_PIXEL_FMT_YCBCR_P010}, 56 {NATIVEBUFFER_PIXEL_FMT_YCRCB_P010, GRAPHIC_PIXEL_FMT_YCRCB_P010}, 57 }; 58 59 class VideoProcessingCapiCapability { 60 public: 61 static bool IsColorSpaceConversionSupported(const VideoProcessing_ColorSpaceInfo* sourceVideoInfo, 62 const VideoProcessing_ColorSpaceInfo* destinationVideoInfo); 63 static bool IsMetadataGenerationSupported(const VideoProcessing_ColorSpaceInfo* sourceVideoInfo); 64 static VideoProcessing_ErrorCode OpenGLInit(); 65 static std::shared_ptr<OpenGLContext> GetOpenGLContext(); 66 private: 67 static std::shared_ptr<OpenGLContext> openglContext_; 68 }; 69 } // namespace VideoProcessingEngine 70 } // namespace Media 71 } // namespace OHOS 72 73 #endif // VIDEO_PROCESSING_CAPI_CAPABILITY_H