1 
2 /**
3   * @file     	IHaasVideoCodec.h
4   * @author   	HaasAI Group
5   * @version	V1.0.0
6   * @date    	2021-01-10
7   * @license  	GNU General Public License (GPL)
8   * @brief
9   * @attention
10   *  This file is part of HaasAI.                                \n
11   *  This program is free software; you can redistribute it and/or modify 		\n
12   *  it under the terms of the GNU General Public License version 3 as 		    \n
13   *  published by the Free Software Foundation.                               	\n
14   *  You should have received a copy of the GNU General Public License   		\n
15   *  along with HaasAI. If not, see <http://www.gnu.org/licenses/>.       			\n
16   *  Unless required by applicable law or agreed to in writing, software       	\n
17   *  distributed under the License is distributed on an "AS IS" BASIS,         	\n
18   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  	\n
19   *  See the License for the specific language governing permissions and     	\n
20   *  limitations under the License.   											\n
21   *   																			\n
22   * @htmlonly
23   * <span style="font-weight: bold">History</span>
24   * @endhtmlonly
25   * Version|Author|Date|Describe
26   * ------|----|------|--------
27   * V1.0|HaasAI Group|2021-01-10|Create File
28   * <h2><center>&copy;COPYRIGHT 2021 WELLCASA All Rights Reserved.</center></h2>
29   */
30 #ifndef IHAAS_VIDEO_CODEC_H
31 #define IHAAS_VIDEO_CODEC_H
32 
33 #include "base/modules/core/include/HaasErrno.h"
34 #include "base/include/base/HaasCommonVideo.h"
35 #include "base/include/base/HaasCommonImage.h"
36 #include "base/include/base/HaasVideoCodecDef.h"
37 
38 /**
39 * @brief Video Codec Control Class
40 * @author HaasAI Group
41 */
42 class IHaasVideoCodec
43 {
44 public:
~IHaasVideoCodec()45 	virtual ~IHaasVideoCodec(){}
46 
47 	/**
48 		* @brief		Open the video codec module
49 		* @note
50 		* @return
51 		*	 0 successfully \n
52 		*	-1 failed \n
53 		* @par Sample
54 		* @code
55 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
56 		*	mHaasVideoCodec = HaasVideoCodecInstance();
57 		*	res_ res = 0;
58 		*   res = mHaasVideoCodec->Open();
59 		* @endcode
60 		*/
61 	virtual int Open() = 0;
62 	/**
63 		* @brief		Close the video codec module
64 		* @note
65 		* @return
66 		*	 0 successfully \n
67 		*	-1 failed \n
68 		* @par Sample
69 		* @code
70 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
71 		*	mHaasVideoCodec = HaasVideoCodecInstance();
72 		*	res_ res = 0;
73 		*   res = mHaasVideoCodec->Close();
74 		* @endcode
75 		*/
76 	virtual int Close() = 0;
77 
78 	/**
79 		* @brief		set Video decoder config information
80 		* @param[in]    config: obtain video decoder information
81 		* @note
82 		* @return
83 		*	 0 successfully \n
84 		*	-1 failed \n
85 		* @par Sample
86 		* @code
87 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
88 		*	mHaasVideoCodec = HaasVideoCodecInstance();
89         *	DecodeConfig_t *config = xx;
90 		*	res_ res = 0;
91 		*   res = mHaasVideoCodec->DecodeConfig(config);
92 		* @endcode
93 		*/
94 	virtual int DecodeConfig(DecodeConfig_t* config) = 0;
95 	/**
96 		* @brief		start video codec
97 		* @note
98 		* @return
99 		*	 0 successfully \n
100 		*	-1 failed \n
101 		* @par Sample
102 		* @code
103 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
104 		*	mHaasVideoCodec = HaasVideoCodecInstance();
105 		*	res_ res = 0;
106 		*   res = mHaasVideoCodec->StartDecode();
107 		* @endcode
108 		*/
109 	virtual int StartDecode() = 0;
110 	/**
111 		* @brief		stop video codec
112 		* @note
113 		* @return
114 		*	 0 successfully \n
115 		*	-1 failed \n
116 		* @par Sample
117 		* @code
118 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
119 		*	mHaasVideoCodec = HaasVideoCodecInstance();
120 		*	res_ res = 0;
121 		*   res = mHaasVideoCodec->StopDecode();
122 		* @endcode
123 		*/
124 	virtual int StopDecode() = 0;
125 	/**
126 		* @brief		get video decode Image Data
127 		* @param[in]    data:obtain Video Image info
128 		* @note
129 		* @return
130 		*	 0 successfully \n
131 		*	-1 failed \n
132 		* @par Sample
133 		* @code
134 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
135 		*	mHaasVideoCodec = HaasVideoCodecInstance();
136         *	ImageBuffer_t * image = NULL;
137 		*	res_ res = 0;
138 		*   res = mHaasVideoCodec->GetDecodeImageData(&image);
139 		* @endcode
140 		*/
141 	virtual int GetDecodeImageData(void *pkt, ImageBuffer_t** image) = 0;
142 
143 	/**
144 		* @brief		set Video encode config information
145 		* @param[in]    config: obtain video encode information
146 		* @note
147 		* @return
148 		*	 0 successfully \n
149 		*	-1 failed \n
150 		* @par Sample
151 		* @code
152 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
153 		*	mHaasVideoCodec = HaasVideoCodecInstance();
154         *	EncodeConfig_t *config = xx;
155 		*	res_ res = 0;
156 		*   res = mHaasVideoCodec->EncodeConfig(config);
157 		* @endcode
158 		*/
159 	virtual int EncodeConfig(EncodeConfig_t* config) = 0;
160 	/**
161 		* @brief		star video encode
162 		* @note
163 		* @return
164 		*	 0 successfully \n
165 		*	-1 failed \n
166 		* @par Sample
167 		* @code
168 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
169 		*	mHaasVideoCodec = HaasVideoCodecInstance();
170 		*	res_ res = 0;
171 		*   res = mHaasVideoCodec->StartEncode();
172 		* @endcode
173 		*/
174 	virtual int StartEncode() = 0;
175 	/**
176 		* @brief		stop video encode
177 		* @note
178 		* @return
179 		*	 0 successfully \n
180 		*	-1 failed \n
181 		* @par Sample
182 		* @code
183 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
184 		*	mHaasVideoCodec = HaasVideoCodecInstance();
185 		*	res_ res = 0;
186 		*   res = mHaasVideoCodec->StopEncode();
187 		* @endcode
188 		*/
189 	virtual int StopEncode() = 0;
190 	/**
191 		* @brief		get video encoder Data
192 		* @param[in]    data:obtain Video Packet info
193 		* @note
194 		* @return
195 		*	 0 successfully \n
196 		*	-1 failed \n
197 		* @par Sample
198 		* @code
199 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
200 		*	mHaasVideoCodec = HaasVideoCodecInstance();
201         *	VideoPacket_t data;
202 		*	res_ res = 0;
203 		*   res = mHaasVideoCodec->GetEncodePacketData(&data);
204 		* @endcode
205 		*/
206 	virtual int GetEncodePacketData(VideoPacket_t **data) = 0;
207 };
208 
209 extern "C" {
210 	/**
211 		* @brief		Get HaasVideoCodec Instance
212 		* @param[in]    type:VideoCodecType_t
213 		* @note	        NULL
214 		* @return
215 		*	 !0  successfully \n
216 		*	NULL failed \n
217 		* @par Sample
218 		* @code
219 		*	IHaasVideoCodec * mHaasVideoCodec = NULL;
220 		*	mHaasVideoCodec = IHaasVideoCodecInstance(type);
221 		* @endcode
222 		*/
223 IHaasVideoCodec* IHaasVideoCodecInstance(VideoCodecType_t type);
224 }
225 #endif
226