1 /*
2 * Copyright (c) 2024-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 #include "mpeg_manager_factory.h"
17
18 #include "dp_log.h"
19
20 namespace OHOS {
21 namespace CameraStandard {
22 namespace DeferredProcessing {
MpegManagerFactory()23 MpegManagerFactory::MpegManagerFactory()
24 {
25 DP_DEBUG_LOG("entered.");
26 }
27
~MpegManagerFactory()28 MpegManagerFactory::~MpegManagerFactory()
29 {
30 DP_DEBUG_LOG("entered.");
31 }
32
Acquire(const std::string & requestId,const sptr<IPCFileDescriptor> & inputFd)33 std::shared_ptr<MpegManager> MpegManagerFactory::Acquire(const std::string& requestId,
34 const sptr<IPCFileDescriptor>& inputFd)
35 {
36 std::lock_guard<std::mutex> lock(mutex_);
37 if (mpegManager_ != nullptr) {
38 if (requestId == requestId_) {
39 refCount_++;
40 return mpegManager_;
41 }
42 DP_DEBUG_LOG("requestId changed, reinitializing MpegManager.");
43 mpegManager_.reset();
44 }
45 DP_CHECK_ERROR_RETURN_RET_LOG(inputFd == nullptr, nullptr, "inputFd is nullptr.");
46
47 mpegManager_ = std::make_shared<MpegManager>();
48 if (mpegManager_->Init(requestId, inputFd) != OK) {
49 DP_ERR_LOG("Failed to initialize MpegManager.");
50 mpegManager_.reset();
51 return nullptr;
52 }
53
54 DP_DEBUG_LOG("Initialized MpegManager success.");
55 requestId_ = requestId;
56 refCount_ = 1;
57 return mpegManager_;
58 }
59
Release(std::shared_ptr<MpegManager> & mpegManager)60 void MpegManagerFactory::Release(std::shared_ptr<MpegManager>& mpegManager)
61 {
62 std::lock_guard<std::mutex> lock(mutex_);
63 DP_CHECK_ERROR_RETURN_LOG(mpegManager == nullptr, "MpegManager is nullptr, release failed.");
64 DP_CHECK_ERROR_RETURN_LOG(mpegManager != mpegManager_, "MpegManager does not match, release failed.");
65
66 if (--refCount_ == 0) {
67 DP_DEBUG_LOG("Destroying mpegManager.");
68 if (mpegManager_ != nullptr) {
69 mpegManager_->UnInit(MediaResult::FAIL);
70 }
71 mpegManager_.reset();
72 }
73 }
74 } // namespace DeferredProcessing
75 } // namespace CameraStandard
76 } // namespace OHOS