xref: /aosp_15_r20/frameworks/av/media/codec2/sfplugin/InputSurfaceWrapper.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright 2018, The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #ifndef INPUT_SURFACE_WRAPPER_H_
18*ec779b8eSAndroid Build Coastguard Worker #define INPUT_SURFACE_WRAPPER_H_
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <codec2/hidl/client.h>
21*ec779b8eSAndroid Build Coastguard Worker #include <system/graphics.h>
22*ec779b8eSAndroid Build Coastguard Worker 
23*ec779b8eSAndroid Build Coastguard Worker namespace android {
24*ec779b8eSAndroid Build Coastguard Worker 
25*ec779b8eSAndroid Build Coastguard Worker /**
26*ec779b8eSAndroid Build Coastguard Worker  * Wrapper interface around InputSurface.
27*ec779b8eSAndroid Build Coastguard Worker  */
28*ec779b8eSAndroid Build Coastguard Worker class InputSurfaceWrapper {
29*ec779b8eSAndroid Build Coastguard Worker public:
InputSurfaceWrapper()30*ec779b8eSAndroid Build Coastguard Worker     InputSurfaceWrapper()
31*ec779b8eSAndroid Build Coastguard Worker         : mDataSpace(HAL_DATASPACE_UNKNOWN),
32*ec779b8eSAndroid Build Coastguard Worker           mPixelFormat(PIXEL_FORMAT_UNKNOWN) {
33*ec779b8eSAndroid Build Coastguard Worker     }
34*ec779b8eSAndroid Build Coastguard Worker 
35*ec779b8eSAndroid Build Coastguard Worker     virtual ~InputSurfaceWrapper() = default;
36*ec779b8eSAndroid Build Coastguard Worker 
37*ec779b8eSAndroid Build Coastguard Worker     /**
38*ec779b8eSAndroid Build Coastguard Worker      * Connect the surface with |comp|. A surface can
39*ec779b8eSAndroid Build Coastguard Worker      * connect to at most one component at a time.
40*ec779b8eSAndroid Build Coastguard Worker      *
41*ec779b8eSAndroid Build Coastguard Worker      * \return OK               successfully connected to |comp|
42*ec779b8eSAndroid Build Coastguard Worker      * \return ALREADY_EXISTS   already connected to another component.
43*ec779b8eSAndroid Build Coastguard Worker      */
44*ec779b8eSAndroid Build Coastguard Worker     virtual status_t connect(
45*ec779b8eSAndroid Build Coastguard Worker             const std::shared_ptr<Codec2Client::Component> &comp) = 0;
46*ec779b8eSAndroid Build Coastguard Worker 
47*ec779b8eSAndroid Build Coastguard Worker     /**
48*ec779b8eSAndroid Build Coastguard Worker      * Disconnect the surface from the component if any.
49*ec779b8eSAndroid Build Coastguard Worker      */
50*ec779b8eSAndroid Build Coastguard Worker     virtual void disconnect() = 0;
51*ec779b8eSAndroid Build Coastguard Worker 
52*ec779b8eSAndroid Build Coastguard Worker     /**
53*ec779b8eSAndroid Build Coastguard Worker      * Start pushing buffers to the surface.
54*ec779b8eSAndroid Build Coastguard Worker      */
55*ec779b8eSAndroid Build Coastguard Worker     virtual status_t start() = 0;
56*ec779b8eSAndroid Build Coastguard Worker 
57*ec779b8eSAndroid Build Coastguard Worker     /**
58*ec779b8eSAndroid Build Coastguard Worker      * Ref: GraphicBufferSource::signalEndOfInputStream.
59*ec779b8eSAndroid Build Coastguard Worker      */
60*ec779b8eSAndroid Build Coastguard Worker     virtual status_t signalEndOfInputStream() = 0;
61*ec779b8eSAndroid Build Coastguard Worker 
62*ec779b8eSAndroid Build Coastguard Worker     /// Input Surface configuration
63*ec779b8eSAndroid Build Coastguard Worker     struct Config {
64*ec779b8eSAndroid Build Coastguard Worker         // IN PARAMS (GBS)
65*ec779b8eSAndroid Build Coastguard Worker         float mMinFps = 0.0; // minimum fps (repeat frame to achieve this)
66*ec779b8eSAndroid Build Coastguard Worker         float mMaxFps = 0.0; // max fps (via frame drop)
67*ec779b8eSAndroid Build Coastguard Worker         float mCaptureFps = 0.0; // capture fps
68*ec779b8eSAndroid Build Coastguard Worker         float mCodedFps = 0.0;   // coded fps
69*ec779b8eSAndroid Build Coastguard Worker         bool mSuspended = false; // suspended
70*ec779b8eSAndroid Build Coastguard Worker         int64_t mTimeOffsetUs = 0; // time offset (input => codec)
71*ec779b8eSAndroid Build Coastguard Worker         int64_t mSuspendAtUs = 0; // suspend/resume time
72*ec779b8eSAndroid Build Coastguard Worker         int64_t mStartAtUs = 0; // start time
73*ec779b8eSAndroid Build Coastguard Worker         bool mStopped = false; // stopped
74*ec779b8eSAndroid Build Coastguard Worker         int64_t mStopAtUs = 0; // stop time
75*ec779b8eSAndroid Build Coastguard Worker 
76*ec779b8eSAndroid Build Coastguard Worker         // OUT PARAMS (GBS)
77*ec779b8eSAndroid Build Coastguard Worker         int64_t mInputDelayUs = 0; // delay between encoder input and surface input
78*ec779b8eSAndroid Build Coastguard Worker 
79*ec779b8eSAndroid Build Coastguard Worker         // IN PARAMS (CODEC WRAPPER)
80*ec779b8eSAndroid Build Coastguard Worker         float mFixedAdjustedFps = 0.0; // fixed fps via PTS manipulation
81*ec779b8eSAndroid Build Coastguard Worker         float mMinAdjustedFps = 0.0; // minimum fps via PTS manipulation
82*ec779b8eSAndroid Build Coastguard Worker         uint64_t mUsage = 0; // consumer usage
83*ec779b8eSAndroid Build Coastguard Worker         int mPriority = INT_MAX; // priority of queue thread (if any); INT_MAX for no-op
84*ec779b8eSAndroid Build Coastguard Worker     };
85*ec779b8eSAndroid Build Coastguard Worker 
86*ec779b8eSAndroid Build Coastguard Worker     /**
87*ec779b8eSAndroid Build Coastguard Worker      * Configures input surface.
88*ec779b8eSAndroid Build Coastguard Worker      *
89*ec779b8eSAndroid Build Coastguard Worker      * \param config configuration. This can be updated during this call to provide output
90*ec779b8eSAndroid Build Coastguard Worker      *               parameters, but not to provide configured parameters (to avoid continually
91*ec779b8eSAndroid Build Coastguard Worker      *               reconfiguring)
92*ec779b8eSAndroid Build Coastguard Worker      */
93*ec779b8eSAndroid Build Coastguard Worker     virtual status_t configure(Config &config) = 0;
94*ec779b8eSAndroid Build Coastguard Worker 
95*ec779b8eSAndroid Build Coastguard Worker     /**
96*ec779b8eSAndroid Build Coastguard Worker      * Configures desired data space.
97*ec779b8eSAndroid Build Coastguard Worker      *
98*ec779b8eSAndroid Build Coastguard Worker      * \param dataSpace desired data space
99*ec779b8eSAndroid Build Coastguard Worker      */
setDataSpace(android_dataspace dataSpace)100*ec779b8eSAndroid Build Coastguard Worker     inline void setDataSpace(android_dataspace dataSpace) {
101*ec779b8eSAndroid Build Coastguard Worker         mDataSpace = dataSpace;
102*ec779b8eSAndroid Build Coastguard Worker     }
103*ec779b8eSAndroid Build Coastguard Worker 
104*ec779b8eSAndroid Build Coastguard Worker     /**
105*ec779b8eSAndroid Build Coastguard Worker      * Notify that the input buffer reference is no longer needed.
106*ec779b8eSAndroid Build Coastguard Worker      * Clean up C2Work related references if necessary. No-op by default.
107*ec779b8eSAndroid Build Coastguard Worker      *
108*ec779b8eSAndroid Build Coastguard Worker      * \param index index of input work.
109*ec779b8eSAndroid Build Coastguard Worker      */
onInputBufferDone(c2_cntr64_t)110*ec779b8eSAndroid Build Coastguard Worker     virtual void onInputBufferDone(c2_cntr64_t /* index */) {}
111*ec779b8eSAndroid Build Coastguard Worker 
112*ec779b8eSAndroid Build Coastguard Worker     /**
113*ec779b8eSAndroid Build Coastguard Worker      * Signal one input buffer as emptied.
114*ec779b8eSAndroid Build Coastguard Worker      * No-op by default.
115*ec779b8eSAndroid Build Coastguard Worker      */
onInputBufferEmptied()116*ec779b8eSAndroid Build Coastguard Worker     virtual void onInputBufferEmptied() {}
117*ec779b8eSAndroid Build Coastguard Worker 
118*ec779b8eSAndroid Build Coastguard Worker     /**
119*ec779b8eSAndroid Build Coastguard Worker      * Returns dataspace information from GraphicBufferSource.
120*ec779b8eSAndroid Build Coastguard Worker      */
getDataspace()121*ec779b8eSAndroid Build Coastguard Worker     virtual android_dataspace getDataspace() { return mDataSpace; }
122*ec779b8eSAndroid Build Coastguard Worker 
123*ec779b8eSAndroid Build Coastguard Worker     /**
124*ec779b8eSAndroid Build Coastguard Worker      * Returns pixel format information from GraphicBufferSource.
125*ec779b8eSAndroid Build Coastguard Worker      */
getPixelFormat()126*ec779b8eSAndroid Build Coastguard Worker     virtual uint32_t getPixelFormat() { return mPixelFormat; }
127*ec779b8eSAndroid Build Coastguard Worker 
128*ec779b8eSAndroid Build Coastguard Worker protected:
129*ec779b8eSAndroid Build Coastguard Worker     android_dataspace mDataSpace;
130*ec779b8eSAndroid Build Coastguard Worker     uint32_t mPixelFormat;
131*ec779b8eSAndroid Build Coastguard Worker };
132*ec779b8eSAndroid Build Coastguard Worker 
133*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
134*ec779b8eSAndroid Build Coastguard Worker 
135*ec779b8eSAndroid Build Coastguard Worker #endif  // INPUT_SURFACE_WRAPPER_H_
136