1 /******************************************************************************
2  *
3  * Copyright (C) 2015 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 /*****************************************************************************/
21 /*                                                                           */
22 /*  File Name         : ih264e.h                                    */
23 /*                                                                           */
24 /*  Description       : This file contains all the necessary structure and   */
25 /*                      enumeration definitions needed for the Application   */
26 /*                      Program Interface(API) of the Ittiam MPEG4        */
27 /*                      Encoder on Cortex A8 - Neon platform                 */
28 /*                                                                           */
29 /*  List of Functions : ih264e_api_function                              */
30 /*                                                                           */
31 /*  Issues / Problems : None                                                 */
32 /*                                                                           */
33 /*  Revision History  :                                                      */
34 /*                                                                           */
35 /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
36 /*         26 08 2010   100239(RCY)     Draft                                */
37 /*                                                                           */
38 /*****************************************************************************/
39 
40 #ifndef _IH264E_H_
41 #define _IH264E_H_
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #include "iv2.h"
48 #include "ive2.h"
49 /*****************************************************************************/
50 /* Constant Macros                                                           */
51 /*****************************************************************************/
52 
53 
54 /*****************************************************************************/
55 /* API Function Prototype                                                    */
56 /*****************************************************************************/
57 IV_STATUS_T ih264e_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
58 
59 /*****************************************************************************/
60 /* Enums                                                                     */
61 /*****************************************************************************/
62 typedef enum
63 {
64     IH264E_CMD_CTL_SET_ME_INFO_ENABLE,
65 }IH264E_CMD_CTL_SUB_CMDS;
66 
67 
68 /*****************************************************************************/
69 /* Extended Structures                                                       */
70 /*****************************************************************************/
71 
72 /*****************************************************************************/
73 /*  Get Number of Memory Records                                             */
74 /*****************************************************************************/
75 
76 
77 typedef struct
78 {
79     iv_num_mem_rec_ip_t                    s_ive_ip;
80 }ih264e_num_mem_rec_ip_t;
81 
82 
83 typedef struct
84 {
85     iv_num_mem_rec_op_t                    s_ive_op;
86 }ih264e_num_mem_rec_op_t;
87 
88 
89 /*****************************************************************************/
90 /*  Fill Memory Records                                                      */
91 /*****************************************************************************/
92 
93 
94 typedef struct
95 {
96     iv_fill_mem_rec_ip_t                   s_ive_ip;
97 }ih264e_fill_mem_rec_ip_t;
98 
99 
100 typedef struct
101 {
102     iv_fill_mem_rec_op_t                   s_ive_op;
103 }ih264e_fill_mem_rec_op_t;
104 
105 /*****************************************************************************/
106 /*  Retrieve Memory Records                                                  */
107 /*****************************************************************************/
108 
109 
110 typedef struct
111 {
112     iv_retrieve_mem_rec_ip_t               s_ive_ip;
113 }ih264e_retrieve_mem_rec_ip_t;
114 
115 
116 typedef struct
117 {
118     iv_retrieve_mem_rec_op_t               s_ive_op;
119 }ih264e_retrieve_mem_rec_op_t;
120 
121 
122 /*****************************************************************************/
123 /*   Initialize encoder                                                      */
124 /*****************************************************************************/
125 
126 typedef struct
127 {
128     ive_init_ip_t                           s_ive_ip;
129 }ih264e_init_ip_t;
130 
131 
132 typedef struct
133 {
134     ive_init_op_t                           s_ive_op;
135 }ih264e_init_op_t;
136 
137 
138 /*****************************************************************************/
139 /*   Queue Input raw buffer - Send the YUV buffer to be encoded              */
140 /*****************************************************************************/
141 typedef struct
142 {
143     ive_queue_inp_ip_t                      s_ive_ip;
144 }ih264e_queue_inp_ip_t;
145 
146 typedef struct
147 {
148     ive_queue_inp_op_t                      s_ive_op;
149 }ih264e_queue_inp_op_t;
150 
151 /*****************************************************************************/
152 /*   Dequeue Input raw buffer - Get free YUV buffer from the encoder         */
153 /*****************************************************************************/
154 typedef struct
155 {
156     ive_dequeue_inp_ip_t                      s_ive_ip;
157 }ih264e_dequeue_inp_ip_t;
158 
159 typedef struct
160 {
161     ive_dequeue_inp_op_t                      s_ive_op;
162 }ih264e_dequeue_inp_op_t;
163 
164 
165 /*****************************************************************************/
166 /*   Queue Output bitstream buffer - Send the bistream buffer to be filled   */
167 /*****************************************************************************/
168 typedef struct
169 {
170     ive_queue_out_ip_t                      s_ive_ip;
171 }ih264e_queue_out_ip_t;
172 
173 typedef struct
174 {
175     ive_queue_out_op_t                      s_ive_op;
176 }ih264e_queue_out_op_t;
177 
178 /*****************************************************************************/
179 /* Dequeue Output bitstream buffer - Get the bistream buffer filled          */
180 /*****************************************************************************/
181 typedef struct
182 {
183     ive_dequeue_out_ip_t                      s_ive_ip;
184 }ih264e_dequeue_out_ip_t;
185 
186 typedef struct
187 {
188     ive_dequeue_out_op_t                      s_ive_op;
189 }ih264e_dequeue_out_op_t;
190 
191 
192 /*****************************************************************************/
193 /* Get Recon data - Get the reconstructed data from encoder                  */
194 /*****************************************************************************/
195 typedef struct
196 {
197     ive_get_recon_ip_t                        s_ive_ip;
198 }ih264e_get_recon_ip_t;
199 
200 typedef struct
201 {
202     ive_get_recon_op_t                        s_ive_op;
203 }ih264e_get_recon_op_t;
204 /*****************************************************************************/
205 /*   Video control  Flush                                                    */
206 /*****************************************************************************/
207 
208 
209 typedef struct
210 {
211     ive_ctl_flush_ip_t                      s_ive_ip;
212 }ih264e_ctl_flush_ip_t;
213 
214 
215 typedef struct
216 {
217     ive_ctl_flush_op_t                      s_ive_op;
218 }ih264e_ctl_flush_op_t;
219 
220 /*****************************************************************************/
221 /*   Video control reset                                                     */
222 /*****************************************************************************/
223 
224 
225 typedef struct
226 {
227     ive_ctl_reset_ip_t                      s_ive_ip;
228 }ih264e_ctl_reset_ip_t;
229 
230 
231 typedef struct
232 {
233     ive_ctl_reset_op_t                      s_ive_op;
234 }ih264e_ctl_reset_op_t;
235 
236 
237 /*****************************************************************************/
238 /*   Video control:Get Buf Info                                              */
239 /*****************************************************************************/
240 
241 
242 typedef struct
243 {
244     ive_ctl_getbufinfo_ip_t             s_ive_ip;
245 }ih264e_ctl_getbufinfo_ip_t;
246 
247 
248 
249 typedef struct
250 {
251     ive_ctl_getbufinfo_op_t             s_ive_op;
252 }ih264e_ctl_getbufinfo_op_t;
253 
254 
255 
256 /*****************************************************************************/
257 /*   Video control:Get Version Info                                          */
258 /*****************************************************************************/
259 
260 
261 typedef struct
262 {
263     ive_ctl_getversioninfo_ip_t         s_ive_ip;
264 }ih264e_ctl_getversioninfo_ip_t;
265 
266 
267 
268 typedef struct
269 {
270     ive_ctl_getversioninfo_op_t         s_ive_op;
271 }ih264e_ctl_getversioninfo_op_t;
272 
273 /*****************************************************************************/
274 /*   Video control:Set default params                                       */
275 /*****************************************************************************/
276 
277 
278 typedef struct
279 {
280     ive_ctl_setdefault_ip_t         s_ive_ip;
281 }ih264e_ctl_setdefault_ip_t;
282 
283 
284 
285 typedef struct
286 {
287     ive_ctl_setdefault_op_t         s_ive_op;
288 }ih264e_ctl_setdefault_op_t;
289 
290 /*****************************************************************************/
291 /*   Video control  Set IPE params                                           */
292 /*****************************************************************************/
293 typedef struct
294 {
295     ive_ctl_set_ipe_params_ip_t     s_ive_ip;
296 }ih264e_ctl_set_ipe_params_ip_t;
297 
298 typedef struct
299 {
300     ive_ctl_set_ipe_params_op_t     s_ive_op;
301 }ih264e_ctl_set_ipe_params_op_t;
302 
303 /*****************************************************************************/
304 /*   Video control  Set Frame dimensions                                     */
305 /*****************************************************************************/
306 typedef struct
307 {
308     ive_ctl_set_dimensions_ip_t     s_ive_ip;
309 }ih264e_ctl_set_dimensions_ip_t;
310 
311 typedef struct
312 {
313     ive_ctl_set_dimensions_op_t     s_ive_op;
314 }ih264e_ctl_set_dimensions_op_t;
315 
316 /*****************************************************************************/
317 /*   Video control  Set Frame rates                                          */
318 /*****************************************************************************/
319 typedef struct
320 {
321     ive_ctl_set_frame_rate_ip_t     s_ive_ip;
322 }ih264e_ctl_set_frame_rate_ip_t;
323 typedef struct
324 {
325     ive_ctl_set_frame_rate_op_t     s_ive_op;
326 }ih264e_ctl_set_frame_rate_op_t;
327 
328 
329 /*****************************************************************************/
330 /*   Video control  Set Bitrate                                              */
331 /*****************************************************************************/
332 typedef struct
333 {
334     ive_ctl_set_bitrate_ip_t        s_ive_ip;
335 }ih264e_ctl_set_bitrate_ip_t;
336 
337 typedef struct
338 {
339     ive_ctl_set_bitrate_op_t        s_ive_op;
340 }ih264e_ctl_set_bitrate_op_t;
341 
342 
343 /*****************************************************************************/
344 /*   Video control  Set Frame type                                           */
345 /*****************************************************************************/
346 typedef struct
347 {
348     ive_ctl_set_frame_type_ip_t     s_ive_ip;
349 }ih264e_ctl_set_frame_type_ip_t;
350 
351 typedef struct
352 {
353     ive_ctl_set_frame_type_op_t     s_ive_op;
354 }ih264e_ctl_set_frame_type_op_t;
355 
356 /*****************************************************************************/
357 /*   Video control  Set Encode mode                                          */
358 /*****************************************************************************/
359 typedef struct
360 {
361     ive_ctl_set_enc_mode_ip_t       s_ive_ip;
362 }ih264e_ctl_set_enc_mode_ip_t;
363 
364 typedef struct
365 {
366     ive_ctl_set_enc_mode_op_t       s_ive_op;
367 }ih264e_ctl_set_enc_mode_op_t;
368 
369 /*****************************************************************************/
370 /*   Video control  Set QP                                                   */
371 /*****************************************************************************/
372 typedef struct
373 {
374     ive_ctl_set_qp_ip_t             s_ive_ip;
375 }ih264e_ctl_set_qp_ip_t;
376 
377 typedef struct
378 {
379     ive_ctl_set_qp_op_t             s_ive_op;
380 }ih264e_ctl_set_qp_op_t;
381 
382 /*****************************************************************************/
383 /*   Video control  Set AIR params                                           */
384 /*****************************************************************************/
385 typedef struct
386 {
387     ive_ctl_set_air_params_ip_t     s_ive_ip;
388 }ih264e_ctl_set_air_params_ip_t;
389 
390 typedef struct
391 {
392     ive_ctl_set_air_params_op_t     s_ive_op;
393 }ih264e_ctl_set_air_params_op_t;
394 
395 /*****************************************************************************/
396 /*   Video control  Set VBV params                                           */
397 /*****************************************************************************/
398 typedef struct
399 {
400     ive_ctl_set_vbv_params_ip_t     s_ive_ip;
401 }ih264e_ctl_set_vbv_params_ip_t;
402 
403 typedef struct
404 {
405     ive_ctl_set_vbv_params_op_t     s_ive_op;
406 }ih264e_ctl_set_vbv_params_op_t;
407 
408 /*****************************************************************************/
409 /*   Video control  Set Processor Details                                    */
410 /*****************************************************************************/
411 typedef struct
412 {
413     ive_ctl_set_num_cores_ip_t      s_ive_ip;
414 }ih264e_ctl_set_num_cores_ip_t;
415 
416 typedef struct
417 {
418     ive_ctl_set_num_cores_op_t      s_ive_op;
419 }ih264e_ctl_set_num_cores_op_t;
420 
421 /*****************************************************************************/
422 /*   Video control  Set Motion estimation params                             */
423 /*****************************************************************************/
424 typedef struct
425 {
426     ive_ctl_set_me_params_ip_t      s_ive_ip;
427 }ih264e_ctl_set_me_params_ip_t;
428 
429 typedef struct
430 {
431     ive_ctl_set_me_params_op_t      s_ive_op;
432 }ih264e_ctl_set_me_params_op_t;
433 
434 /*****************************************************************************/
435 /*   Video control  Set GOP params                                           */
436 /*****************************************************************************/
437 typedef struct
438 {
439     ive_ctl_set_gop_params_ip_t     s_ive_ip;
440 }ih264e_ctl_set_gop_params_ip_t;
441 
442 typedef struct
443 {
444     ive_ctl_set_gop_params_op_t     s_ive_op;
445 }ih264e_ctl_set_gop_params_op_t;
446 
447 /*****************************************************************************/
448 /*   Video control  Set Deblock params                                       */
449 /*****************************************************************************/
450 typedef struct
451 {
452     ive_ctl_set_deblock_params_ip_t s_ive_ip;
453 }ih264e_ctl_set_deblock_params_ip_t;
454 
455 typedef struct
456 {
457     ive_ctl_set_deblock_params_op_t s_ive_op;
458 }ih264e_ctl_set_deblock_params_op_t;
459 
460 /*****************************************************************************/
461 /*   Video control  Set Profile params                                       */
462 /*****************************************************************************/
463 typedef struct
464 {
465     ive_ctl_set_profile_params_ip_t s_ive_ip;
466 }ih264e_ctl_set_profile_params_ip_t;
467 
468 typedef struct
469 {
470     ive_ctl_set_profile_params_op_t s_ive_op;
471 }ih264e_ctl_set_profile_params_op_t;
472 
473 /*****************************************************************************/
474 /*   Synchronous video encode call                                           */
475 /*****************************************************************************/
476 typedef struct
477 {
478     ive_video_encode_ip_t s_ive_ip;
479 }ih264e_video_encode_ip_t;
480 
481 typedef struct
482 {
483     ive_video_encode_op_t s_ive_op;
484 }ih264e_video_encode_op_t;
485 
486 
487 /* The enum values should not have greater than 8 bits as this is assigned to WORD8 */
488 typedef enum
489 {
490     INTRA16x16 = 0,
491     INTRA4x4,
492     INTER16x16
493 }IV_MB_TYPE_T;
494 
495 /*****************************************************************************/
496 /*   Pic info structures                                                     */
497 /*****************************************************************************/
498 typedef struct
499 {
500     /** Qp  */
501     UWORD32                                     u4_qp;
502 
503     /** Pic Type */
504     IV_PICTURE_CODING_TYPE_T                    e_frame_type;
505 
506 }ih264e_pic_info1_t;
507 
508 typedef struct
509 {
510     /** Qp  */
511     UWORD32                                     u4_qp;
512 
513     /** Pic Type */
514     IV_PICTURE_CODING_TYPE_T                    e_frame_type;
515 
516     /** Disable deblock level (0: Enable completely, 3: Disable completely */
517     UWORD32                                     u4_disable_deblock_level;
518 
519 }ih264e_pic_info2_t;
520 
521 
522 /*****************************************************************************/
523 /*   MB info structures                                                     */
524 /*****************************************************************************/
525 typedef struct
526 {
527     /** MV X    */
528     WORD16                                  i2_mv_x;
529 
530     /** MV Y    */
531     WORD16                                  i2_mv_y;
532 }ih264e_mv_t;
533 
534 typedef struct
535 {
536     /** Intra / Inter    */
537     WORD8                                       i1_mb_type;
538     union
539     {
540         ih264e_mv_t                                 as_mv[1];
541 
542         /** Intra mode */
543         WORD8                                       ai1_intra_mode[1];
544     };
545 }ih264e_mb_info1_t;
546 
547 typedef struct
548 {
549     /** Intra / Inter    */
550     WORD8                                       i1_mb_type;
551 
552 
553     /** SAD     */
554     UWORD16                                     u2_sad;
555 
556     union
557     {
558         ih264e_mv_t                                 as_mv[1];
559 
560         /** Intra mode */
561         WORD8                                       ai1_intra_mode[1];
562     };
563 
564 
565 }ih264e_mb_info2_t;
566 
567 typedef struct
568 {
569     /** Intra / Inter    */
570     WORD8                                       i1_mb_type;
571 
572     union
573     {
574         ih264e_mv_t                                 as_mv[4];
575 
576         /** Intra mode */
577         WORD8                                       ai1_intra_mode[16];
578     };
579 
580 }ih264e_mb_info3_t;
581 
582 typedef struct
583 {
584     /** Intra / Inter    */
585     WORD8                                       i1_mb_type;
586 
587     /** Intra Mode      */
588     WORD8                                       i1_intra_mode;
589 
590     /** SAD     */
591     UWORD16                                     u2_sad;
592 
593     union
594     {
595         ih264e_mv_t                                 as_mv[16];
596 
597         /** Intra mode */
598         WORD8                                       ai1_intra_mode[16];
599     };
600 
601 
602 
603 }ih264e_mb_info4_t;
604 
605 /* Add any new structures to the following union. It is used to calculate the max size needed for allocation of memory */
606 typedef struct
607 {
608     union
609     {
610         ih264e_mb_info1_t               s_mb_info1;
611         ih264e_mb_info2_t               s_mb_info2;
612         ih264e_mb_info3_t               s_mb_info3;
613         ih264e_mb_info4_t               s_mb_info4;
614     };
615 }ih264e_mb_info_t;
616 
617 #ifdef __cplusplus
618 } /* closing brace for extern "C" */
619 #endif
620 #endif /* _IH264E_H_ */
621