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