1 /*
2 * Copyright (c) 2025 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 "picture_assembler.h"
17
18 #include "camera_log.h"
19 #include "hstream_capture.h"
20 #include "photo_asset_auxiliary_consumer.h"
21
22 namespace OHOS {
23 namespace CameraStandard {
24
PictureAssembler(wptr<HStreamCapture> streamCapture)25 PictureAssembler::PictureAssembler(wptr<HStreamCapture> streamCapture)
26 : streamCapture_(streamCapture)
27 {
28 MEDIA_INFO_LOG("PictureAssembler new E");
29 }
30
~PictureAssembler()31 PictureAssembler::~PictureAssembler()
32 {
33 MEDIA_INFO_LOG("PictureAssembler ~ E");
34 }
35
RegisterAuxiliaryConsumers()36 void PictureAssembler::RegisterAuxiliaryConsumers()
37 {
38 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers E");
39 sptr<HStreamCapture> streamCapture = streamCapture_.promote();
40 CHECK_RETURN_ELOG(streamCapture == nullptr, "streamCapture is null");
41 SurfaceError ret;
42 std::string retStr = "";
43 if (streamCapture->gainmapSurface_ != nullptr) {
44 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers 1 surfaceId: %{public}" PRIu64,
45 streamCapture->gainmapSurface_->GetUniqueId());
46 streamCapture->gainmapListener_ = new (std::nothrow) AuxiliaryBufferConsumer(S_GAINMAP, streamCapture);
47 CHECK_RETURN_ELOG(streamCapture->gainmapListener_ == nullptr, "streamCapture->gainmapListener_ is null");
48 ret = streamCapture->gainmapSurface_->RegisterConsumerListener(
49 (sptr<IBufferConsumerListener> &)streamCapture->gainmapListener_);
50 retStr = ret != SURFACE_ERROR_OK ? retStr + "[gainmap]" : retStr;
51 }
52 if (streamCapture->deepSurface_ != nullptr) {
53 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers 2 surfaceId: %{public}" PRIu64,
54 streamCapture->deepSurface_->GetUniqueId());
55 streamCapture->deepListener_ = new (std::nothrow) AuxiliaryBufferConsumer(S_DEEP, streamCapture);
56 CHECK_RETURN_ELOG(streamCapture->deepListener_ == nullptr, "streamCapture->deepListener_ is null");
57 ret = streamCapture->deepSurface_->RegisterConsumerListener(
58 (sptr<IBufferConsumerListener> &)streamCapture->deepListener_);
59 retStr = ret != SURFACE_ERROR_OK ? retStr + "[deep]" : retStr;
60 }
61 if (streamCapture->exifSurface_ != nullptr) {
62 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers 3 surfaceId: %{public}" PRIu64,
63 streamCapture->exifSurface_->GetUniqueId());
64 streamCapture->exifListener_ = new (std::nothrow) AuxiliaryBufferConsumer(S_EXIF, streamCapture);
65 CHECK_RETURN_ELOG(streamCapture->exifListener_ == nullptr, "streamCapture->exifListener_ is null");
66 ret = streamCapture->exifSurface_->RegisterConsumerListener(
67 (sptr<IBufferConsumerListener> &)streamCapture->exifListener_);
68 retStr = ret != SURFACE_ERROR_OK ? retStr + "[exif]" : retStr;
69 }
70 if (streamCapture->debugSurface_ != nullptr) {
71 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers 4 surfaceId: %{public}" PRIu64,
72 streamCapture->debugSurface_->GetUniqueId());
73 streamCapture->debugListener_ = new (std::nothrow) AuxiliaryBufferConsumer(S_DEBUG, streamCapture);
74 CHECK_RETURN_ELOG(streamCapture->debugListener_ == nullptr, "streamCapture->debugListener_ is null");
75 ret = streamCapture->debugSurface_->RegisterConsumerListener(
76 (sptr<IBufferConsumerListener> &)streamCapture->debugListener_);
77 retStr = ret != SURFACE_ERROR_OK ? retStr + "[debug]" : retStr;
78 }
79 if (retStr != "") {
80 MEDIA_ERR_LOG("register surface consumer listener failed! type = %{public}s", retStr.c_str());
81 }
82 MEDIA_INFO_LOG("RegisterAuxiliaryConsumers X");
83 }
84 } // namespace CameraStandard
85 } // namespace OHOS
86