xref: /aosp_15_r20/external/v4l2_codec2/components/VideoFrame.cpp (revision 0ec5a0ec62797f775085659156625e7f1bdb369f)
1*0ec5a0ecSAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors. All rights reserved.
2*0ec5a0ecSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*0ec5a0ecSAndroid Build Coastguard Worker // found in the LICENSE file.
4*0ec5a0ecSAndroid Build Coastguard Worker 
5*0ec5a0ecSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
6*0ec5a0ecSAndroid Build Coastguard Worker #define LOG_TAG "VideoFrame"
7*0ec5a0ecSAndroid Build Coastguard Worker 
8*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/components/VideoFrame.h>
9*0ec5a0ecSAndroid Build Coastguard Worker 
10*0ec5a0ecSAndroid Build Coastguard Worker #include <C2AllocatorGralloc.h>
11*0ec5a0ecSAndroid Build Coastguard Worker #include <log/log.h>
12*0ec5a0ecSAndroid Build Coastguard Worker 
13*0ec5a0ecSAndroid Build Coastguard Worker namespace android {
14*0ec5a0ecSAndroid Build Coastguard Worker 
15*0ec5a0ecSAndroid Build Coastguard Worker // static
Create(std::shared_ptr<C2GraphicBlock> block)16*0ec5a0ecSAndroid Build Coastguard Worker std::unique_ptr<VideoFrame> VideoFrame::Create(std::shared_ptr<C2GraphicBlock> block) {
17*0ec5a0ecSAndroid Build Coastguard Worker     if (!block) return nullptr;
18*0ec5a0ecSAndroid Build Coastguard Worker 
19*0ec5a0ecSAndroid Build Coastguard Worker     std::vector<int> fds;
20*0ec5a0ecSAndroid Build Coastguard Worker     const C2Handle* const handle = block->handle();
21*0ec5a0ecSAndroid Build Coastguard Worker     for (int i = 0; i < handle->numFds; i++) {
22*0ec5a0ecSAndroid Build Coastguard Worker         fds.emplace_back(handle->data[i]);
23*0ec5a0ecSAndroid Build Coastguard Worker     }
24*0ec5a0ecSAndroid Build Coastguard Worker 
25*0ec5a0ecSAndroid Build Coastguard Worker     return std::unique_ptr<VideoFrame>(new VideoFrame(std::move(block), std::move(fds)));
26*0ec5a0ecSAndroid Build Coastguard Worker }
27*0ec5a0ecSAndroid Build Coastguard Worker 
VideoFrame(std::shared_ptr<C2GraphicBlock> block,std::vector<int> fds)28*0ec5a0ecSAndroid Build Coastguard Worker VideoFrame::VideoFrame(std::shared_ptr<C2GraphicBlock> block, std::vector<int> fds)
29*0ec5a0ecSAndroid Build Coastguard Worker       : mGraphicBlock(std::move(block)), mFds(fds) {}
30*0ec5a0ecSAndroid Build Coastguard Worker 
31*0ec5a0ecSAndroid Build Coastguard Worker VideoFrame::~VideoFrame() = default;
32*0ec5a0ecSAndroid Build Coastguard Worker 
getFDs() const33*0ec5a0ecSAndroid Build Coastguard Worker const std::vector<int>& VideoFrame::getFDs() const {
34*0ec5a0ecSAndroid Build Coastguard Worker     return mFds;
35*0ec5a0ecSAndroid Build Coastguard Worker }
36*0ec5a0ecSAndroid Build Coastguard Worker 
setVisibleRect(const Rect & visibleRect)37*0ec5a0ecSAndroid Build Coastguard Worker void VideoFrame::setVisibleRect(const Rect& visibleRect) {
38*0ec5a0ecSAndroid Build Coastguard Worker     mVisibleRect = visibleRect;
39*0ec5a0ecSAndroid Build Coastguard Worker }
40*0ec5a0ecSAndroid Build Coastguard Worker 
getVisibleRect() const41*0ec5a0ecSAndroid Build Coastguard Worker const Rect& VideoFrame::getVisibleRect() const {
42*0ec5a0ecSAndroid Build Coastguard Worker     return mVisibleRect;
43*0ec5a0ecSAndroid Build Coastguard Worker }
44*0ec5a0ecSAndroid Build Coastguard Worker 
setBitstreamId(int32_t bitstreamId)45*0ec5a0ecSAndroid Build Coastguard Worker void VideoFrame::setBitstreamId(int32_t bitstreamId) {
46*0ec5a0ecSAndroid Build Coastguard Worker     mBitstreamId = bitstreamId;
47*0ec5a0ecSAndroid Build Coastguard Worker }
48*0ec5a0ecSAndroid Build Coastguard Worker 
getBitstreamId() const49*0ec5a0ecSAndroid Build Coastguard Worker int32_t VideoFrame::getBitstreamId() const {
50*0ec5a0ecSAndroid Build Coastguard Worker     return mBitstreamId;
51*0ec5a0ecSAndroid Build Coastguard Worker }
52*0ec5a0ecSAndroid Build Coastguard Worker 
getGraphicBlock()53*0ec5a0ecSAndroid Build Coastguard Worker C2ConstGraphicBlock VideoFrame::getGraphicBlock() {
54*0ec5a0ecSAndroid Build Coastguard Worker     return mGraphicBlock->share(C2Rect(mVisibleRect.width(), mVisibleRect.height()), C2Fence());
55*0ec5a0ecSAndroid Build Coastguard Worker }
56*0ec5a0ecSAndroid Build Coastguard Worker 
57*0ec5a0ecSAndroid Build Coastguard Worker }  // namespace android
58