From: Gilbok Lee Date: Tue, 15 Oct 2024 07:35:14 +0000 (+0900) Subject: Support trackrenderer_set_resource_allocate_policy() API. X-Git-Tag: accepted/tizen/unified/20241125.111843~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F00%2F319100%2F9;p=platform%2Fcore%2Fmultimedia%2Ftrackrenderer.git Support trackrenderer_set_resource_allocate_policy() API. - Support for kTrackRendererRscAllocExclusive, kTrackRendererRscAllocConditional RscAllocPolicy types - Fix svace issue (SEC_DO_NOT_USE_POINTER_WITH_INT_IN_UNION) [Version] 0.1.4 [Issue Type] Add features Change-Id: I807264d3ff7e8954434e04f172e75b772b860fcc --- diff --git a/include/trackrenderer_capi/track.h b/include/trackrenderer_capi/track.h index d3906b8..fb1ba38 100644 --- a/include/trackrenderer_capi/track.h +++ b/include/trackrenderer_capi/track.h @@ -329,7 +329,7 @@ typedef struct _TrackRendererSubtitleAttr { * kSubAttrWebvttCueAlign \n * kSubAttrWebvttC */ - int32_t i32; + intptr_t i32; /** * @description String type subtitle atribute value. @@ -341,7 +341,7 @@ typedef struct _TrackRendererSubtitleAttr { /** * @description Unsigned 32bit integer type subtitle attribute value. */ - uint32_t ui32; + uintptr_t ui32; /** * @description Unsigned 64bit integer type subtitle attribute value. diff --git a/packaging/libtrackrenderer.spec b/packaging/libtrackrenderer.spec index 5f41d77..64ae3b8 100644 --- a/packaging/libtrackrenderer.spec +++ b/packaging/libtrackrenderer.spec @@ -1,6 +1,6 @@ Name: libtrackrenderer Summary: new multimedia streaming player trackrenderer -Version: 0.1.3 +Version: 0.1.4 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include_internal/trackrenderer/resource.h b/src/include_internal/trackrenderer/resource.h index 3d46fe0..d23d75d 100644 --- a/src/include_internal/trackrenderer/resource.h +++ b/src/include_internal/trackrenderer/resource.h @@ -29,9 +29,17 @@ enum class ResourceCategory { kVideoRenderer, }; +enum class RscAllocPolicy { + kRscAllocExclusive, + kRscAllocConditional, + kRscAllocInAppMultiview, + kRscAllocExclusiveMfcForced +}; + struct ResourceProperty { ResourceCategory category; Track track; + RscAllocPolicy rsc_alloc_policy; }; class Resource { diff --git a/src/include_internal/trackrenderer/trackrenderer.h b/src/include_internal/trackrenderer/trackrenderer.h index 60bbeed..f7cde8a 100644 --- a/src/include_internal/trackrenderer/trackrenderer.h +++ b/src/include_internal/trackrenderer/trackrenderer.h @@ -154,6 +154,7 @@ class TrackRenderer : public ResourceConflictListener, void SetVideoFrameBufferType(DecodedVideoFrameBufferType type) { decoded_buffer_type_ = type; } + void SetResourceAllocatePolicy(const RscAllocPolicy& policy) { rsc_alloc_policy_ = policy; }; GetDecodedVideoFrameState GetDecodedPacket(DecodedVideoPacket& packet); bool ReturnDecodedPacket(const DecodedVideoPacket& packet); bool EnableVideoHole(bool value); @@ -389,6 +390,7 @@ class TrackRenderer : public ResourceConflictListener, std::unique_ptr resource_manager_; std::unique_ptr display_; + RscAllocPolicy rsc_alloc_policy_ = RscAllocPolicy::kRscAllocExclusive; GstCapsBuilder caps_builder_; std::map properties_; diff --git a/src/include_internal/trackrenderer/trackrenderer_capi_utils.h b/src/include_internal/trackrenderer/trackrenderer_capi_utils.h index aeb5132..1ec2ec9 100644 --- a/src/include_internal/trackrenderer/trackrenderer_capi_utils.h +++ b/src/include_internal/trackrenderer/trackrenderer_capi_utils.h @@ -28,6 +28,7 @@ #include "trackrenderer/core/error.h" #include "trackrenderer/core/event.h" #include "trackrenderer/core/track.h" +#include "trackrenderer/resource.h" #include "trackrenderer_capi/buffer.h" #include "trackrenderer_capi/decoderinputbuffer.h" #include "trackrenderer_capi/display.h" @@ -96,6 +97,8 @@ DecodedVideoFrameBufferType ConvertToVideoFrameBufferType( const TrackRendererDecodedVideoFrameBufferType& type); TrackRendererGetDecodedVideoFrameState ConverToGetDecodedVideoFrameState( const GetDecodedVideoFrameState state); +RscAllocPolicy ConvertToRscAllocPolicy + (const TrackRendererRscAllocPolicy& policy); } // namespace capi_utils } // namespace trackrenderer diff --git a/src/resourcemanager.cpp b/src/resourcemanager.cpp index c4d21c6..7cd4119 100644 --- a/src/resourcemanager.cpp +++ b/src/resourcemanager.cpp @@ -36,6 +36,13 @@ const std::map TypeToCategoryConverter = { {ResourceCategory::kVideoDecoder, RM_CATEGORY_VIDEO_DECODER}, {ResourceCategory::kVideoRenderer, RM_CATEGORY_SCALER}}; +const std::map + TypeToResourceStateConverter = { + {RscAllocPolicy::kRscAllocExclusive, RM_STATE_EXCLUSIVE}, + {RscAllocPolicy::kRscAllocConditional, RM_STATE_EXCLUSIVE_CONDITIONAL}, + {RscAllocPolicy::kRscAllocInAppMultiview, RM_STATE_EXCLUSIVE}, + {RscAllocPolicy::kRscAllocExclusiveMfcForced, RM_STATE_EXCLUSIVE}}; + void AddRMHandle(ResourceManager *handle) { TRACKRENDERER_INFO("Resource manager handle[%p]", handle); std::lock_guard lock(rsc_lock); @@ -159,13 +166,13 @@ bool ResourceManager::Acquire_(const ResourceProperty& property) { memset(&devices, 0, sizeof(rm_device_return_s)); req.request_num = 1; - req.state[0] = RM_STATE_EXCLUSIVE; + req.state[0] = internal::TypeToResourceStateConverter.at(property.rsc_alloc_policy); req.category_id[0] = internal::GetCategoryID(property); req.category_option[0] = rc_get_capable_category_id(resourcemanager_handle_, app_id_.c_str(),category_id); int rm_ret = rm_allocate_resources(resourcemanager_handle_, &req, &devices); - if (rm_ret == RM_ERROR) { - TRACKRENDERER_ERROR("[RM_ERROR] rm_allocate_resources fail"); + if (rm_ret != RM_OK) { + TRACKRENDERER_ERROR("[RM_ERROR] rm_allocate_resources fail[%d] error type[%d]", rm_ret, devices.error_type); return false; } diff --git a/src/trackrenderer.cpp b/src/trackrenderer.cpp index 69d6efc..36dea8b 100644 --- a/src/trackrenderer.cpp +++ b/src/trackrenderer.cpp @@ -899,7 +899,7 @@ bool TrackRenderer::CreateDecoder_(const Track* track, const GstCaps* caps) { if (track->type == kTrackTypeVideo) { element = Elements::kDecVideo; if (factory_type & GST_ELEMENT_FACTORY_TYPE_HARDWARE) { - std::list properties {{ ResourceCategory::kVideoDecoder, *track }}; + std::list properties {{ ResourceCategory::kVideoDecoder, *track, rsc_alloc_policy_ }, }; if (!resource_manager_->Acquire(properties)) { TRACKRENDERER_ERROR("Failed to acquire video hw decoder resource"); return false; @@ -939,7 +939,7 @@ bool TrackRenderer::CreateVideoSink_(const Track* track) { const char* videosink_name = kFakeSinkName; if (internal::IsDisplayNeeded(display_type)) { videosink_name = kVideoSinkName; - std::list properties {{ ResourceCategory::kVideoRenderer, {} }}; + std::list properties {{ ResourceCategory::kVideoRenderer, {}, rsc_alloc_policy_ }}; if (!resource_manager_->Acquire(properties)) { TRACKRENDERER_ERROR("Failed to acquire video hw renderer resource"); return false; diff --git a/src/trackrenderer_capi.cpp b/src/trackrenderer_capi.cpp index e530a16..9679984 100644 --- a/src/trackrenderer_capi.cpp +++ b/src/trackrenderer_capi.cpp @@ -1519,7 +1519,18 @@ int trackrenderer_set_advanced_picture_quality_type( int trackrenderer_set_resource_allocate_policy( TrackRendererHandle handle, TrackRendererRscAllocPolicy policy) { - TRACKRENDERER_WARN("Not supported on Public"); + auto priv = static_cast(handle); + if (!priv) return kFailed; + + if (policy == kTrackRendererRscAllocInAppMultiview + || policy == kTrackRendererRscAllocExclusiveMfcForced) { + TRACKRENDERER_WARN("Not supported policy (%d) on Public", policy); + return kSuccess; + } + + priv->renderer->SetResourceAllocatePolicy( + plusplayer::trackrenderer::capi_utils::ConvertToRscAllocPolicy(policy)); + return kSuccess; } diff --git a/src/trackrenderer_capi_utils.cpp b/src/trackrenderer_capi_utils.cpp index fdd3b94..acbb1fe 100644 --- a/src/trackrenderer_capi_utils.cpp +++ b/src/trackrenderer_capi_utils.cpp @@ -796,6 +796,23 @@ TrackRendererGetDecodedVideoFrameState ConverToGetDecodedVideoFrameState( } } +RscAllocPolicy ConvertToRscAllocPolicy( + const TrackRendererRscAllocPolicy& policy) { + switch (policy) { + case kTrackRendererRscAllocExclusive: + return RscAllocPolicy::kRscAllocExclusive; + case kTrackRendererRscAllocConditional: + return RscAllocPolicy::kRscAllocConditional; + case kTrackRendererRscAllocInAppMultiview: + return RscAllocPolicy::kRscAllocInAppMultiview; + case kTrackRendererRscAllocExclusiveMfcForced: + return RscAllocPolicy::kRscAllocExclusiveMfcForced; + default: + TRACKRENDERER_ERROR("unknown policy"); + return RscAllocPolicy::kRscAllocExclusive; + } +} + } // namespace capi_utils } // namespace trackrenderer