1 /* 2 * Copyright (c) 2020-2021 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 PLAYER_VIDEO_SINK_H 17 #define PLAYER_VIDEO_SINK_H 18 19 #include <memory> 20 #include <vector> 21 #include "player_sink_type.h" 22 #include "player_define.h" 23 #include "codec_type.h" 24 #include "player_sync.h" 25 #include <mutex> 26 #include "display_layer.h" 27 #include "decoder.h" 28 29 using namespace std; 30 31 namespace OHOS { 32 namespace Media { 33 class VideoSink { 34 public: 35 VideoSink(); 36 ~VideoSink(); 37 int32_t Init(SinkAttr &attr); 38 int32_t DeInit(void); 39 int32_t Start(void); 40 int32_t Stop(void); 41 int32_t Reset(void); 42 int32_t Pause(void); 43 int32_t Resume(void); 44 int32_t Flush(void); 45 int32_t SetSpeed(float speed); 46 int32_t GetSpeed(float &speed); 47 int32_t GetState(int32_t &state); 48 int32_t RenderFrame(PlayerBufferInfo &frame); 49 void SetRenderMode(RenderMode mode); 50 void SetSync(PlayerSync *sync); 51 int32_t SetParam(const char *key, dataType type, void* value); 52 int32_t GetParam(const char *key, dataType type, void* value); 53 int32_t RegisterCallBack(PlayEventCallback &callback); 54 void GetStatus(VideoSinkStatus &status); 55 void RenderEos(void); 56 int DequeReleaseFrame(PlayerBufferInfo &frame); 57 void GetRenderPosition(int64_t &position); 58 59 private: 60 void ResetRendStartTime(); 61 int GetRenderFrame(PlayerBufferInfo &renderFrame, PlayerBufferInfo &frame); 62 void ReleaseQueHeadFrame(void); 63 void ReleaseQueAllFrame(void); 64 void RenderRptEvent(EventCbType event); 65 int32_t WriteToVideoDevice(CodecBuffer &renderFrame); 66 void QueueRenderFrame(PlayerBufferInfo &frame, bool cacheQueue); 67 void CheckConfigVideoOutput(void); 68 void SetDefaultDisplayRegionInfo(void); 69 void UpdateDisplayRegionInfo(int32_t x, int32_t y, int32_t w, int32_t h); 70 void CreateAndConfigLayer(void); 71 72 SinkAttr attr_; 73 float speed_; 74 bool paused_; 75 bool started_; 76 PlayerSync *syncHdl_; 77 uint64_t renderFrameCnt_; 78 RenderMode renderMode_; 79 int64_t rendStartTime_; 80 int64_t lastRendPts_; 81 int64_t lastRendSysTimeMs_; 82 int32_t recievedEos_; 83 int64_t EosPts_; 84 bool pauseAfterPlay_; 85 bool firstVidRend_; 86 uint64_t lastRendCnt_; 87 int64_t vidRendStartTime_; 88 PlayEventCallback callBack_; 89 bool eosSended_; 90 std::mutex mutex_; 91 LayerFuncs *layerFuncs_; 92 std::vector<PlayerBufferInfo> frameCacheQue_; 93 std::vector<PlayerBufferInfo> frameReleaseQue_; 94 int32_t lastConfigRegionX_; 95 int32_t lastConfigRegionY_; 96 int32_t lastConfigRegionW_; 97 int32_t lastConfigRegionH_; 98 }; 99 } // namespace Media 100 } // namespace OHOS 101 102 #endif // PLAYER_SINK_H 103