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 "video_resize_filter.h"
17 #include "filter/filter_factory.h"
18 #include "common/media_core.h"
19
20 #ifdef USE_VIDEO_PROCESSING_ENGINE
21 #include "detail_enhancer_video.h"
22 #include "detail_enhancer_video_common.h"
23 #endif
24
25 namespace {
26 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_ONLY_PRERELEASE, LOG_DOMAIN_SYSTEM_PLAYER, "VideoResizeFilter" };
27 }
28
29 namespace OHOS {
30 namespace Media {
31 #ifdef USE_VIDEO_PROCESSING_ENGINE
32 using namespace VideoProcessingEngine;
33 constexpr int64_t VARIABLE_INCREMENT_INTERVAL = 1;
34 #endif
35 namespace Pipeline {
36
37 static AutoRegisterFilter<VideoResizeFilter> g_registerVideoResizeFilter("builtin.transcoder.videoresize",
38 FilterType::FILTERTYPE_VIDRESIZE,
__anon92da5a210202(const std::string& name, const FilterType type) 39 [](const std::string& name, const FilterType type) {
40 return std::make_shared<VideoResizeFilter>(name, FilterType::FILTERTYPE_VIDRESIZE);
41 });
42
43 class VideoResizeFilterLinkCallback : public FilterLinkCallback {
44 public:
VideoResizeFilterLinkCallback(std::shared_ptr<VideoResizeFilter> videoResizeFilter)45 explicit VideoResizeFilterLinkCallback(std::shared_ptr<VideoResizeFilter> videoResizeFilter)
46 : videoResizeFilter_(std::move(videoResizeFilter))
47 {
48 }
49
50 ~VideoResizeFilterLinkCallback() = default;
51
OnLinkedResult(const sptr<AVBufferQueueProducer> & queue,std::shared_ptr<Meta> & meta)52 void OnLinkedResult(const sptr<AVBufferQueueProducer> &queue, std::shared_ptr<Meta> &meta) override
53 {
54 if (auto resizeFilter = videoResizeFilter_.lock()) {
55 resizeFilter->OnLinkedResult(queue, meta);
56 } else {
57 MEDIA_LOG_I("invalid resizeFilter");
58 }
59 }
60
OnUnlinkedResult(std::shared_ptr<Meta> & meta)61 void OnUnlinkedResult(std::shared_ptr<Meta> &meta) override
62 {
63 if (auto resizeFilter = videoResizeFilter_.lock()) {
64 resizeFilter->OnUnlinkedResult(meta);
65 } else {
66 MEDIA_LOG_I("invalid resizeFilter");
67 }
68 }
69
OnUpdatedResult(std::shared_ptr<Meta> & meta)70 void OnUpdatedResult(std::shared_ptr<Meta> &meta) override
71 {
72 if (auto resizeFilter = videoResizeFilter_.lock()) {
73 resizeFilter->OnUpdatedResult(meta);
74 } else {
75 MEDIA_LOG_I("invalid resizeFilter");
76 }
77 }
78 private:
79 std::weak_ptr<VideoResizeFilter> videoResizeFilter_;
80 };
81
82 #ifdef USE_VIDEO_PROCESSING_ENGINE
83 class ResizeDetailEnhancerVideoCallback : public DetailEnhancerVideoCallback {
84 public:
ResizeDetailEnhancerVideoCallback(std::shared_ptr<VideoResizeFilter> videoResizeFilter)85 explicit ResizeDetailEnhancerVideoCallback(std::shared_ptr<VideoResizeFilter> videoResizeFilter)
86 : videoResizeFilter_(std::move(videoResizeFilter))
87 {
88 }
89
OnError(VPEAlgoErrCode errorCode)90 void OnError(VPEAlgoErrCode errorCode) override
91 {
92 }
93
OnState(VPEAlgoState state)94 void OnState(VPEAlgoState state) override
95 {
96 }
97
OnOutputBufferAvailable(uint32_t index,DetailEnhBufferFlag flag)98 void OnOutputBufferAvailable(uint32_t index, DetailEnhBufferFlag flag) override
99 {
100 if (auto videoResizeFilter = videoResizeFilter_.lock()) {
101 videoResizeFilter->OnOutputBufferAvailable(index, static_cast<uint32_t>(flag));
102 if (flag == DETAIL_ENH_BUFFER_FLAG_EOS) {
103 videoResizeFilter->NotifyNextFilterEos();
104 }
105 } else {
106 MEDIA_LOG_I("invalid videoResizeFilter");
107 }
108 }
109 private:
110 std::weak_ptr<VideoResizeFilter> videoResizeFilter_;
111 };
112 #endif
113
VideoResizeFilter(std::string name,FilterType type)114 VideoResizeFilter::VideoResizeFilter(std::string name, FilterType type): Filter(name, type)
115 {
116 filterType_ = type;
117 MEDIA_LOG_I("video resize filter create");
118 }
119
~VideoResizeFilter()120 VideoResizeFilter::~VideoResizeFilter()
121 {
122 MEDIA_LOG_I("video resize filter destroy");
123 }
124
SetCodecFormat(const std::shared_ptr<Meta> & format)125 Status VideoResizeFilter::SetCodecFormat(const std::shared_ptr<Meta> &format)
126 {
127 MEDIA_LOG_I("SetCodecFormat");
128 return Status::OK;
129 }
130
Init(const std::shared_ptr<EventReceiver> & receiver,const std::shared_ptr<FilterCallback> & callback)131 void VideoResizeFilter::Init(const std::shared_ptr<EventReceiver> &receiver,
132 const std::shared_ptr<FilterCallback> &callback)
133 {
134 MEDIA_LOG_I("Init");
135 eventReceiver_ = receiver;
136 filterCallback_ = callback;
137 #ifdef USE_VIDEO_PROCESSING_ENGINE
138 videoEnhancer_ = DetailEnhancerVideo::Create();
139 if (videoEnhancer_ != nullptr) {
140 std::shared_ptr<DetailEnhancerVideoCallback> detailEnhancerVideoCallback =
141 std::make_shared<ResizeDetailEnhancerVideoCallback>(shared_from_this());
142 videoEnhancer_->RegisterCallback(detailEnhancerVideoCallback);
143 } else {
144 MEDIA_LOG_I("Init videoEnhancer fail");
145 if (eventReceiver_) {
146 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
147 }
148 return;
149 }
150 #else
151 MEDIA_LOG_E("Init videoEnhancer fail, no VPE module");
152 if (eventReceiver_) {
153 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
154 }
155 return;
156 #endif
157 if (!releaseBufferTask_) {
158 releaseBufferTask_ = std::make_shared<Task>("VideoResize");
159 releaseBufferTask_->RegisterJob([this] {
160 ReleaseBuffer();
161 return 0;
162 });
163 }
164 }
165
Configure(const std::shared_ptr<Meta> & parameter)166 Status VideoResizeFilter::Configure(const std::shared_ptr<Meta> ¶meter)
167 {
168 MEDIA_LOG_I("Configure");
169 configureParameter_ = parameter;
170 #ifdef USE_VIDEO_PROCESSING_ENGINE
171 if (videoEnhancer_ == nullptr) {
172 MEDIA_LOG_E("Configure videoEnhancer is null");
173 return Status::ERROR_NULL_POINTER;
174 }
175 const DetailEnhancerParameters parameter_ = {"", DetailEnhancerLevel::DETAIL_ENH_LEVEL_MEDIUM};
176 int32_t ret = videoEnhancer_->SetParameter(parameter_, SourceType::VIDEO);
177 if (ret != 0) {
178 MEDIA_LOG_E("videoEnhancer SetParameter fail");
179 if (eventReceiver_) {
180 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
181 }
182 return Status::ERROR_UNKNOWN;
183 } else {
184 return Status::OK;
185 }
186 #else
187 MEDIA_LOG_E("no VPE module");
188 if (eventReceiver_) {
189 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
190 }
191 return Status::ERROR_UNKNOWN;
192 #endif
193 }
194
GetInputSurface()195 sptr<Surface> VideoResizeFilter::GetInputSurface()
196 {
197 MEDIA_LOG_I("GetInputSurface");
198 #ifdef USE_VIDEO_PROCESSING_ENGINE
199 if (videoEnhancer_ == nullptr) {
200 MEDIA_LOG_E("Configure videoEnhancer is null");
201 return nullptr;
202 }
203 sptr<Surface> inputSurface = videoEnhancer_->GetInputSurface();
204 return inputSurface;
205 #else
206 MEDIA_LOG_E("no VPE module");
207 if (eventReceiver_) {
208 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
209 }
210 return nullptr;
211 #endif
212 }
213
SetOutputSurface(sptr<Surface> surface,int32_t width,int32_t height)214 Status VideoResizeFilter::SetOutputSurface(sptr<Surface> surface, int32_t width, int32_t height)
215 {
216 MEDIA_LOG_I("SetOutputSurface");
217 #ifdef USE_VIDEO_PROCESSING_ENGINE
218 if (surface == nullptr) {
219 MEDIA_LOG_E("SetOutputSurface surface is null");
220 return Status::ERROR_NULL_POINTER;
221 } else {
222 surface->SetRequestWidthAndHeight(width, height);
223 }
224 if (videoEnhancer_ == nullptr) {
225 MEDIA_LOG_E("Configure videoEnhancer is null");
226 return Status::ERROR_NULL_POINTER;
227 }
228 int32_t ret = videoEnhancer_->SetOutputSurface(surface);
229 if (ret != 0) {
230 MEDIA_LOG_E("videoEnhancer SetOutputSurface fail");
231 if (eventReceiver_) {
232 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
233 }
234 return Status::ERROR_UNKNOWN;
235 }
236 return Status::OK;
237 #else
238 MEDIA_LOG_E("no VPE module");
239 if (eventReceiver_) {
240 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
241 }
242 return Status::ERROR_UNKNOWN;
243 #endif
244 }
245
DoPrepare()246 Status VideoResizeFilter::DoPrepare()
247 {
248 MEDIA_LOG_I("Prepare");
249 if (filterCallback_ == nullptr) {
250 return Status::ERROR_UNKNOWN;
251 }
252 switch (filterType_) {
253 case FilterType::FILTERTYPE_VIDRESIZE:
254 filterCallback_->OnCallback(shared_from_this(), FilterCallBackCommand::NEXT_FILTER_NEEDED,
255 StreamType::STREAMTYPE_RAW_VIDEO);
256 break;
257 default:
258 break;
259 }
260 return Status::OK;
261 }
262
DoStart()263 Status VideoResizeFilter::DoStart()
264 {
265 MEDIA_LOG_I("Start");
266 isThreadExit_ = false;
267 if (releaseBufferTask_) {
268 releaseBufferTask_->Start();
269 }
270 #ifdef USE_VIDEO_PROCESSING_ENGINE
271 if (videoEnhancer_ == nullptr) {
272 MEDIA_LOG_E("DoStart videoEnhancer is null");
273 return Status::ERROR_NULL_POINTER;
274 }
275 int32_t ret = videoEnhancer_->Start();
276 if (ret != 0) {
277 MEDIA_LOG_E("videoEnhancer Start fail");
278 if (eventReceiver_) {
279 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
280 }
281 return Status::ERROR_UNKNOWN;
282 }
283 return Status::OK;
284 #else
285 MEDIA_LOG_E("no VPE module");
286 if (eventReceiver_) {
287 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
288 }
289 return Status::ERROR_UNKNOWN;
290 #endif
291 }
292
DoPause()293 Status VideoResizeFilter::DoPause()
294 {
295 MEDIA_LOG_I("Pause");
296 return Status::OK;
297 }
298
DoResume()299 Status VideoResizeFilter::DoResume()
300 {
301 MEDIA_LOG_I("Resume");
302 return Status::OK;
303 }
304
DoStop()305 Status VideoResizeFilter::DoStop()
306 {
307 MEDIA_LOG_I("Stop");
308 if (releaseBufferTask_) {
309 isThreadExit_ = true;
310 releaseBufferCondition_.notify_all();
311 releaseBufferTask_->Stop();
312 MEDIA_LOG_I("releaseBufferTask_ Stop");
313 }
314 #ifdef USE_VIDEO_PROCESSING_ENGINE
315 if (!videoEnhancer_) {
316 return Status::OK;
317 }
318 int32_t ret = videoEnhancer_->Stop();
319 if (ret != 0) {
320 MEDIA_LOG_E("videoEnhancer Stop fail");
321 if (eventReceiver_) {
322 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
323 }
324 return Status::ERROR_UNKNOWN;
325 }
326 return Status::OK;
327 #else
328 MEDIA_LOG_E("no VPE module");
329 if (eventReceiver_) {
330 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
331 }
332 return Status::ERROR_UNKNOWN;
333 #endif
334 }
335
DoFlush()336 Status VideoResizeFilter::DoFlush()
337 {
338 return Status::OK;
339 }
340
DoRelease()341 Status VideoResizeFilter::DoRelease()
342 {
343 return Status::OK;
344 }
345
NotifyNextFilterEos()346 Status VideoResizeFilter::NotifyNextFilterEos()
347 {
348 MEDIA_LOG_I("NotifyNextFilterEos");
349 for (auto iter : nextFiltersMap_) {
350 for (auto filter : iter.second) {
351 std::shared_ptr<Meta> eosMeta = std::make_shared<Meta>();
352 eosMeta->Set<Tag::MEDIA_END_OF_STREAM>(true);
353 eosMeta->Set<Tag::USER_FRAME_PTS>(eosPts_);
354 filter->SetParameter(eosMeta);
355 }
356 }
357 return Status::OK;
358 }
359
SetParameter(const std::shared_ptr<Meta> & parameter)360 void VideoResizeFilter::SetParameter(const std::shared_ptr<Meta> ¶meter)
361 {
362 MEDIA_LOG_I("SetParameter");
363 bool isEos = false;
364 if (parameter->Find(Tag::MEDIA_END_OF_STREAM) != parameter->end() &&
365 parameter->Get<Tag::MEDIA_END_OF_STREAM>(isEos) &&
366 parameter->Get<Tag::USER_FRAME_PTS>(eosPts_) &&
367 parameter->Get<Tag::USER_PUSH_DATA_TIME>(frameNum_)) {
368 if (isEos) {
369 #ifdef USE_VIDEO_PROCESSING_ENGINE
370 MEDIA_LOG_I("lastBuffer PTS: " PUBLIC_LOG_D64 " frameNum: " PUBLIC_LOG_D64,
371 eosPts_, frameNum_);
372 if (videoEnhancer_ == nullptr) {
373 MEDIA_LOG_E("videoEnhancer is null");
374 return;
375 }
376 if (currentFrameNum_.load() >= frameNum_) {
377 MEDIA_LOG_I("currentFrameNum: " PUBLIC_LOG_D64 " frameNum: " PUBLIC_LOG_D64,
378 currentFrameNum_.load(), frameNum_);
379 videoEnhancer_->NotifyEos();
380 }
381 #endif
382 return;
383 }
384 }
385
386 #ifdef USE_VIDEO_PROCESSING_ENGINE
387 if (videoEnhancer_ == nullptr) {
388 MEDIA_LOG_E("videoEnhancer is null");
389 return;
390 }
391 const DetailEnhancerParameters parameter_ = {"", DetailEnhancerLevel::DETAIL_ENH_LEVEL_MEDIUM};
392 int32_t ret = videoEnhancer_->SetParameter(parameter_, SourceType::VIDEO);
393 if (ret != 0) {
394 MEDIA_LOG_E("videoEnhancer SetParameter fail");
395 if (eventReceiver_) {
396 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR,
397 MSERR_UNSUPPORT_VID_PARAMS});
398 }
399 }
400 #else
401 MEDIA_LOG_E("no VPE module");
402 eventReceiver_->OnEvent({"video_resize_filter", EventType::EVENT_ERROR, MSERR_UNKNOWN});
403 #endif
404 }
405
GetParameter(std::shared_ptr<Meta> & parameter)406 void VideoResizeFilter::GetParameter(std::shared_ptr<Meta> ¶meter)
407 {
408 MEDIA_LOG_I("GetParameter");
409 }
410
LinkNext(const std::shared_ptr<Filter> & nextFilter,StreamType outType)411 Status VideoResizeFilter::LinkNext(const std::shared_ptr<Filter> &nextFilter, StreamType outType)
412 {
413 MEDIA_LOG_I("LinkNext");
414 nextFilter_ = nextFilter;
415 nextFiltersMap_[outType].push_back(nextFilter_);
416 std::shared_ptr<FilterLinkCallback> filterLinkCallback =
417 std::make_shared<VideoResizeFilterLinkCallback>(shared_from_this());
418 auto ret = nextFilter->OnLinked(outType, configureParameter_, filterLinkCallback);
419 if (ret != Status::OK && eventReceiver_) {
420 eventReceiver_->OnEvent({"VideoResizeFilter::LinkNext error", EventType::EVENT_ERROR, MSERR_UNKNOWN});
421 }
422 FALSE_RETURN_V_MSG_E(ret == Status::OK, ret, "OnLinked failed");
423 return Status::OK;
424 }
425
UpdateNext(const std::shared_ptr<Filter> & nextFilter,StreamType outType)426 Status VideoResizeFilter::UpdateNext(const std::shared_ptr<Filter> &nextFilter, StreamType outType)
427 {
428 MEDIA_LOG_I("UpdateNext");
429 return Status::OK;
430 }
431
UnLinkNext(const std::shared_ptr<Filter> & nextFilter,StreamType outType)432 Status VideoResizeFilter::UnLinkNext(const std::shared_ptr<Filter> &nextFilter, StreamType outType)
433 {
434 MEDIA_LOG_I("UnLinkNext");
435 return Status::OK;
436 }
437
GetFilterType()438 FilterType VideoResizeFilter::GetFilterType()
439 {
440 MEDIA_LOG_I("GetFilterType");
441 return filterType_;
442 }
443
OnLinked(StreamType inType,const std::shared_ptr<Meta> & meta,const std::shared_ptr<FilterLinkCallback> & callback)444 Status VideoResizeFilter::OnLinked(StreamType inType, const std::shared_ptr<Meta> &meta,
445 const std::shared_ptr<FilterLinkCallback> &callback)
446 {
447 MEDIA_LOG_I("OnLinked");
448 onLinkedResultCallback_ = callback;
449 return Status::OK;
450 }
451
OnUpdated(StreamType inType,const std::shared_ptr<Meta> & meta,const std::shared_ptr<FilterLinkCallback> & callback)452 Status VideoResizeFilter::OnUpdated(StreamType inType, const std::shared_ptr<Meta> &meta,
453 const std::shared_ptr<FilterLinkCallback> &callback)
454 {
455 MEDIA_LOG_I("OnUpdated");
456 return Status::OK;
457 }
458
OnUnLinked(StreamType inType,const std::shared_ptr<FilterLinkCallback> & callback)459 Status VideoResizeFilter::OnUnLinked(StreamType inType, const std::shared_ptr<FilterLinkCallback>& callback)
460 {
461 MEDIA_LOG_I("OnUnLinked");
462 return Status::OK;
463 }
464
OnLinkedResult(const sptr<AVBufferQueueProducer> & outputBufferQueue,std::shared_ptr<Meta> & meta)465 void VideoResizeFilter::OnLinkedResult(const sptr<AVBufferQueueProducer> &outputBufferQueue,
466 std::shared_ptr<Meta> &meta)
467 {
468 MEDIA_LOG_I("OnLinkedResult enter");
469 if (onLinkedResultCallback_) {
470 onLinkedResultCallback_->OnLinkedResult(nullptr, meta);
471 }
472 }
473
OnUpdatedResult(std::shared_ptr<Meta> & meta)474 void VideoResizeFilter::OnUpdatedResult(std::shared_ptr<Meta> &meta)
475 {
476 MEDIA_LOG_I("OnUpdatedResult");
477 (void) meta;
478 }
479
OnUnlinkedResult(std::shared_ptr<Meta> & meta)480 void VideoResizeFilter::OnUnlinkedResult(std::shared_ptr<Meta> &meta)
481 {
482 MEDIA_LOG_I("OnUnlinkedResult");
483 (void) meta;
484 }
485
OnOutputBufferAvailable(uint32_t index,uint32_t flag)486 void VideoResizeFilter::OnOutputBufferAvailable(uint32_t index, uint32_t flag)
487 {
488 MEDIA_LOG_D("OnOutputBufferAvailable enter. index: " PUBLIC_LOG_U32, index);
489 #ifdef USE_VIDEO_PROCESSING_ENGINE
490 {
491 std::lock_guard<std::mutex> lock(releaseBufferMutex_);
492 if (flag != static_cast<uint32_t>(DETAIL_ENH_BUFFER_FLAG_EOS)) {
493 currentFrameNum_.fetch_add(VARIABLE_INCREMENT_INTERVAL, std::memory_order_relaxed);
494 indexs_.push_back(index);
495 if (videoEnhancer_ && currentFrameNum_.load() >= frameNum_) {
496 MEDIA_LOG_I("currentFrameNum: " PUBLIC_LOG_D64 " frameNum: " PUBLIC_LOG_D64,
497 currentFrameNum_.load(), frameNum_);
498 videoEnhancer_->NotifyEos();
499 }
500 }
501 }
502 releaseBufferCondition_.notify_all();
503 #endif
504 }
505
ReleaseBuffer()506 void VideoResizeFilter::ReleaseBuffer()
507 {
508 MEDIA_LOG_I("ReleaseBuffer");
509 while (!isThreadExit_) {
510 std::vector<uint32_t> indexs;
511 {
512 std::unique_lock<std::mutex> lock(releaseBufferMutex_);
513 releaseBufferCondition_.wait(lock, [this] {
514 return isThreadExit_ || !indexs_.empty();
515 });
516 indexs = indexs_;
517 indexs_.clear();
518 }
519 #ifdef USE_VIDEO_PROCESSING_ENGINE
520 if (videoEnhancer_) {
521 for (auto &index : indexs) {
522 videoEnhancer_->ReleaseOutputBuffer(index, true);
523 }
524 }
525 #endif
526 }
527 }
528
SetFaultEvent(const std::string & errMsg,int32_t ret)529 void VideoResizeFilter::SetFaultEvent(const std::string &errMsg, int32_t ret)
530 {
531 MEDIA_LOG_I("SetFaultEvent");
532 }
533
SetFaultEvent(const std::string & errMsg)534 void VideoResizeFilter::SetFaultEvent(const std::string &errMsg)
535 {
536 MEDIA_LOG_I("SetFaultEvent");
537 }
538
SetCallingInfo(int32_t appUid,int32_t appPid,const std::string & bundleName,uint64_t instanceId)539 void VideoResizeFilter::SetCallingInfo(int32_t appUid, int32_t appPid,
540 const std::string &bundleName, uint64_t instanceId)
541 {
542 appUid_ = appUid;
543 appPid_ = appPid;
544 bundleName_ = bundleName;
545 instanceId_ = instanceId;
546 }
547 } // namespace Pipeline
548 } // namespace MEDIA
549 } // namespace OHOS