18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes                                                             */
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* System include files */
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdlib.h>
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h>
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <assert.h>
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User include files */
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "iv2.h"
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ive2.h"
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e.h"
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "app.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Constant Macros                                                           */
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PEAK_WINDOW_SIZE    8
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Macros                                                                   */
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Declarations                                                    */
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIV_STATUS_T write_output(FILE *fp, UWORD8 *pu1_buf, WORD32 num_bytes)
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 bytes;
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bytes = fwrite(pu1_buf, sizeof(UWORD8), num_bytes, fp);
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(bytes != num_bytes)
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return IV_FAIL;
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    fflush(fp);
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return IV_SUCCESS;
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid allocate_output(app_ctxt_t *ps_app_ctxt)
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_bufs;
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_buf;
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 buf_size;
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    num_bufs = MAX(DEFAULT_NUM_OUTPUT_BUFS, ps_app_ctxt->s_get_buf_info_op.s_ive_op.u4_min_out_bufs);
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    num_bufs = MIN(DEFAULT_MAX_OUTPUT_BUFS, num_bufs);
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    buf_size = ps_app_ctxt->s_get_buf_info_op.s_ive_op.au4_min_out_buf_size[0];
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Memset the output buffer array to set is_free to 0 */
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    memset(ps_app_ctxt->as_output_buf, 0, sizeof(output_buf_t) * DEFAULT_MAX_OUTPUT_BUFS);
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < num_bufs; i++)
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_buf = (UWORD8 *)ih264a_aligned_malloc(16, buf_size);
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == pu1_buf)
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            CHAR ac_error[STRLENGTH];
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Allocation failed for output buffer of size %d\n",
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    buf_size);
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->as_output_buf[i].pu1_buf = pu1_buf;
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->as_output_buf[i].u4_buf_size = buf_size;
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->as_output_buf[i].u4_is_free = 1;
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid free_output(app_ctxt_t *ps_app_ctxt)
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_bufs;
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    num_bufs = MAX(DEFAULT_NUM_OUTPUT_BUFS, ps_app_ctxt->s_get_buf_info_op.s_ive_op.u4_min_out_bufs);
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    num_bufs = MIN(DEFAULT_MAX_OUTPUT_BUFS, num_bufs);
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < num_bufs; i++)
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264a_aligned_free(ps_app_ctxt->as_output_buf[i].pu1_buf);
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
109