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