diff --git a/frameworks/native/capi/lppplayer/native_lpp_video_streamer.cpp b/frameworks/native/capi/lppplayer/native_lpp_video_streamer.cpp index 2147b242756b3cc91bff16d3c4ed925080bef40b..5ed1622b20f261f9f6e9ae4ba5cc6307ee846e05 100644 --- a/frameworks/native/capi/lppplayer/native_lpp_video_streamer.cpp +++ b/frameworks/native/capi/lppplayer/native_lpp_video_streamer.cpp @@ -634,6 +634,7 @@ OH_AVErrCode OH_LowPowerVideoSinkCallback_SetStreamChangedListener( int32_t res = callback->SetStreamChangedListener(onStreamChanged, userData); return LppMsErrToOHAvErr(res); } + OH_AVErrCode OH_LowPowerVideoSinkCallback_SetFirstFrameDecodedListener(OH_LowPowerVideoSinkCallback *callback, OH_LowPowerVideoSink_OnFirstFrameDecoded onFirstFrameDecoded, void *userData) { @@ -643,3 +644,14 @@ OH_AVErrCode OH_LowPowerVideoSinkCallback_SetFirstFrameDecodedListener(OH_LowPow int32_t res = callback->SetFirstFrameReadyListener(onFirstFrameDecoded, userData); return LppMsErrToOHAvErr(res); } + +OH_AVErrCode OH_LowPowerVideoSink_GetLatestPts(OH_LowPowerVideoSink *streamer, int64_t *pts) +{ + MEDIA_LOGD("OH_LowPowerVideoSink_GetLatestPts"); + CHECK_AND_RETURN_RET_LOG(streamer != nullptr, AV_ERR_INVALID_VAL, "streamer is nullptr!"); + LowPowerVideoSinkObject *streamerObj = reinterpret_cast(streamer); + CHECK_AND_RETURN_RET_LOG(streamerObj != nullptr, AV_ERR_INVALID_VAL, "streamerObj is nullptr"); + CHECK_AND_RETURN_RET_LOG(streamerObj->videoStreamer_ != nullptr, AV_ERR_INVALID_VAL, "videoStreamer_ is nullptr"); + int32_t res = streamerObj->videoStreamer_->GetLatestPts(*pts); + return LppMsErrToOHAvErr(res); +} diff --git a/frameworks/native/lpp_video_streamer/video_streamer_impl.cpp b/frameworks/native/lpp_video_streamer/video_streamer_impl.cpp index f7adadd72a932eb07fc7187d21a2cd65acb715e6..414b33325692759b2fb5b9605b72dc0fbaf1d9c3 100644 --- a/frameworks/native/lpp_video_streamer/video_streamer_impl.cpp +++ b/frameworks/native/lpp_video_streamer/video_streamer_impl.cpp @@ -262,5 +262,15 @@ std::string VideoStreamerImpl::GetStreamerId() CHECK_AND_RETURN_RET_LOG(streamerService_ != nullptr, "", "player service does not exist.."); return streamerService_->GetStreamerId(); } + +int32_t VideoStreamerImpl::GetLatestPts(int64_t &pts) +{ + MEDIA_LOGI("VideoStreamerImpl GetLatestPts"); + CHECK_AND_RETURN_RET_LOG(streamerService_ != nullptr, MSERR_SERVICE_DIED, + "GetLatestPts player service does not exist.."); + int32_t ret = streamerService_->GetLatestPts(pts); + pts = (ret == MSERR_OK) ? pts : 0; + return ret; +} } // namespace Media } // namespace OHOS diff --git a/frameworks/native/lpp_video_streamer/video_streamer_impl.h b/frameworks/native/lpp_video_streamer/video_streamer_impl.h index 16015c44266ca3002e4712da8985cfaa84408b5f..1a0b1e3e95ae55f8b88f51f480578ff9f8a599cd 100644 --- a/frameworks/native/lpp_video_streamer/video_streamer_impl.h +++ b/frameworks/native/lpp_video_streamer/video_streamer_impl.h @@ -76,6 +76,8 @@ public: std::string GetStreamerId() override; + int32_t GetLatestPts(int64_t &pts) override; + private: std::shared_ptr callback_; std::shared_ptr streamerService_ = nullptr; diff --git a/interfaces/inner_api/native/lpp_video_streamer.h b/interfaces/inner_api/native/lpp_video_streamer.h index d29cd78a0af5d0f8d9b75b916ae9a0f3c6b6a586..34de7d1548a2aab0ac8ee1a8e0e1f27f319dbd6b 100644 --- a/interfaces/inner_api/native/lpp_video_streamer.h +++ b/interfaces/inner_api/native/lpp_video_streamer.h @@ -103,6 +103,8 @@ public: virtual int32_t RenderFirstFrame() = 0; virtual std::string GetStreamerId() = 0; + + virtual int32_t GetLatestPts(int64_t &pts) = 0; }; class __attribute__((visibility("default"))) VideoStreamerFactory { diff --git a/interfaces/kits/c/lowpower_video_sink.h b/interfaces/kits/c/lowpower_video_sink.h index d1c11f7e32cd3594d5f094edd7cb19e1a71e6536..f74db98216756296b65fff1355c0c08f650ad276 100644 --- a/interfaces/kits/c/lowpower_video_sink.h +++ b/interfaces/kits/c/lowpower_video_sink.h @@ -314,6 +314,20 @@ OH_AVErrCode OH_LowPowerVideoSink_SetTargetStartFrame( const int64_t timeoutMs, void* userData); +/** + * @brief Get the latest presentation timestamp (PTS) from lowpower video sink. + * + * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance. + * @param {int64_t*} pts Pointer to store the latest PTS value (in microseconds). + * @return Returns AV_ERR_OK if the timestamp is obtained successfully; + * otherwise, returns a specific error code as defined in {@link OH_AVErrCode}: + * {@link AV_ERR_INVALID_VAL} the sink is nullptr, or sink is invalid. + * {@link AV_ERR_SERVICE_DIED} media service is died. + * {@link AV_ERR_OPERATE_NOT_PERMIT} operation not permitted. + * @since 21 + */ +OH_AVErrCode OH_LowPowerVideoSink_GetLatestPts(OH_LowPowerVideoSink *streamer, int64_t *pts); + /** * @brief Set playback speed for the lowpower video sink * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance diff --git a/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager.h b/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager.h index 229bbb0036604f3400a80bebf7182276e3deebc7..52029e9a6045f820271a895ee2ead5b326d3c3a6 100644 --- a/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager.h +++ b/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager.h @@ -50,6 +50,7 @@ public: int32_t SetTunnelId(uint64_t tunnelId) override; int32_t SetAudioIsLpp(bool isLpp) override; void SetEventReceiver(std::shared_ptr eventReceiver) override; + int32_t GetLatestPts(int64_t &pts) override; private: void ResetTimeAnchor(); diff --git a/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager_adapter.h b/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager_adapter.h index c602d662d59c714cf576a21fd26ad870e30a5baf..a78c947e64243e426374709841e8a3f5480970ae 100644 --- a/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager_adapter.h +++ b/services/engine/histreamer/lpp/lpp_sync_manager/lpp_sync_manager_adapter.h @@ -56,6 +56,8 @@ public: int32_t UnbindOutputBuffers(); int32_t GetShareBuffer(int32_t &fd); int32_t SetTunnelId(uint64_t tunnelId); + int32_t GetLatestPts(int64_t &pts); + void OnError(const int32_t errorCode, const std::string &errorMsg); void OnTargetArrived(const int64_t targetPts, const bool isTimeout); void OnRenderStarted(); diff --git a/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager.cpp b/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager.cpp index c6b7cdf8888f5fb431b6bd5b23ae96caee1626d6..3922866022d25e5b0eb388c117b69ccff710aa63 100644 --- a/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager.cpp +++ b/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager.cpp @@ -263,6 +263,16 @@ int32_t LppSyncManager::SetTunnelId(uint64_t tunnelId) return MSERR_OK; } +int32_t LppSyncManager::GetLatestPts(int64_t &pts) +{ + MEDIA_LOG_I("LppSyncManager::GetLatestPts"); + FALSE_RETURN_V_NOLOG(videoIsLpp_, MSERR_UNKNOWN); + FALSE_RETURN_V_MSG_E(adapter_ != nullptr, MSERR_INVALID_OPERATION, "adapter_ is nullptr"); + auto ret = adapter_->GetLatestPts(pts); + FALSE_RETURN_V_MSG_E(ret == MSERR_OK, ret, "adapter_ GetLatestPts failed"); + return MSERR_OK; +} + int32_t LppSyncManager::SetAudioIsLpp(bool isLpp) { audioIsLpp_ = isLpp; diff --git a/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager_adapter.cpp b/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager_adapter.cpp index 87b1d5615e4d1c71841657306680571e2d495620..dc5aa9195a37b7701b22bb10ebda8231f1ad2ca9 100644 --- a/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager_adapter.cpp +++ b/services/engine/histreamer/lpp/lpp_sync_manager/src/lpp_sync_manager_adapter.cpp @@ -321,6 +321,14 @@ int32_t LppSyncManagerAdapter::SetTunnelId(uint64_t tunnelId) return MSERR_OK; } +int32_t LppSyncManagerAdapter::GetLatestPts(int64_t &pts) +{ + MediaTrace trace("LppSyncManagerAdapter::GetLatestPts"); + MEDIA_LOG_I("GetLatestPts enter"); + FALSE_RETURN_V_MSG_E(syncMgrAdapter_ != nullptr, MSERR_INVALID_OPERATION, "syncMgrAdapter_ is nullptr"); + return syncMgrAdapter_->GetLatestPts(pts); +} + void LppSyncManagerAdapter::SetEventReceiver(std::shared_ptr eventReceiver) { eventReceiver_ = eventReceiver; diff --git a/services/engine/histreamer/lpp/lpp_video_streamer/hilpp_vstreamer_impl.h b/services/engine/histreamer/lpp/lpp_video_streamer/hilpp_vstreamer_impl.h index f39780d2148b6e8df81ee64fd92864bcc74f91e1..dd95907cc29062d4ca181acc452ce3cd33130f8b 100644 --- a/services/engine/histreamer/lpp/lpp_video_streamer/hilpp_vstreamer_impl.h +++ b/services/engine/histreamer/lpp/lpp_video_streamer/hilpp_vstreamer_impl.h @@ -55,6 +55,7 @@ public: std::string GetStreamerId() override; std::shared_ptr GetLppSyncManager() override; int32_t RenderFirstFrame() override; + int32_t GetLatestPts(int64_t &pts) override; void OnEvent(const Event &event); private: diff --git a/services/engine/histreamer/lpp/lpp_video_streamer/src/hilpp_vstreamer_impl.cpp b/services/engine/histreamer/lpp/lpp_video_streamer/src/hilpp_vstreamer_impl.cpp index 8b4e6c0e6f1e547f2b8bda87bb9143ce79adf8c7..4db33be9cf875cbfc5998b6ca3ee1aba977a77bb 100644 --- a/services/engine/histreamer/lpp/lpp_video_streamer/src/hilpp_vstreamer_impl.cpp +++ b/services/engine/histreamer/lpp/lpp_video_streamer/src/hilpp_vstreamer_impl.cpp @@ -130,6 +130,13 @@ int32_t HiLppVideoStreamerImpl::SetParameter(const Format ¶m) return MSERR_OK; } +int32_t HiLppVideoStreamerImpl::GetLatestPts(int64_t &pts) +{ + MEDIA_LOG_I("HiLppVideoStreamerImpl::GetLatestPts"); + FALSE_RETURN_V_MSG(vdec_ != nullptr, MSERR_INVALID_OPERATION, "vdec_ nullptr"); + return syncMgr_->GetLatestPts(pts); +} + int32_t HiLppVideoStreamerImpl::Configure(const Format ¶m) { FALSE_RETURN_V_MSG(vdec_ != nullptr, MSERR_INVALID_OPERATION, "vdec_ nullptr"); diff --git a/services/include/i_lpp_video_streamer_service.h b/services/include/i_lpp_video_streamer_service.h index ffdc2c52f69c87562f29623a2f0087b85bc96103..770d1470edab5c1f0501ee6a985b4fd02317d072 100644 --- a/services/include/i_lpp_video_streamer_service.h +++ b/services/include/i_lpp_video_streamer_service.h @@ -75,6 +75,8 @@ public: virtual std::string GetStreamerId() = 0; virtual int32_t RenderFirstFrame() = 0; + + virtual int32_t GetLatestPts(int64_t &pts) = 0; }; } // namespace Media } // namespace OHOS diff --git a/services/services/engine_intf/i_lpp_sync_manager.h b/services/services/engine_intf/i_lpp_sync_manager.h index 2edba8cee0707062f143a8cb3b0ee4ca5ce09a50..38f9bf540de9f8e826ba1eb889d26241152e3cd7 100644 --- a/services/services/engine_intf/i_lpp_sync_manager.h +++ b/services/services/engine_intf/i_lpp_sync_manager.h @@ -50,6 +50,7 @@ public: virtual int32_t SetTunnelId(uint64_t tunnelId) = 0; virtual int32_t SetAudioIsLpp(bool isLpp) = 0; virtual void SetEventReceiver(std::shared_ptr eventReceiver) = 0; + virtual int32_t GetLatestPts(int64_t &pts) = 0; }; } diff --git a/services/services/engine_intf/i_lpp_video_streamer.h b/services/services/engine_intf/i_lpp_video_streamer.h index 5072305118a46e708ac73aabba73ae7c3a94e499..c411b1c947f965af0ba838bf290855c2a87f6206 100644 --- a/services/services/engine_intf/i_lpp_video_streamer.h +++ b/services/services/engine_intf/i_lpp_video_streamer.h @@ -66,6 +66,7 @@ public: virtual std::string GetStreamerId() = 0; virtual std::shared_ptr GetLppSyncManager() = 0; virtual int32_t RenderFirstFrame() = 0; + virtual int32_t GetLatestPts(int64_t &pts) = 0; }; } // namespace Media } // namespace OHOS diff --git a/services/services/lpp_video_streamer/client/lpp_video_streamer_client.cpp b/services/services/lpp_video_streamer/client/lpp_video_streamer_client.cpp index 952fda07b11ecb1fcab0c725ebb48aa05352c20d..dae58d3535a8e752136fe9d884acfc819b1a6055 100644 --- a/services/services/lpp_video_streamer/client/lpp_video_streamer_client.cpp +++ b/services/services/lpp_video_streamer/client/lpp_video_streamer_client.cpp @@ -243,5 +243,15 @@ void LppVideoStreamerClient::MediaServerDied() "mediaserver is died, please create a new video sink instance again"); } } + +int32_t LppVideoStreamerClient::GetLatestPts(int64_t &pts) +{ + MEDIA_LOGI("LppVideoStreamerClient GetLatestPts"); + CHECK_AND_RETURN_RET_LOG(playerProxy_ != nullptr, MSERR_SERVICE_DIED, + "LppVideoStreamerClient GetLatestPts player service does not exist.."); + int32_t ret = playerProxy_->GetLatestPts(pts); + CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, ret, "LppVideoStreamerClient GetLatestPts failed."); + return MSERR_OK; +} } // namespace Media } // namespace OHOS \ No newline at end of file diff --git a/services/services/lpp_video_streamer/client/lpp_video_streamer_client.h b/services/services/lpp_video_streamer/client/lpp_video_streamer_client.h index 7b5a6885d251a7912bd9381ab46003c430a5e172..325f8e4a1b55643dfe81331267b0729ceb5fc90d 100644 --- a/services/services/lpp_video_streamer/client/lpp_video_streamer_client.h +++ b/services/services/lpp_video_streamer/client/lpp_video_streamer_client.h @@ -76,6 +76,8 @@ public: int32_t RenderFirstFrame() override; + int32_t GetLatestPts(int64_t &pts) override; + void MediaServerDied(); private: diff --git a/services/services/lpp_video_streamer/ipc/i_standard_lpp_video_streamer_service.h b/services/services/lpp_video_streamer/ipc/i_standard_lpp_video_streamer_service.h index 32982afbf7a54b571f463fdd2aff38c2c3b90c5f..c9928ef1dd61d91816b4084d84424d2d146227c0 100644 --- a/services/services/lpp_video_streamer/ipc/i_standard_lpp_video_streamer_service.h +++ b/services/services/lpp_video_streamer/ipc/i_standard_lpp_video_streamer_service.h @@ -80,6 +80,8 @@ public: virtual int32_t RenderFirstFrame() = 0; + virtual int32_t GetLatestPts(int64_t &pts) = 0; + /** * IPC code ID */ @@ -109,6 +111,7 @@ public: GET_STREAM_ID, SET_AUDIO_STREAMER_ID, RENDER_FIRST_FRAME, + GET_LATEST_PTS, MAX_IPC_ID, // all IPC codes should be added before MAX_IPC_ID }; diff --git a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.cpp b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.cpp index c4556605eb5215ae613e7a3074a4a3742342a015..898d65663ca345bfb11252e4216049e33160360b 100644 --- a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.cpp +++ b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.cpp @@ -429,5 +429,24 @@ int32_t LppVideoStreamerServiceProxy::RenderFirstFrame() return reply.ReadInt32(); } +int32_t LppVideoStreamerServiceProxy::GetLatestPts(int64_t &pts) +{ + MEDIA_LOGI("LppVideoStreamerServiceProxy GetLatestPts"); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + bool token = data.WriteInterfaceToken(LppVideoStreamerServiceProxy::GetDescriptor()); + CHECK_AND_RETURN_RET_LOG(token, MSERR_INVALID_OPERATION, "Failed to write descriptor!"); + + int32_t error = Remote()->SendRequest(GET_LATEST_PTS, data, reply, option); + CHECK_AND_RETURN_RET_LOG( + error == MSERR_OK, MSERR_INVALID_OPERATION, "GetLatestPts SendRequest failed, error: %{public}d", error); + int32_t ret = reply.ReadInt32(); + pts = reply.ReadInt64(); + CHECK_AND_RETURN_RET_LOG( + ret == MSERR_OK, MSERR_INVALID_OPERATION, "GetLatestPts failed, error: %{public}d", ret); + return ret; +} } // namespace Media } // namespace OHOS diff --git a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.h b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.h index efc84e5a74cdaa1bec5beb35bf0f961ec3b37796..3ba478a87d5cd9a2d25ab209a52bf545a374db91 100644 --- a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.h +++ b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_proxy.h @@ -74,6 +74,8 @@ public: std::string GetStreamerId() override; + int32_t GetLatestPts(int64_t &pts) override; + int32_t RenderFirstFrame() override; private: static inline BrokerDelegator delegator_; diff --git a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.cpp b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.cpp index a3c2b2974810bab4ec5e2e9ff30e1c97258a4af0..3c2caa459b1ba505802936e5e5e83ca9a38a44ef 100644 --- a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.cpp +++ b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.cpp @@ -82,6 +82,7 @@ int32_t LppVideoStreamerServiceStub::Init() void LppVideoStreamerServiceStub::SetPlayerFuncs() { FillPlayerFuncPart1(); + FillPlayerFuncPart2(); } void LppVideoStreamerServiceStub::FillPlayerFuncPart1() @@ -136,6 +137,12 @@ void LppVideoStreamerServiceStub::FillPlayerFuncPart1() [this](MessageParcel &data, MessageParcel &reply) { return RenderFirstFrame(data, reply); }}; } +void LppVideoStreamerServiceStub::FillPlayerFuncPart2() +{ + playerFuncs_[GET_LATEST_PTS] = {"Player::GetLatestPts", + [this](MessageParcel &data, MessageParcel &reply) { return GetLatestPts(data, reply); }}; +} + int LppVideoStreamerServiceStub::OnRemoteRequest( uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { @@ -532,5 +539,22 @@ int32_t LppVideoStreamerServiceStub::RenderFirstFrame(MessageParcel &data, Messa return MSERR_OK; } +int32_t LppVideoStreamerServiceStub::GetLatestPts(int64_t &pts) +{ + MEDIA_LOGI("LppVideoStreamerServiceStub::GetLatestPts"); + CHECK_AND_RETURN_RET_LOG(lppVideoPlayerServer_ != nullptr, MSERR_INVALID_OPERATION, "player server is nullptr"); + return lppVideoPlayerServer_->GetLatestPts(pts); +} + +int32_t LppVideoStreamerServiceStub::GetLatestPts(MessageParcel &data, MessageParcel &reply) +{ + (void)data; + int64_t pts = 0; + int32_t ret = GetLatestPts(pts); + MEDIA_LOGI("LppVideoStreamerServiceStub::GetLatestPts %{public}d %{public}ld", ret, pts); + reply.WriteInt32(ret); + reply.WriteInt64(pts); + return MSERR_OK; +} } // namespace Media } // namespace OHOS diff --git a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.h b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.h index eca9275646066a0163d901852c5e68df5ab11da7..e708a8e143d2fc1d7140fe8f031f033fc09ed8fa 100644 --- a/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.h +++ b/services/services/lpp_video_streamer/ipc/lpp_video_streamer_service_stub.h @@ -81,9 +81,12 @@ public: int32_t RenderFirstFrame() override; + int32_t GetLatestPts(int64_t &pts) override; + int32_t Init(); void SetPlayerFuncs(); void FillPlayerFuncPart1(); + void FillPlayerFuncPart2(); private: LppVideoStreamerServiceStub(); @@ -114,6 +117,7 @@ public: int32_t SetLppAudioStreamerId(MessageParcel &data, MessageParcel &reply); int32_t GetStreamerId(MessageParcel &data, MessageParcel &reply); int32_t RenderFirstFrame(MessageParcel &data, MessageParcel &reply); + int32_t GetLatestPts(MessageParcel &data, MessageParcel &reply); std::shared_ptr lppVideoPlayerServer_ = nullptr; std::map> playerFuncs_; diff --git a/services/services/lpp_video_streamer/server/lpp_video_streamer_server.cpp b/services/services/lpp_video_streamer/server/lpp_video_streamer_server.cpp index 34462bbe39d58979f1ea202caf75ac4a94fb43ab..0f7725305fd882f2d5c6063049bbd084b1900012 100644 --- a/services/services/lpp_video_streamer/server/lpp_video_streamer_server.cpp +++ b/services/services/lpp_video_streamer/server/lpp_video_streamer_server.cpp @@ -287,6 +287,15 @@ int32_t LppVideoStreamerServer::SetLppVideoStreamerCallback(const std::shared_pt return MSERR_OK; } +int32_t LppVideoStreamerServer::GetLatestPts(int64_t &pts) +{ + MEDIA_LOGI("LppVideoStreamerServer GetLatestPts"); + CHECK_AND_RETURN_RET_LOG(streamerEngine_ != nullptr, MSERR_INVALID_OPERATION, "streamerEngine_ is nullptr"); + auto ret = streamerEngine_->GetLatestPts(pts); + CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, ret, "GetLatestPts Failed!"); + return ret; +} + int32_t LppVideoStreamerServer::SetLppAudioStreamerId(const std::string audioStreamId) { MEDIA_LOGI("LppVideoStreamerServer SetLppAudioStreamerId"); diff --git a/services/services/lpp_video_streamer/server/lpp_video_streamer_server.h b/services/services/lpp_video_streamer/server/lpp_video_streamer_server.h index beec977287889e4a66edb71ac6b975e5756f3eb0..0fbf7b171f4a1b5c5905256363f0c231ee1967dd 100644 --- a/services/services/lpp_video_streamer/server/lpp_video_streamer_server.h +++ b/services/services/lpp_video_streamer/server/lpp_video_streamer_server.h @@ -94,6 +94,8 @@ public: int32_t RenderFirstFrame() override; + int32_t GetLatestPts(int64_t &pts) override; + void OnDataNeeded(const int32_t maxBufferSize, const int32_t maxFrameNum) override; bool OnAnchorUpdateNeeded(int64_t &anchorPts, int64_t &anchorClk) override; void OnError(const MediaServiceErrCode errCode, const std::string &errMsg) override; diff --git a/test/unittest/lpp_unit_test/engine/lpp_astream_impl_unit_test/mock/i_lpp_sync_manager.h b/test/unittest/lpp_unit_test/engine/lpp_astream_impl_unit_test/mock/i_lpp_sync_manager.h index 85e72ad2874b1b5339cf523dfe856cae0706e7b9..45f109f175a6fa7e494a32e8013c300f46622742 100644 --- a/test/unittest/lpp_unit_test/engine/lpp_astream_impl_unit_test/mock/i_lpp_sync_manager.h +++ b/test/unittest/lpp_unit_test/engine/lpp_astream_impl_unit_test/mock/i_lpp_sync_manager.h @@ -49,7 +49,8 @@ public: MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId)); MOCK_METHOD(int32_t, SetAudioIsLpp, (bool isLpp)); MOCK_METHOD(void, SetEventReceiver, (std::shared_ptr eventReceiver)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts)); }; } } -#endif \ No newline at end of file +#endif diff --git a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/hilpp_vstreamer_impl.h b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/hilpp_vstreamer_impl.h index 1b9af148f76e575e1bb99b44b8d5cc2622e591f8..10b508f8979b94af26fdc60e7265c5830ededcb0 100644 --- a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/hilpp_vstreamer_impl.h +++ b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/hilpp_vstreamer_impl.h @@ -52,6 +52,7 @@ public: std::string GetStreamerId() override; std::shared_ptr GetLppSyncManager() override; int32_t RenderFirstFrame() override; + int32_t GetLatestPts(int64_t &pts) override; void OnEvent(const Event &event); private: @@ -84,4 +85,4 @@ private: }; } // namespace Media } // namespace OHOS -#endif \ No newline at end of file +#endif diff --git a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager.h b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager.h index 5cb2d3df573b962f4bf932042d9a746f26e9dadd..2eead01876804711e2d6a444c0d987a9e5d9b625 100644 --- a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager.h +++ b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager.h @@ -53,7 +53,8 @@ public: MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId), (override)); MOCK_METHOD(int32_t, SetAudioIsLpp, (bool isLpp), (override)); MOCK_METHOD(void, SetEventReceiver, (std::shared_ptr eventReceiver), (override)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts), (override)); }; } // namespace Media } // namespace OHOS -#endif \ No newline at end of file +#endif diff --git a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager_adapter.h b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager_adapter.h index 2736d452873f401523f2339bd96c848fd28ff707..360d661518b14130b90ca7c340573d4bbc5cc542 100644 --- a/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager_adapter.h +++ b/test/unittest/lpp_unit_test/engine/lpp_video_stream_unit_test/mock/lpp_sync_manager_adapter.h @@ -51,6 +51,7 @@ public: MOCK_METHOD(int32_t, GetShareBuffer, (int32_t& fd)); MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId)); MOCK_METHOD(void, SetEventReceiver, (std::shared_ptr eventReceiver)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts)); }; class LowPowerPlayerFactory { @@ -72,4 +73,4 @@ public: }; } // namespace Media } // namespace OHOS -#endif // LPP_SYNC_MANAGER_ADAPTER_H \ No newline at end of file +#endif // LPP_SYNC_MANAGER_ADAPTER_H diff --git a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_adapter_unit_test/mock/v1_0/ilpp_sync_manager_adapter.h b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_adapter_unit_test/mock/v1_0/ilpp_sync_manager_adapter.h index 9224148f3ce055fb843c0688831d35447d05f6ff..6bb4fae054e48912adfe9cd15a5a89ee7f78c0b4 100644 --- a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_adapter_unit_test/mock/v1_0/ilpp_sync_manager_adapter.h +++ b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_adapter_unit_test/mock/v1_0/ilpp_sync_manager_adapter.h @@ -51,9 +51,10 @@ public: MOCK_METHOD(int32_t, UnbindOutputBuffers, ()); MOCK_METHOD(int32_t, GetShareBuffer, (int& fd)); MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts)); }; } // V1_0 } // LowPowerPlayer } // HDI } // OHOS -#endif // OHOS_HDI_LOW_POWER_PLAYER_V1_0_ILPPSYNCMANAGERADAPTER_H \ No newline at end of file +#endif // OHOS_HDI_LOW_POWER_PLAYER_V1_0_ILPPSYNCMANAGERADAPTER_H diff --git a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager.h b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager.h index 3f3755f5aa8956f71fb4c9850276d293b4d622b0..b7b4f83523391611d65a247a086f5176e737470a 100644 --- a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager.h +++ b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager.h @@ -49,7 +49,7 @@ public: int32_t SetTunnelId(uint64_t tunnelId); int32_t SetAudioIsLpp(bool isLpp); void SetEventReceiver(std::shared_ptr eventReceiver); - + int32_t GetLatestPts(int64_t &pts); private: void ResetTimeAnchor(); @@ -68,4 +68,4 @@ private: } // namespace Media } // namespace OHOS -#endif \ No newline at end of file +#endif diff --git a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager_adapter.h b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager_adapter.h index c9ea2f2e3f85cca63f206d1eb2334f1bb677d26a..aa01564c08b5dc6c08c543068b4720856a3d079f 100644 --- a/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager_adapter.h +++ b/test/unittest/lpp_unit_test/module/lpp_sync_mgr_unit_test/mock/lpp_sync_manager_adapter.h @@ -52,6 +52,7 @@ public: MOCK_METHOD(int32_t, GetShareBuffer, (int32_t& fd)); MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId)); MOCK_METHOD(void, SetEventReceiver, (std::shared_ptr eventReceiver)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts)); }; class LowPowerPlayerFactory { @@ -74,4 +75,4 @@ public: } // namespace Media } // namespace OHOS -#endif // LPP_SYNC_MANAGER_ADAPTER_H \ No newline at end of file +#endif // LPP_SYNC_MANAGER_ADAPTER_H diff --git a/test/unittest/lpp_unit_test/module/lpp_video_dec_adapter_unit_test/mock/lpp_sync_manager.h b/test/unittest/lpp_unit_test/module/lpp_video_dec_adapter_unit_test/mock/lpp_sync_manager.h index dbb510bf4057ee76b173a53934ae7245f5211e22..0b0d892dfa26600f1eb0988bcfc8180a55910d8e 100644 --- a/test/unittest/lpp_unit_test/module/lpp_video_dec_adapter_unit_test/mock/lpp_sync_manager.h +++ b/test/unittest/lpp_unit_test/module/lpp_video_dec_adapter_unit_test/mock/lpp_sync_manager.h @@ -52,7 +52,8 @@ public: MOCK_METHOD(int32_t, SetTunnelId, (uint64_t tunnelId), (override)); MOCK_METHOD(int32_t, SetAudioIsLpp, (bool isLpp), (override)); MOCK_METHOD(void, SetEventReceiver, (std::shared_ptr eventReceiver), (override)); + MOCK_METHOD(int32_t, GetLatestPts, (int64_t &pts), (override)); }; } // namespace Media } // namespace OHOS -#endif \ No newline at end of file +#endif