1 /* 2 * Copyright (C) 2024 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 OH_VEF_CODEC_AUDIO_PCM_BUFFER_QUEUE_H 17 #define OH_VEF_CODEC_AUDIO_PCM_BUFFER_QUEUE_H 18 19 #include <queue> 20 #include <vector> 21 #include <mutex> 22 #include "ffrt.h" 23 #include "codec/common/codec_common.h" 24 25 namespace OHOS { 26 namespace Media { 27 28 class PcmBufferQueue { 29 public: 30 PcmBufferQueue(size_t capacity); 31 ~PcmBufferQueue() = default; 32 33 // 入队操作,如果队列满了,则阻塞等待 34 void Enqueue(const std::shared_ptr<PcmData>& data); 35 36 // 出队操作,如果队列空了,则阻塞等待 37 std::shared_ptr<PcmData> Dequeue(); 38 39 void CancelEnqueue(); 40 void CancelDequeue(); 41 42 private: 43 ffrt::mutex mutex_; 44 ffrt::condition_variable condEmpty_; 45 ffrt::condition_variable condFull_; 46 std::queue<std::shared_ptr<PcmData>> queue_; 47 size_t capacity_; 48 bool cancelEnqueueFlag_ { false }; 49 bool cancelDequeueFlag_ { false }; 50 }; 51 } // namespace Media 52 } // namespace OHOS 53 54 #endif