1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * output.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * Contains functions necessary for managing output buffers
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker * ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @remarks
33*495ae853SAndroid Build Coastguard Worker * none
34*495ae853SAndroid Build Coastguard Worker *
35*495ae853SAndroid Build Coastguard Worker *******************************************************************************
36*495ae853SAndroid Build Coastguard Worker */
37*495ae853SAndroid Build Coastguard Worker
38*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
39*495ae853SAndroid Build Coastguard Worker /* File Includes */
40*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
41*495ae853SAndroid Build Coastguard Worker
42*495ae853SAndroid Build Coastguard Worker /* System include files */
43*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
44*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
45*495ae853SAndroid Build Coastguard Worker #include <assert.h>
46*495ae853SAndroid Build Coastguard Worker #include <string.h>
47*495ae853SAndroid Build Coastguard Worker
48*495ae853SAndroid Build Coastguard Worker /* User include files */
49*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
50*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
51*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
52*495ae853SAndroid Build Coastguard Worker #include "ih264e.h"
53*495ae853SAndroid Build Coastguard Worker #include "app.h"
54*495ae853SAndroid Build Coastguard Worker
55*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
56*495ae853SAndroid Build Coastguard Worker /* Constant Macros */
57*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
58*495ae853SAndroid Build Coastguard Worker #define PEAK_WINDOW_SIZE 8
59*495ae853SAndroid Build Coastguard Worker
60*495ae853SAndroid Build Coastguard Worker
61*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
62*495ae853SAndroid Build Coastguard Worker /* Macros */
63*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
64*495ae853SAndroid Build Coastguard Worker
65*495ae853SAndroid Build Coastguard Worker
66*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
67*495ae853SAndroid Build Coastguard Worker /* Function Definitions */
68*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
69*495ae853SAndroid Build Coastguard Worker
70*495ae853SAndroid Build Coastguard Worker /**
71*495ae853SAndroid Build Coastguard Worker **************************************************************************
72*495ae853SAndroid Build Coastguard Worker * @brief Write bitstream buffers to a file
73*495ae853SAndroid Build Coastguard Worker **************************************************************************
74*495ae853SAndroid Build Coastguard Worker */
write_output(FILE * fp,UWORD8 * pu1_buf,WORD32 num_bytes)75*495ae853SAndroid Build Coastguard Worker IV_STATUS_T write_output(FILE *fp, UWORD8 *pu1_buf, WORD32 num_bytes)
76*495ae853SAndroid Build Coastguard Worker {
77*495ae853SAndroid Build Coastguard Worker WORD32 bytes;
78*495ae853SAndroid Build Coastguard Worker
79*495ae853SAndroid Build Coastguard Worker bytes = fwrite(pu1_buf, sizeof(UWORD8), num_bytes, fp);
80*495ae853SAndroid Build Coastguard Worker if(bytes != num_bytes)
81*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
82*495ae853SAndroid Build Coastguard Worker fflush(fp);
83*495ae853SAndroid Build Coastguard Worker
84*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
85*495ae853SAndroid Build Coastguard Worker }
86*495ae853SAndroid Build Coastguard Worker
87*495ae853SAndroid Build Coastguard Worker /**
88*495ae853SAndroid Build Coastguard Worker **************************************************************************
89*495ae853SAndroid Build Coastguard Worker * @brief allocate bitstream buffers
90*495ae853SAndroid Build Coastguard Worker **************************************************************************
91*495ae853SAndroid Build Coastguard Worker */
allocate_output(app_ctxt_t * ps_app_ctxt)92*495ae853SAndroid Build Coastguard Worker void allocate_output(app_ctxt_t *ps_app_ctxt)
93*495ae853SAndroid Build Coastguard Worker {
94*495ae853SAndroid Build Coastguard Worker WORD32 num_bufs;
95*495ae853SAndroid Build Coastguard Worker WORD32 i;
96*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf;
97*495ae853SAndroid Build Coastguard Worker WORD32 buf_size;
98*495ae853SAndroid Build Coastguard Worker
99*495ae853SAndroid Build Coastguard Worker num_bufs = MAX(DEFAULT_NUM_OUTPUT_BUFS,
100*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_get_buf_info_op.s_ive_op.u4_min_out_bufs);
101*495ae853SAndroid Build Coastguard Worker num_bufs = MIN(DEFAULT_MAX_OUTPUT_BUFS, num_bufs);
102*495ae853SAndroid Build Coastguard Worker
103*495ae853SAndroid Build Coastguard Worker buf_size = ps_app_ctxt->s_get_buf_info_op.s_ive_op.au4_min_out_buf_size[0];
104*495ae853SAndroid Build Coastguard Worker
105*495ae853SAndroid Build Coastguard Worker /* Memset the output buffer array to set is_free to 0 */
106*495ae853SAndroid Build Coastguard Worker memset(ps_app_ctxt->as_output_buf, 0,
107*495ae853SAndroid Build Coastguard Worker sizeof(output_buf_t) * DEFAULT_MAX_OUTPUT_BUFS);
108*495ae853SAndroid Build Coastguard Worker
109*495ae853SAndroid Build Coastguard Worker for(i = 0; i < num_bufs; i++)
110*495ae853SAndroid Build Coastguard Worker {
111*495ae853SAndroid Build Coastguard Worker pu1_buf = (UWORD8 *)ih264a_aligned_malloc(16, buf_size);
112*495ae853SAndroid Build Coastguard Worker if(NULL == pu1_buf)
113*495ae853SAndroid Build Coastguard Worker {
114*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
115*495ae853SAndroid Build Coastguard Worker sprintf(ac_error,
116*495ae853SAndroid Build Coastguard Worker "Allocation failed for output buffer of size %d\n",
117*495ae853SAndroid Build Coastguard Worker buf_size);
118*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
119*495ae853SAndroid Build Coastguard Worker }
120*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].pu1_buf = pu1_buf;
121*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].u4_buf_size = buf_size;
122*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].u4_is_free = 1;
123*495ae853SAndroid Build Coastguard Worker }
124*495ae853SAndroid Build Coastguard Worker }
125*495ae853SAndroid Build Coastguard Worker
126*495ae853SAndroid Build Coastguard Worker /**
127*495ae853SAndroid Build Coastguard Worker **************************************************************************
128*495ae853SAndroid Build Coastguard Worker * @brief free bitstream buffers
129*495ae853SAndroid Build Coastguard Worker **************************************************************************
130*495ae853SAndroid Build Coastguard Worker */
free_output(app_ctxt_t * ps_app_ctxt)131*495ae853SAndroid Build Coastguard Worker void free_output(app_ctxt_t *ps_app_ctxt)
132*495ae853SAndroid Build Coastguard Worker {
133*495ae853SAndroid Build Coastguard Worker WORD32 num_bufs;
134*495ae853SAndroid Build Coastguard Worker WORD32 i;
135*495ae853SAndroid Build Coastguard Worker
136*495ae853SAndroid Build Coastguard Worker num_bufs = MAX(DEFAULT_NUM_OUTPUT_BUFS,
137*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_get_buf_info_op.s_ive_op.u4_min_out_bufs);
138*495ae853SAndroid Build Coastguard Worker num_bufs = MIN(DEFAULT_MAX_OUTPUT_BUFS, num_bufs);
139*495ae853SAndroid Build Coastguard Worker for(i = 0; i < num_bufs; i++)
140*495ae853SAndroid Build Coastguard Worker {
141*495ae853SAndroid Build Coastguard Worker ih264a_aligned_free(ps_app_ctxt->as_output_buf[i].pu1_buf);
142*495ae853SAndroid Build Coastguard Worker }
143*495ae853SAndroid Build Coastguard Worker }
144*495ae853SAndroid Build Coastguard Worker
145