• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
3  */
4 /*
5  * Copyright (C) 2023 Huawei Device Co., Ltd.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 
19 #include "sample_callback.h"
20 #include "av_codec_sample_log.h"
21 #include "lppCallback.h"
22 
23 namespace {
24 constexpr int LIMIT_LOGD_FREQUENCY = 50;
25 }
26 
27 #undef LOG_TAG
28 #define LOG_TAG "lppcallback"
29 
OnDataNeeded(OH_LowPowerAudioSink * decoder,OH_AVSamplesBuffer * framePacket,void * userData)30 void LppCallback::OnDataNeeded(OH_LowPowerAudioSink *decoder, OH_AVSamplesBuffer *framePacket, void *userData)
31 {
32     LppUserData *lppUserData = static_cast<LppUserData *>(userData);
33     std::unique_lock<std::mutex> lock(lppUserData->inputMutex);
34     lppUserData->framePacket_ = framePacket;
35     lppUserData->count++;
36     lppUserData->returnFrame = true;
37     lppUserData->inputCond.notify_all();
38     lock.unlock();
39 }
40 
OnPositionUpdated(OH_LowPowerAudioSink * decoder,int64_t currentPosition,void * userData)41 void LppCallback::OnPositionUpdated(OH_LowPowerAudioSink *decoder, int64_t currentPosition, void *userData)
42 {
43     LppUserData *lppUserData = static_cast<LppUserData *>(userData);
44     std::unique_lock<std::mutex> lock(lppUserData->inputMutex);
45     lppUserData->position = currentPosition;
46     lock.unlock();
47 }
48 
OnError(OH_LowPowerAudioSink * decoder,OH_AVErrCode errCode,const char * errorMsg,void * userData)49 void LppCallback::OnError(OH_LowPowerAudioSink *decoder, OH_AVErrCode errCode, const char *errorMsg,
50     void *userData)
51 {
52     AVCODEC_SAMPLE_LOGI("errCode %{public}d", errCode);
53 }
54 
OnInterrupted(OH_LowPowerAudioSink * decoder,OH_AudioInterrupt_ForceType type,OH_AudioInterrupt_Hint hint,void * userData)55 void LppCallback::OnInterrupted(OH_LowPowerAudioSink *decoder, OH_AudioInterrupt_ForceType type,
56     OH_AudioInterrupt_Hint hint, void *userData)
57 {
58     AVCODEC_SAMPLE_LOGI("type %{public}d", type);
59 }
60 
OnDeviceChanged(OH_LowPowerAudioSink * decoder,OH_AudioStream_DeviceChangeReason reason,void * userData)61 void LppCallback::OnDeviceChanged(OH_LowPowerAudioSink *decoder,
62     OH_AudioStream_DeviceChangeReason reason, void *userData)
63 {
64     AVCODEC_SAMPLE_LOGI("reason %{public}d", reason);
65 }
66 
OnEos(OH_LowPowerAudioSink * decoder,void * userData)67 void LppCallback::OnEos(OH_LowPowerAudioSink *decoder, void * userData)
68 {
69     AVCODEC_SAMPLE_LOGI("OH_LowPowerAudioSink OnEos ");
70 }
71 
OnDataNeededVideo(OH_LowPowerVideoSink * streamer,OH_AVSamplesBuffer * framePacket,void * userData)72 void LppCallback::OnDataNeededVideo(OH_LowPowerVideoSink *streamer, OH_AVSamplesBuffer *framePacket,
73     void *userData)
74 {
75     AVCODEC_SAMPLE_LOGI("OH_LowPowerVideoSink OnDataNeeded");
76     LppUserData *lppUserData = static_cast<LppUserData *>(userData);
77     std::unique_lock<std::mutex> lock(lppUserData->inputMutex);
78     lppUserData->framePacket_ = framePacket;
79     lppUserData->count++;
80     lppUserData->returnFrame = true;
81     lppUserData->inputCond.notify_all();
82 }
83 
OnAnchorUpdated(OH_LowPowerVideoSink * streamer,long * anchorPts,long * anchorClock,void * userData)84 void LppCallback::OnAnchorUpdated(OH_LowPowerVideoSink *streamer, long *anchorPts, long *anchorClock, void *userData)
85 {
86 }
87 
OnVideoError(OH_LowPowerVideoSink * streamer,OH_AVErrCode errCode,const char * errMsg,void * userData)88 void LppCallback::OnVideoError(OH_LowPowerVideoSink *streamer, OH_AVErrCode errCode, const char *errMsg, void *userData)
89 {
90     AVCODEC_SAMPLE_LOGI("OnVideoError errCode:%{public}d errorMsg:%{public}s", errCode, errMsg);
91 }
OnAudioError(OH_LowPowerAudioSink * streamer,OH_AVErrCode errCode,const char * errMsg,void * userData)92 void LppCallback::OnAudioError(OH_LowPowerAudioSink *streamer, OH_AVErrCode errCode, const char *errMsg, void *userData)
93 {
94     AVCODEC_SAMPLE_LOGI("OnAudioError errCode:%{public}d errorMsg:%{public}s", errCode, errMsg);
95 }
96 
OnTargetArrived(OH_LowPowerVideoSink * streamer,const int64_t targetPts,const bool isTimeout,void * userData)97 void LppCallback::OnTargetArrived(OH_LowPowerVideoSink *streamer, const int64_t targetPts, const bool isTimeout,
98     void *userData)
99 {
100     LppUserData *lppUserData = static_cast<LppUserData *>(userData);
101     std::unique_lock<std::mutex> lock(lppUserData->seekMutex_);
102     AVCODEC_SAMPLE_LOGI("OnTargetArrived accSeek");
103     if (isTimeout)
104     {
105         AVCODEC_SAMPLE_LOGI("OnTargetArrived timeout");
106     }
107     lppUserData->inputCond.notify_all();
108 }
109 
OH_LowPowerVideoSink_OnStreamChanged(OH_LowPowerVideoSink * streamer,OH_AVFormat * format,void * userData)110 void LppCallback::OH_LowPowerVideoSink_OnStreamChanged(OH_LowPowerVideoSink *streamer, OH_AVFormat *format, void *userData)
111 {
112     if (format == nullptr)
113     {
114         AVCODEC_SAMPLE_LOGI("OnOutputFormatChanged format nullptr");
115         return;
116     }
117     int32_t width = 0;
118     OH_AVFormat_GetIntValue(format, "video_picture_width", &width);
119     int32_t height = 0;
120     OH_AVFormat_GetIntValue(format, "video_picture_height", &height);
121     AVCODEC_SAMPLE_LOGI("OnOutputFormatChanged width= %{public}d height= %{public}d", width, height);
122 }
123 
OnRenderStarted(OH_LowPowerVideoSink * streamer,void * userData)124 void LppCallback::OnRenderStarted(OH_LowPowerVideoSink *streamer, void *userData)
125 {
126     AVCODEC_SAMPLE_LOGI("OH_LowPowerVideoSink OnRenderStarted ");
127 }
128 
OnEos(OH_LowPowerVideoSink * streamer,void * userData)129 void LppCallback::OnEos(OH_LowPowerVideoSink *streamer, void *userData)
130 {
131     AVCODEC_SAMPLE_LOGI("OH_LowPowerVideoSink OnEos ");
132 }
133 
OnFirstFrameDecoded(OH_LowPowerVideoSink * streamer,void * userData)134 void LppCallback::OnFirstFrameDecoded(OH_LowPowerVideoSink *streamer, void *userData)
135 {
136     AVCODEC_SAMPLE_LOGI("OH_LowPowerVideoSink OnFirstFrameDecoded ");
137 }
138 
139