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