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#include <stdio.h>
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdlib.h>
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stddef.h>
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <assert.h>
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
317497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar
327497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar#ifndef IOS
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <malloc.h>
347497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar#endif
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef WINDOWS_TIMER
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "windows.h"
38a932f734ab7fbb48b1245611d876388b7d90ed90Martin Storsjo#else
39a932f734ab7fbb48b1245611d876388b7d90ed90Martin Storsjo#include <sys/time.h>
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User include files */
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "iv2.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ive2.h"
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e.h"
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "app.h"
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "psnr.h"
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function declarations */
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef MD5_DISABLE
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid calc_md5_cksum(UWORD8 *pu1_inbuf,UWORD32 u4_stride,UWORD32 u4_width,UWORD32 u4_height,UWORD8 *pu1_cksum_p );
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#else
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define calc_md5_cksum(a, b, c, d, e)
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Enums                                                                     */
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Stypedef enum
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INVALID,
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    HELP,
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INPUT_FILE,
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    OUTPUT_FILE,
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    RECON_FILE,
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    RECON_ENABLE,
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHKSUM_ENABLE,
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHKSUM_FILE,
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INPUT_CHROMA_FORMAT,
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    RECON_CHROMA_FORMAT,
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MAX_WD,
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MAX_HT,
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WD,
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    HT,
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MAX_LEVEL,
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ENC_SPEED,
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ME_SPEED,
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    START_FRM,
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    NUM_FRMS,
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MAX_FRAMERATE,
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SRC_FRAMERATE,
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    TGT_FRAMERATE,
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    RC,
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MAX_BITRATE,
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    BITRATE,
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    I_QP,
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    P_QP,
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    B_QP,
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    I_QP_MAX,
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    P_QP_MAX,
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    B_QP_MAX,
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    I_QP_MIN,
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    P_QP_MIN,
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    B_QP_MIN,
953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ENTROPY,
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    AIR,
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    AIR_REFRESH_PERIOD,
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ARCH,
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SOC,
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    NUMCORES,
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PRE_ENC_ME,
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PRE_ENC_IPE,
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    HPEL,
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    QPEL,
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SRCH_RNG_X,
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SRCH_RNG_Y,
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    I_INTERVAL,
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IDR_INTERVAL,
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    B_FRMS,
1103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    NUM_B_FRMS,
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    DISABLE_DBLK,
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PROFILE,
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    FAST_SAD,
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ALT_REF,
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    DISABLE_DEBLOCK_LEVEL,
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PSNR,
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SLICE_MODE,
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    SLICE_PARAM,
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CONFIG,
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    LOOPBACK,
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    VBV_DELAY,
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    VBV_SIZE,
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    INTRA_4x4_ENABLE,
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MB_INFO_FILE,
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    MB_INFO_TYPE,
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PIC_INFO_FILE,
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    PIC_INFO_TYPE,
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} ARGUMENT_T;
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Stypedef struct
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR        argument_shortname[8];
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR        argument_name[128];
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ARGUMENT_T  argument;
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR        description[512];
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} argument_t;
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sstatic const argument_t argument_mapping[] =
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--help", HELP, "Print this help\n" },
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-i", "--input", INPUT_FILE, "Input file\n" },
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-o", "--output", OUTPUT_FILE, "Output file\n" },
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--recon_enable", RECON_ENABLE, "Recon enable flag\n" },
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-r", "--recon", RECON_FILE, "Recon file \n" },
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--",  "--input_chroma_format",  INPUT_CHROMA_FORMAT,
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            "Input Chroma format Supported values YUV_420P, YUV_420SP_UV, YUV_420SP_VU\n" },
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--",  "--recon_chroma_format",  RECON_CHROMA_FORMAT,
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            "Recon Chroma format Supported values YUV_420P, YUV_420SP_UV, YUV_420SP_VU\n" },
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-w", "--width", WD, "Width of input  file\n" },
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-h", "--height", HT, "Height file\n" },
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--start_frame", START_FRM,  "Starting frame number\n" },
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-f", "--num_frames", NUM_FRMS,  "Number of frames to be encoded\n" },
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--rc", RC, "Rate control mode 0: Constant Qp, 1: Storage, 2: CBR non low delay, 3: CBR low delay \n" },
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--max_framerate", MAX_FRAMERATE, "Maximum frame rate \n" },
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--tgt_framerate", TGT_FRAMERATE, "Target frame rate \n" },
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--src_framerate", SRC_FRAMERATE, "Source frame rate \n" },
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--i_interval", I_INTERVAL,  "Intra frame interval \n" },
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--idr_interval", IDR_INTERVAL,  "IDR frame interval \n" },
1593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                { "--", "--bframes", NUM_B_FRMS, "Maximum number of consecutive B frames \n" },
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--speed", ENC_SPEED, "Encoder speed preset 0 (slowest) and 100 (fastest)\n" },
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--me_speed", ME_SPEED, "Encoder speed preset 0 (slowest) and 100 (fastest)\n" },
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--fast_sad", FAST_SAD, " Flag for faster sad execution\n" },
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--alt_ref", ALT_REF , "Flag to enable alternate refernce frames"},
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--hpel", HPEL, "Flag to enable/disable Quarter pel estimation \n" },
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qpel", QPEL, "Flag to enable/disable Quarter pel estimation \n" },
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--disable_deblock_level",  DISABLE_DEBLOCK_LEVEL,
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        "Disable deblock level - 0 : Enables deblock completely, 1: enables for I and 8th frame , 2: Enables for I only, 3 : disables completely\n" },
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--search_range_x", SRCH_RNG_X,     "Search range for X  \n" },
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--search_range_y", SRCH_RNG_Y,     "Search range for Y \n" },
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--psnr", PSNR, "Enable PSNR computation (Disable while benchmarking performance) \n" },
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--pre_enc_me", PRE_ENC_ME, "Flag to enable/disable Pre Enc Motion Estimation\n" },
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--pre_enc_ipe", PRE_ENC_IPE, "Flag to enable/disable Pre Enc Intra prediction Estimation\n" },
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-n", "--num_cores", NUMCORES, "Number of cores to be used\n" },
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--adaptive_intra_refresh", AIR ,"Adaptive Intra Refresh enable/disable\n"},
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--air_refresh_period", AIR_REFRESH_PERIOD,"adaptive intra refresh period\n"},
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--slice", SLICE_MODE,  "Slice mode-  0 :No slice, 1: Bytes per slice, 2: MB/CTB per slice  \n" },
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--slice_param",  SLICE_PARAM, "Slice param value based on slice mode. Slice mode of 1 implies number of bytes per slice, 2 implies number of MBs/CTBs, for 0 value is neglected \n" },
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--max_wd",      MAX_WD,                "Maximum width (Default: 1920) \n" },
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--max_ht",      MAX_HT,                "Maximum height (Default: 1088)\n" },
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--max_level",   MAX_LEVEL,             "Maximum Level (Default: 50)\n" },
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--arch", ARCH, "Set Architecture. Supported values  ARM_NONEON, ARM_A9Q, ARM_A7, ARM_A5, ARM_NEONINTR, X86_GENERIC, X86_SSSE3, X86_SSE4 \n" },
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--soc", SOC, "Set SOC. Supported values  GENERIC, HISI_37X \n" },
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--chksum",            CHKSUM_FILE,              "Save Check sum file for recon data\n" },
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--chksum_enable",          CHKSUM_ENABLE,               "Recon MD5 Checksum file\n"},
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-c", "--config",      CONFIG,              "config file (Default: enc.cfg)\n" },
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--loopback",      LOOPBACK,             "Enable encoding in a loop\n" },
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--profile",      PROFILE,               "Profile mode: Supported values BASE, MAIN, HIGH\n" },
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--max_bitrate",  MAX_BITRATE,           "Max bitrate\n"},
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--bitrate",      BITRATE,               "Target bitrate\n"},
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_i",         I_QP,                  "QP for I frames\n"},
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_p",         P_QP,                  "QP for P frames\n"},
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_b",         B_QP,                  "QP for B frames\n"},
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_i_max",     I_QP_MAX,              "Max QP for I frames\n"},
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_p_max",     P_QP_MAX,              "Max QP for P frames\n"},
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_b_max",     B_QP_MAX,              "Max QP for B frames\n"},
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_i_min",     I_QP_MIN,              "Min QP for I frames\n"},
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_p_min",     P_QP_MIN,              "Min QP for P frames\n"},
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--qp_b_min",     B_QP_MIN,              "Min QP for B frames\n"},
1993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                { "--", "--entropy",      ENTROPY,              "Entropy coding mode(0: CAVLC or 1: CABAC)\n"},
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--vbv_delay",    VBV_DELAY,             "VBV buffer delay\n"},
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--vbv_size",     VBV_SIZE,              "VBV buffer size\n"},
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "-i4", "--intra_4x4_enable", INTRA_4x4_ENABLE, "Intra 4x4 enable \n" },
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--mb_info_file",     MB_INFO_FILE,              "MB info file\n"},
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--mb_info_type",     MB_INFO_TYPE,              "MB info type\n"},
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--pic_info_file",     PIC_INFO_FILE,              "Pic info file\n"},
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                { "--", "--pic_info_type",     PIC_INFO_TYPE,              "Pic info type\n"},
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        };
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Declarations                                                    */
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Definitions                                                     */
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#if(defined X86) && (defined X86_MINGW)
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function to print library calls                                           */
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : memalign                                                 */
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Returns malloc data. Ideally should return aligned memory*/
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  support alignment will be added later                    */
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : alignment                                                */
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  size                                                     */
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    :                                                          */
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       :                                                          */
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       :                                                          */
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 09 2012   100189          Initial Version                      */
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid * ih264a_aligned_malloc(WORD32 alignment, WORD32 size)
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return _aligned_malloc(size, alignment);
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264a_aligned_free(void *pv_buf)
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    _aligned_free(pv_buf);
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#elif IOS
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid * ih264a_aligned_malloc(WORD32 alignment, WORD32 size)
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return malloc(size);
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264a_aligned_free(void *pv_buf)
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    free(pv_buf);
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#else
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid * ih264a_aligned_malloc(WORD32 alignment, WORD32 size)
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return memalign(alignment, size);
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264a_aligned_free(void *pv_buf)
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    free(pv_buf);
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : codec_exit                                               */
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : handles unrecoverable errors                             */
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : Error message                                            */
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : None                                                     */
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Prints error message to console and exits.               */
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Error message to the console                             */
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : None                                                     */
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 06 2006   Sankar          Creation                             */
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid codec_exit(CHAR *pc_err_message)
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    printf("%s\n", pc_err_message);
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    exit(-1);
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : codec_exit                                               */
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : handles unrecoverable errors                             */
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : Error message                                            */
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : None                                                     */
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Prints error message to console and exits.               */
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Error mesage to the console                              */
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : None                                                     */
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 06 2006   Sankar          Creation                             */
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIV_COLOR_FORMAT_T get_chroma_fmt(CHAR *value)
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_COLOR_FORMAT_T e_chroma_format;
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((strcmp(value, "YUV_420P")) == 0)
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_YUV_420P;
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "YUV_422ILE")) == 0)
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_YUV_422ILE;
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "RGB_565")) == 0)
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_RGB_565;
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "RGBA_8888")) == 0)
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_RGBA_8888;
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "YUV_420SP_UV")) == 0)
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_YUV_420SP_UV;
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "YUV_420SP_VU")) == 0)
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_YUV_420SP_VU;
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("\nInvalid colour format setting it to IV_YUV_420P\n");
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_chroma_format = IV_YUV_420P;
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return e_chroma_format;
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : codec_exit                                               */
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : handles unrecoverable errors                             */
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : Error message                                            */
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       : None                                                     */
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Prints error message to console and exits.               */
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Error mesage to the console                              */
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : None                                                     */
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 06 2006   Sankar          Creation                             */
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIVE_SPEED_CONFIG get_speed_preset(CHAR *value)
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IVE_SPEED_CONFIG e_enc_speed_preset;
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((strcmp(value, "CONFIG")) == 0)
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_CONFIG;
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "SLOWEST")) == 0)
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_SLOWEST;
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "NORMAL")) == 0)
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_NORMAL;
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "FAST")) == 0)
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          e_enc_speed_preset = IVE_FAST;
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "HIGH_SPEED")) == 0)
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_HIGH_SPEED;
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if((strcmp(value, "FASTEST")) == 0)
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_FASTEST;
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("\nInvalid speed preset, setting it to IVE_FASTEST\n");
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        e_enc_speed_preset = IVE_FASTEST;
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return e_enc_speed_preset;
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : print_usage                                              */
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Prints argument format                                   */
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        :                                                          */
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Prints argument format                                   */
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       :                                                          */
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       :                                                          */
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 09 2012   100189          Initial Version                      */
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid print_usage(void)
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i = 0;
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    printf("\nUsage:\n");
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(i < num_entries)
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("%-32s\t %s", argument_mapping[i].argument_name,
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S               argument_mapping[i].description);
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i++;
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : get_argument                                             */
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Gets argument for a given string                         */
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : name                                                     */
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Searches the given string in the array and returns       */
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  appropriate argument ID                                  */
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Argument ID                                              */
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : Argument ID                                              */
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 09 2012   100189          Initial Version                      */
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SARGUMENT_T get_argument(CHAR *name)
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i = 0;
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(i < num_entries)
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((0 == strcmp(argument_mapping[i].argument_name, name))       ||
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          ((0 == strcmp(argument_mapping[i].argument_shortname, name))  &&
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           (0 != strcmp(argument_mapping[i].argument_shortname, "--"))))
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            return argument_mapping[i].argument;
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i++;
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return INVALID;
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : get_argument                                             */
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Gets argument for a given string                         */
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : name                                                     */
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Searches the given string in the array and returns       */
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  appropriate argument ID                                  */
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Argument ID                                              */
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : Argument ID                                              */
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 09 2012   100189          Initial Version                      */
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid parse_argument(app_ctxt_t *ps_app_ctxt, CHAR *argument, CHAR *value)
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ARGUMENT_T arg;
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    arg = get_argument(argument);
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    switch(arg)
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case HELP:
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        print_usage();
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        exit(-1);
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SLICE_MODE:
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_slice_mode);
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SLICE_PARAM:
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_slice_param);
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case INPUT_FILE:
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%s", ps_app_ctxt->ac_ip_fname);
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case OUTPUT_FILE:
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%s", ps_app_ctxt->ac_op_fname);
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case RECON_FILE:
5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%s", ps_app_ctxt->ac_recon_fname);
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case RECON_ENABLE:
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_recon_enable);
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case CHKSUM_FILE:
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%s", ps_app_ctxt->ac_chksum_fname);
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case CHKSUM_ENABLE:
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_chksum_enable);
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MB_INFO_FILE:
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%s", ps_app_ctxt->ac_mb_info_fname);
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MB_INFO_TYPE:
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_mb_info_type);
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PIC_INFO_FILE:
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%s", ps_app_ctxt->ac_pic_info_fname);
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PIC_INFO_TYPE:
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_pic_info_type);
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case INPUT_CHROMA_FORMAT:
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->e_inp_color_fmt = get_chroma_fmt(value);
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case RECON_CHROMA_FORMAT:
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->e_recon_color_fmt = get_chroma_fmt(value);
5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MAX_WD:
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_max_wd);
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MAX_HT:
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_max_ht);
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case WD:
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_wd);
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case HT:
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_ht);
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MAX_LEVEL:
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_max_level);
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case ENC_SPEED:
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->u4_enc_speed = get_speed_preset(value);
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case ME_SPEED:
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_me_speed);
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case START_FRM:
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_start_frm);
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case NUM_FRMS:
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_max_num_frms);
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MAX_FRAMERATE:
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_max_frame_rate);
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          if(ps_app_ctxt->u4_max_frame_rate <= 0)
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->u4_max_frame_rate = DEFAULT_MAX_FRAMERATE;
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SRC_FRAMERATE:
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_src_frame_rate);
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_app_ctxt->u4_src_frame_rate <= 0)
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_app_ctxt->u4_src_frame_rate = DEFAULT_SRC_FRAME_RATE;
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case TGT_FRAMERATE:
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_tgt_frame_rate);
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_app_ctxt->u4_tgt_frame_rate <= 0)
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_app_ctxt->u4_tgt_frame_rate = DEFAULT_TGT_FRAME_RATE;
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case RC:
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_rc);
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case MAX_BITRATE:
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_max_bitrate);
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case BITRATE:
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_bitrate);
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case I_QP:
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_i_qp);
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case I_QP_MAX:
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_i_qp_max);
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case I_QP_MIN:
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_i_qp_min);
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case P_QP:
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_p_qp);
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case P_QP_MAX:
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_p_qp_max);
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case P_QP_MIN:
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_p_qp_min);
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case B_QP:
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_b_qp);
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case B_QP_MAX:
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_b_qp_max);
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case B_QP_MIN:
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_b_qp_min);
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K      case ENTROPY:
6653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K          sscanf(value, "%d", &ps_app_ctxt->u4_entropy_coding_mode);
6663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K          break;
6673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case AIR:
6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_air);
6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case ARCH:
6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          if((strcmp(value, "ARM_NONEON")) == 0)
6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_NONEON;
6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_A9Q")) == 0)
6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A9Q;
6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_A7")) == 0)
6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A7;
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_A5")) == 0)
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A5;
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_NEONINTR")) == 0)
6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_NEONINTR;
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "X86_GENERIC")) == 0)
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_X86_GENERIC;
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "X86_SSSE3")) == 0)
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_X86_SSSE3;
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "X86_SSE42")) == 0)
6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_X86_SSE42;
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_A53")) == 0)
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A53;
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_A57")) == 0)
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A57;
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "ARM_V8_NEON")) == 0)
6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_V8_NEON;
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else
6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          {
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              printf("\nInvalid Arch. Setting it to ARM_A9Q\n");
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_arch = ARCH_ARM_A9Q;
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          }
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SOC:
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          if((strcmp(value, "GENERIC")) == 0)
7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_soc = SOC_GENERIC;
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else if((strcmp(value, "HISI_37X")) == 0)
7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_soc = SOC_HISI_37X;
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          else
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          {
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_soc = SOC_GENERIC;
7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          }
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case NUMCORES:
7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_num_cores);
7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case LOOPBACK:
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_loopback);
7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PRE_ENC_ME:
7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_pre_enc_me);
7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PRE_ENC_IPE:
7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_pre_enc_ipe);
7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case HPEL:
7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_hpel);
7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case QPEL:
7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_qpel);
7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SRCH_RNG_X:
7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_srch_rng_x);
7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case SRCH_RNG_Y:
7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_srch_rng_y);
7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case I_INTERVAL:
7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_i_interval);
7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case IDR_INTERVAL:
7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_idr_interval);
7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K      case NUM_B_FRMS:
7543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        sscanf(value, "%d", &ps_app_ctxt->u4_num_bframes);
7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case DISABLE_DEBLOCK_LEVEL:
7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(value, "%d", &ps_app_ctxt->u4_disable_deblk_level);
7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        break;
7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case VBV_DELAY:
7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         sscanf(value, "%d", &ps_app_ctxt->u4_vbv_buffer_delay);
7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         break;
7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case VBV_SIZE:
7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         sscanf(value, "%d", &ps_app_ctxt->u4_vbv_buf_size);
7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         break;
7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case FAST_SAD:
7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_enable_fast_sad);
7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case ALT_REF:
7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_enable_alt_ref);
7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case AIR_REFRESH_PERIOD:
7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_air_refresh_period);
7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   break;
7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PROFILE:
7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((strcmp(value, "BASE")) == 0)
7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_app_ctxt->e_profile = IV_PROFILE_BASE;
7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else if((strcmp(value, "MAIN")) == 0)
7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_profile = IV_PROFILE_MAIN;
7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else if((strcmp(value, "HIGH")) == 0)
7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S              ps_app_ctxt->e_profile = IV_PROFILE_HIGH;
7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                printf("\nInvalid profile. Setting it to BASE\n");
7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_app_ctxt->e_profile = IV_PROFILE_BASE;
7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            break;
7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case PSNR:
7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_psnr_enable);
7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case INTRA_4x4_ENABLE:
8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          sscanf(value, "%d", &ps_app_ctxt->u4_enable_intra_4x4);
8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S          break;
8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S      case INVALID:
8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        default:
8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            printf("Ignoring argument :  %s\n", argument);
8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            break;
8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : read_cfg_file                                            */
8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Reads arguments from a configuration file                */
8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : ps_app_ctxt  : Application context                        */
8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  fp_cfg_file : Configuration file handle                  */
8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Parses the arguments and fills in the application context*/
8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Arguments parsed                                         */
8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : None                                                     */
8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        :                                                          */
8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         07 09 2012   100189          Initial Version                      */
8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid read_cfg_file(app_ctxt_t *ps_app_ctxt, FILE *fp_cfg)
8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR line[STRLENGTH];
8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR description[STRLENGTH];
8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR value[STRLENGTH];
8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR argument[STRLENGTH];
8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(0 == (feof(fp_cfg)))
8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        line[0] = '\0';
8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fgets(line, STRLENGTH, fp_cfg);
8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        argument[0] = '\0';
8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Reading Input File Name */
8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sscanf(line, "%s %s %s", argument, value, description);
8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(argument[0] == '\0')
8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            continue;
8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        parse_argument(ps_app_ctxt, argument, value);
8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid invalid_argument_exit(CHAR *pc_err_message)
8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    print_usage();
8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    codec_exit(pc_err_message);
8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid validate_params(app_ctxt_t *ps_app_ctxt)
8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR ac_error[STRLENGTH];
8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_app_ctxt->ac_ip_fname[0] == '\0')
8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit("Specify input file");
8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_app_ctxt->ac_op_fname[0] == '\0')
8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit("Specify output file");
8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((1 == ps_app_ctxt->u4_recon_enable) && (ps_app_ctxt->ac_recon_fname[0] == '\0'))
8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit("Specify recon file");
8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((1 == ps_app_ctxt->u4_chksum_enable) && (ps_app_ctxt->ac_chksum_fname[0] == '\0'))
8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit("Specify checksum file");
8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(0 >= (WORD32)ps_app_ctxt->u4_wd)
8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Invalid width: %d", ps_app_ctxt->u4_wd);
8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit(ac_error);
8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(0 >= (WORD32)ps_app_ctxt->u4_ht)
8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Invalid height: %d", ps_app_ctxt->u4_ht);
8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit(ac_error);
8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(0 == (WORD32)ps_app_ctxt->u4_max_num_frms)
8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Invalid number of frames to be encoded: %d", ps_app_ctxt->u4_max_num_frms);
8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit(ac_error);
8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
8973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if ((0 != (WORD32)ps_app_ctxt->u4_entropy_coding_mode)
8983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    && (1 != (WORD32)ps_app_ctxt->u4_entropy_coding_mode))
8993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
9003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        sprintf(ac_error, "Invalid entropy codeing mode: %d",
9013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_app_ctxt->u4_entropy_coding_mode);
9023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        invalid_argument_exit(ac_error);
9033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid init_default_params(app_ctxt_t *ps_app_ctxt)
9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ps_enc                  = NULL;
9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ps_mem_rec              = NULL;
9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_num_mem_rec          = DEFAULT_MEM_REC_CNT;
9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_recon_enable         = DEFAULT_RECON_ENABLE;
9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_chksum_enable        = DEFAULT_CHKSUM_ENABLE;
9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_mb_info_type         = 0;
9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pic_info_type        = 0;
9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_mb_info_size         = 0;
9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pic_info_size        = 0;
9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_start_frm            = DEFAULT_START_FRM;
9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_num_frms         = DEFAULT_NUM_FRMS;
921dc4c6140a935c949b888e5cb16a198444a24d031Martin Storsjo    ps_app_ctxt->avg_time                = 0;
9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_total_bytes          = 0;
9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pics_cnt             = 0;
9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->e_inp_color_fmt         = DEFAULT_INP_COLOR_FMT;
9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->e_recon_color_fmt       = DEFAULT_RECON_COLOR_FMT;
9263a52efd36102c9a4cb8e8f23b6f9131b8b01eef5Harish Mahendrakar    ps_app_ctxt->e_arch                  = ARCH_ARM_A9Q;
9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->e_soc                   = SOC_GENERIC;
9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->header_generated        = 0;
9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->pv_codec_obj            = NULL;
9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_num_cores            = DEFAULT_NUM_CORES;
9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pre_enc_me           = 0;
9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pre_enc_ipe          = 0;
9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ac_ip_fname[0]          = '\0';
9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ac_op_fname[0]          = '\0';
9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ac_recon_fname[0]       = '\0';
9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ac_chksum_fname[0]      = '\0';
9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->ac_mb_info_fname[0]     = '\0';
9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_ip                   = NULL;
9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_op                   = NULL;
9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_recon                = NULL;
9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_chksum               = NULL;
9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_psnr_ip              = NULL;
9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_mb_info              = NULL;
9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_pic_info             = NULL;
9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_loopback             = DEFAULT_LOOPBACK;
9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_frame_rate       = DEFAULT_MAX_FRAMERATE;
9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_src_frame_rate       = DEFAULT_SRC_FRAME_RATE;
9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_tgt_frame_rate       = DEFAULT_TGT_FRAME_RATE;
9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_wd               = DEFAULT_MAX_WD;
9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_ht               = DEFAULT_MAX_HT;
9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_level            = DEFAULT_MAX_LEVEL;
9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_strd                 = DEFAULT_STRIDE;
9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_wd                   = DEFAULT_WD;
9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_ht                   = DEFAULT_HT;
9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_psnr_enable          = DEFAULT_PSNR_ENABLE;
9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_enc_speed            = IVE_FASTEST;
9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_me_speed             = DEFAULT_ME_SPEED;
9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_enable_fast_sad      = DEFAULT_ENABLE_FAST_SAD;
9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_enable_alt_ref       = DEFAULT_ENABLE_ALT_REF;
9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_rc                   = DEFAULT_RC;
9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_max_bitrate          = DEFAULT_MAX_BITRATE;
9623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_app_ctxt->u4_num_bframes          = DEFAULT_NUM_BFRAMES;
9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_bitrate              = DEFAULT_BITRATE;
9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_i_qp                 = DEFAULT_I_QP;
9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_p_qp                 = DEFAULT_P_QP;
9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_b_qp                 = DEFAULT_B_QP;
9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_i_qp_min             = DEFAULT_QP_MIN;
9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_i_qp_max             = DEFAULT_QP_MAX;
9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_p_qp_min             = DEFAULT_QP_MIN;
9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_p_qp_max             = DEFAULT_QP_MAX;
9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_b_qp_min             = DEFAULT_QP_MIN;
9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_b_qp_max             = DEFAULT_QP_MAX;
9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_air                  = DEFAULT_AIR;
9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_air_refresh_period   = DEFAULT_AIR_REFRESH_PERIOD;
9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_srch_rng_x           = DEFAULT_SRCH_RNG_X;
9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_srch_rng_y           = DEFAULT_SRCH_RNG_Y;
9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_i_interval           = DEFAULT_I_INTERVAL;
9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_idr_interval         = DEFAULT_IDR_INTERVAL;
9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_disable_deblk_level  = DEFAULT_DISABLE_DEBLK_LEVEL;
9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_hpel                 = DEFAULT_HPEL;
9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_qpel                 = DEFAULT_QPEL;
9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_enable_intra_4x4     = DEFAULT_I4;
9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->e_profile               = DEFAULT_EPROFILE;
9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_slice_mode           = DEFAULT_SLICE_MODE;
9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_slice_param          = DEFAULT_SLICE_PARAM;
9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->pv_input_thread_handle  = NULL;
9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->pv_output_thread_handle = NULL;
9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->pv_recon_thread_handle  = NULL;
9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_vbv_buf_size         = 0;
9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_vbv_buffer_delay     = 1000;
9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->adbl_psnr[0]            = 0.0;
9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->adbl_psnr[1]            = 0.0;
9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->adbl_psnr[2]            = 0.0;
9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_psnr_cnt             = 0;
9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->pu1_psnr_buf            = NULL;
9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_psnr_buf_size        = 0;
9973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_app_ctxt->u4_entropy_coding_mode  = DEFAULT_ENTROPY_CODING_MODE;
9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_dimensions(app_ctxt_t *ps_app_ctxt,
10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_dimensions_ip_t s_frame_dimensions_ip;
10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_dimensions_op_t s_frame_dimensions_op;
10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_DIMENSIONS;
10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.u4_ht = ps_app_ctxt->u4_ht;
10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.u4_wd = ps_app_ctxt->u4_wd;
10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_ip.s_ive_ip.u4_size =
10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    sizeof(ih264e_ctl_set_dimensions_ip_t);
10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_dimensions_op.s_ive_op.u4_size =
10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    sizeof(ih264e_ctl_set_dimensions_op_t);
10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,
10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 &s_frame_dimensions_ip,
10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 &s_frame_dimensions_op);
10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set frame dimensions = 0x%x\n",
10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_frame_dimensions_op.s_ive_op.u4_error_code);
10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_frame_rate(app_ctxt_t *ps_app_ctxt,
10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_frame_rate_ip_t s_frame_rate_ip;
10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_frame_rate_op_t s_frame_rate_op;
10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_FRAMERATE;
10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.u4_src_frame_rate  =
10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->u4_src_frame_rate;
10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.u4_tgt_frame_rate  =
10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->u4_tgt_frame_rate;
10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_frame_rate_ip_t);
10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_rate_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_frame_rate_op_t);
10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_frame_rate_ip,&s_frame_rate_op);
10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       {
10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           CHAR ac_error[STRLENGTH];
10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           sprintf(ac_error, "Unable to set frame rate = 0x%x\n",
10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   s_frame_rate_op.s_ive_op.u4_error_code);
10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           codec_exit(ac_error);
10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       }
10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       return;
10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_ipe_params(app_ctxt_t *ps_app_ctxt,
10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_ipe_params_ip_t s_ipe_params_ip;
10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_ipe_params_op_t s_ipe_params_op;
10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_IPE_PARAMS;
10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.u4_enable_intra_4x4  = ps_app_ctxt->u4_enable_intra_4x4;
10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.u4_enc_speed_preset  = ps_app_ctxt->u4_enc_speed;
10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_ipe_params_ip_t);
10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_ipe_params_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_ipe_params_op_t);
10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_ipe_params_ip,&s_ipe_params_op);
10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set ipe params = 0x%x\n",
10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_ipe_params_op.s_ive_op.u4_error_code);
10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_bit_rate(app_ctxt_t *ps_app_ctxt,
11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_bitrate_ip_t s_bitrate_ip;
11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_bitrate_op_t s_bitrate_op;
11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_BITRATE;
11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.u4_target_bitrate  =   ps_app_ctxt->u4_bitrate;
11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_bitrate_ip_t);
11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_bitrate_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_bitrate_op_t);
11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_bitrate_ip,&s_bitrate_op);
11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       {
11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           CHAR ac_error[STRLENGTH];
11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           sprintf(ac_error, "Unable to set bit rate = 0x%x\n",
11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   s_bitrate_op.s_ive_op.u4_error_code);
11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           codec_exit(ac_error);
11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       }
11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       return;
11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_frame_type(app_ctxt_t *ps_app_ctxt,
11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high,
11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    IV_PICTURE_CODING_TYPE_T  e_frame_type)
11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_frame_type_ip_t s_frame_type_ip;
11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_frame_type_op_t s_frame_type_op;
11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_FRAMETYPE;
11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.e_frame_type  =   e_frame_type;
11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_frame_type_ip_t);
11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_frame_type_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_frame_type_op_t);
11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_frame_type_ip,&s_frame_type_op);
11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set frame type = 0x%x\n",
11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_frame_type_op.s_ive_op.u4_error_code);
11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_qp(app_ctxt_t *ps_app_ctxt,
11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_qp_ip_t s_qp_ip;
11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_qp_op_t s_qp_op;
11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_QP;
11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_i_qp = ps_app_ctxt->u4_i_qp;
11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_i_qp_max = ps_app_ctxt->u4_i_qp_max;
11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_i_qp_min = ps_app_ctxt->u4_i_qp_min;
11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_p_qp = ps_app_ctxt->u4_p_qp;
11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_p_qp_max = ps_app_ctxt->u4_p_qp_max;
11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_p_qp_min = ps_app_ctxt->u4_p_qp_min;
11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_b_qp = ps_app_ctxt->u4_b_qp;
11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_b_qp_max = ps_app_ctxt->u4_b_qp_max;
11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_b_qp_min = ps_app_ctxt->u4_b_qp_min;
11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_qp_ip_t);
11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_qp_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_qp_op_t);
11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_qp_ip,&s_qp_op);
11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       {
11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           CHAR ac_error[STRLENGTH];
11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           sprintf(ac_error, "Unable to set qp 0x%x\n",
11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   s_qp_op.s_ive_op.u4_error_code);
11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           codec_exit(ac_error);
11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       }
11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       return;
12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_enc_mode(app_ctxt_t *ps_app_ctxt,
12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high,
12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                  IVE_ENC_MODE_T e_enc_mode)
12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_enc_mode_ip_t s_enc_mode_ip;
12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_enc_mode_op_t s_enc_mode_op;
12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_ENC_MODE;
12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.e_enc_mode = e_enc_mode;
12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_enc_mode_ip_t);
12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_enc_mode_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_enc_mode_op_t);
12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_enc_mode_ip,
12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      &s_enc_mode_op);
12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set in header encode mode = 0x%x\n",
12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_enc_mode_op.s_ive_op.u4_error_code);
12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_vbv_params(app_ctxt_t *ps_app_ctxt,
12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_vbv_params_ip_t s_vbv_ip;
12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_vbv_params_op_t s_vbv_op;
12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_VBV_PARAMS;
12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.u4_vbv_buf_size = ps_app_ctxt->u4_vbv_buf_size;
12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.u4_vbv_buffer_delay  =
12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->u4_vbv_buffer_delay;
12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_vbv_params_ip_t);
12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_vbv_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_vbv_params_op_t);
12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_vbv_ip,&s_vbv_op);
12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set VBC params = 0x%x\n",
12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_vbv_op.s_ive_op.u4_error_code);
12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_air_params(app_ctxt_t *ps_app_ctxt,
12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_air_params_ip_t s_air_ip;
12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_air_params_op_t s_air_op;
12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.e_cmd  =   IVE_CMD_VIDEO_CTL;
12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.e_sub_cmd  =   IVE_CMD_CTL_SET_AIR_PARAMS;
12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.e_air_mode = ps_app_ctxt->u4_air;
12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.u4_air_refresh_period = ps_app_ctxt->u4_air_refresh_period;
12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.u4_timestamp_high  =   u4_timestamp_high;
12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.u4_timestamp_low   =   u4_timestamp_low;
12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_ip.s_ive_ip.u4_size    =   sizeof(ih264e_ctl_set_air_params_ip_t);
12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_air_op.s_ive_op.u4_size    =   sizeof(ih264e_ctl_set_air_params_op_t);
12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc,&s_air_ip,&s_air_op);
12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       {
12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           CHAR ac_error[STRLENGTH];
12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           sprintf(ac_error, "Unable to set air params = 0x%x\n",
12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                   s_air_op.s_ive_op.u4_error_code);
12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S           codec_exit(ac_error);
12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       }
12958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S       return;
12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_me_params(app_ctxt_t *ps_app_ctxt,
12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_me_params_ip_t s_me_params_ip;
13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_me_params_op_t s_me_params_op;
13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_ME_PARAMS;
13098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_enable_fast_sad = ps_app_ctxt->u4_enable_fast_sad;
13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_enable_alt_ref = ps_app_ctxt->u4_enable_alt_ref;
13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_enable_hpel  =   ps_app_ctxt->u4_hpel;
13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_enable_qpel  =   ps_app_ctxt->u4_qpel;
13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_me_speed_preset  =   ps_app_ctxt->u4_me_speed;
13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_srch_rng_x   =   ps_app_ctxt->u4_srch_rng_x;
13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_srch_rng_y   =   ps_app_ctxt->u4_srch_rng_y;
13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_me_params_ip_t);
13238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_me_params_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_me_params_op_t);
13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_me_params_ip,
13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                 &s_me_params_op);
13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set me params = 0x%x\n",
13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_me_params_op.s_ive_op.u4_error_code);
13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_gop_params(app_ctxt_t *ps_app_ctxt,
13398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
13428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_gop_params_ip_t s_gop_params_ip;
13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_gop_params_op_t s_gop_params_op;
13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_GOP_PARAMS;
13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.u4_i_frm_interval = ps_app_ctxt->u4_i_interval;
13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.u4_idr_frm_interval = ps_app_ctxt->u4_idr_interval;
13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_gop_params_ip_t);
13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_gop_params_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_gop_params_op_t);
13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_gop_params_ip,
13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      &s_gop_params_op);
13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set ME params = 0x%x\n",
13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_gop_params_op.s_ive_op.u4_error_code);
13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_profile_params(app_ctxt_t *ps_app_ctxt,
13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_profile_params_ip_t s_profile_params_ip;
13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_profile_params_op_t s_profile_params_op;
13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_PROFILE_PARAMS;
13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.e_profile = ps_app_ctxt->e_profile;
13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    s_profile_params_ip.s_ive_ip.u4_entropy_coding_mode = ps_app_ctxt->u4_entropy_coding_mode;
13863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_profile_params_ip_t);
13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_profile_params_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_profile_params_op_t);
13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_profile_params_ip,
13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      &s_profile_params_op);
13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to set profile params = 0x%x\n",
13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_profile_params_op.s_ive_op.u4_error_code);
14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid set_deblock_params(app_ctxt_t *ps_app_ctxt,
14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_low,
14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    UWORD32 u4_timestamp_high)
14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status;
14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_deblock_params_ip_t s_deblock_params_ip;
14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_ctl_set_deblock_params_op_t s_deblock_params_op;
14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_DEBLOCK_PARAMS;
14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.u4_disable_deblock_level =
14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->u4_disable_deblk_level;
14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_deblock_params_ip_t);
14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_deblock_params_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_deblock_params_op_t);
14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_deblock_params_ip,
14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                      &s_deblock_params_op);
14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(status != IV_SUCCESS)
14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_error[STRLENGTH];
14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to enable/disable deblock params = 0x%x\n",
14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_deblock_params_op.s_ive_op.u4_error_code);
14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PEAK_WINDOW_SIZE    8
14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid synchronous_encode(iv_obj_t *ps_enc, app_ctxt_t *ps_app_ctxt)
14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_video_encode_ip_t ih264e_video_encode_ip;
14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ih264e_video_encode_op_t ih264e_video_encode_op;
14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ive_video_encode_ip_t *ps_video_encode_ip = &ih264e_video_encode_ip.s_ive_ip;
14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ive_video_encode_op_t *ps_video_encode_op = &ih264e_video_encode_op.s_ive_op;
14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    iv_raw_buf_t *ps_inp_raw_buf = &ps_video_encode_ip->s_inp_buf;
14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status = IV_SUCCESS;
14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 i, is_last = 0, buff_size = 0, num_bytes = 0;
14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_total_time = 0;
14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_buf = NULL;
14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_timestamp_low, u4_timestamp_high;
14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    void *pv_mb_info = NULL, *pv_pic_info = NULL;
14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    TIMER curtime ;
14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef WINDOWS_TIMER
14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    TIMER frequency;
14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 peak_window[PEAK_WINDOW_SIZE] = {0};
14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 peak_window_idx = 0;
14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 peak_avg_max = 0, timetaken = 0;
14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    iv_raw_buf_t s_inp_buf, s_recon_buf;
14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR ac_error[STRLENGTH];
14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 end_of_frames=0;
14683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 i4_inp_done =0;
14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_timestamp_low = 0;
14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_timestamp_high = 0;
14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                         Allocate I/O Buffers                          */
14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    allocate_input(ps_app_ctxt);
14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    allocate_output(ps_app_ctxt);
14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    allocate_recon(ps_app_ctxt);
14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* init psnr */
14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    init_psnr(ps_app_ctxt);
14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* open file pointers */
14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_ip = fopen(ps_app_ctxt->ac_ip_fname, "rb");
14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(NULL == ps_app_ctxt->fp_ip)
14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to open input file for reading: %s", ps_app_ctxt->ac_ip_fname);
14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit(ac_error);
14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->fp_op = fopen(ps_app_ctxt->ac_op_fname, "wb");
14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(NULL == ps_app_ctxt->fp_op)
14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to open output file for writing: %s", ps_app_ctxt->ac_op_fname);
14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        invalid_argument_exit(ac_error);
14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_recon_enable)
14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->fp_recon = fopen(ps_app_ctxt->ac_recon_fname, "wb");
15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == ps_app_ctxt->fp_recon)
15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to open recon file for writing: %s", ps_app_ctxt->ac_recon_fname);
15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            invalid_argument_exit(ac_error);
15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_chksum_enable)
15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->fp_chksum               = fopen(ps_app_ctxt->ac_chksum_fname, "wb");
15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == ps_app_ctxt->fp_chksum)
15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to open checksum file for writing: %s", ps_app_ctxt->ac_chksum_fname);
15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            invalid_argument_exit(ac_error);
15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* If PSNR is enabled, open input file again and hold a different file pointer
15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * This makes it easy to compute PSNR without adding dependency between input and recon threads
15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     */
15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_psnr_enable)
15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->fp_psnr_ip              = fopen(ps_app_ctxt->ac_ip_fname, "rb");
15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == ps_app_ctxt->fp_psnr_ip)
15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to open input file for reading: %s", ps_app_ctxt->ac_ip_fname);
15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            invalid_argument_exit(ac_error);
15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(0 != ps_app_ctxt->u4_mb_info_type)
15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->fp_mb_info  = fopen(ps_app_ctxt->ac_mb_info_fname, "rb");
15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == ps_app_ctxt->fp_mb_info)
15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to open MB info file for reading: %s", ps_app_ctxt->ac_mb_info_fname);
15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            invalid_argument_exit(ac_error);
15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if (ps_app_ctxt->u4_pic_info_type)
15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->fp_pic_info  = fopen(ps_app_ctxt->ac_pic_info_fname, "rb");
15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(NULL == ps_app_ctxt->fp_pic_info)
15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to open Pic info file for reading: %s", ps_app_ctxt->ac_pic_info_fname);
15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            invalid_argument_exit(ac_error);
15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    GETTIME(&ps_app_ctxt->enc_start_time);
15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->enc_last_time = ps_app_ctxt->enc_start_time;
15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(1)
15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /****************** Input Initialization **************************************/
15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < DEFAULT_MAX_INPUT_BUFS; i++)
15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_app_ctxt->as_input_buf[i].u4_is_free)
15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_buf = ps_app_ctxt->as_input_buf[i].pu1_buf;
15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pv_mb_info = ps_app_ctxt->as_input_buf[i].pv_mb_info;
15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pv_pic_info = ps_app_ctxt->as_input_buf[i].pv_pic_info;
15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_app_ctxt->as_input_buf[i].u4_is_free = 0;
15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i == DEFAULT_MAX_INPUT_BUFS)
15733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
15743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            printf("\n Unable to find a free input buffer!!");
15753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            exit(0);
15763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
15773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_size = sizeof(ih264e_video_encode_ip_t);
15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_op->u4_size = sizeof(ih264e_video_encode_op_t);
15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->e_cmd = IVE_CMD_VIDEO_ENCODE;
15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->pv_bufs = pu1_buf;
15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->pv_mb_info = pv_mb_info;
15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->pv_pic_info = pv_pic_info;
15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_pic_info_type = ps_app_ctxt->u4_pic_info_type;
15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*
15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         * Since the buffers are used for reading,
15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         * And after each row we have a stride we nned to calculate
15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         * the luma size according to the stride
15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S         */
15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_inp_raw_buf->e_color_fmt = ps_app_ctxt->e_inp_color_fmt;
15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Initialize for 420SP */
15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(IV_YUV_420SP_UV == ps_app_ctxt->e_inp_color_fmt||
15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        IV_YUV_420SP_VU == ps_app_ctxt->e_inp_color_fmt)
15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*init luma buffer*/
15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*Init chroma buffer*/
1601cf91c87b25ad49fc7e307932754d188e3ba2a479Harish Mahendrakar            pu1_buf += ps_app_ctxt->u4_strd * ps_app_ctxt->u4_ht;
16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[1] = pu1_buf;
16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[0] =  ps_app_ctxt->u4_wd;
16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[1] =  ps_app_ctxt->u4_wd;
16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[0] =  ps_app_ctxt->u4_ht;
16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[1] =  ps_app_ctxt->u4_ht / 2;
16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[0] =  ps_app_ctxt->u4_strd;
16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[1] =  ps_app_ctxt->u4_strd;
16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else if(IV_YUV_420P == ps_app_ctxt->e_inp_color_fmt)
16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* init buffers */
16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
16173a52efd36102c9a4cb8e8f23b6f9131b8b01eef5Harish Mahendrakar            pu1_buf += (ps_app_ctxt->u4_wd) * ps_app_ctxt->u4_ht;
16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[1] = pu1_buf;
16193a52efd36102c9a4cb8e8f23b6f9131b8b01eef5Harish Mahendrakar            pu1_buf += (ps_app_ctxt->u4_wd >> 1) * (ps_app_ctxt->u4_ht >> 1);
16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[2] = pu1_buf;
16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[0] =  ps_app_ctxt->u4_wd;
16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[1] =  ps_app_ctxt->u4_wd / 2;
16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[2] =  ps_app_ctxt->u4_wd / 2;
16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[0] =  ps_app_ctxt->u4_ht;
16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[1] =  ps_app_ctxt->u4_ht / 2;
16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[2] =  ps_app_ctxt->u4_ht / 2;
16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[0] =  ps_app_ctxt->u4_strd;
16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[1] =  ps_app_ctxt->u4_strd / 2;
16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[2] =  ps_app_ctxt->u4_strd / 2;
16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else if(IV_YUV_422ILE == ps_app_ctxt->e_inp_color_fmt)
16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*init luma buffer*/
16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_wd[0] =  ps_app_ctxt->u4_wd * 2;
16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_ht[0] =  ps_app_ctxt->u4_ht;
16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->au4_strd[0] = ps_app_ctxt->u4_strd *2;
16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*
16483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * Here we read input and other associated buffers. Regardless of success
16493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * we will proceed from here as we will need extra calls to flush out
16503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * input queue in encoder. Note that this is not necessary. You can just
16513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * send encode calls till with valid output and recon buffers till the
16523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * queue is flushed.
16533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         */
16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        while(1)
16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            IV_STATUS_T mb_info_status = IV_SUCCESS, pic_info_status = IV_SUCCESS;
16573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            status = read_input(ps_app_ctxt->fp_ip, ps_inp_raw_buf);
16593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if (ps_app_ctxt->u4_mb_info_type != 0)
16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                mb_info_status = read_mb_info(ps_app_ctxt, pv_mb_info);
16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if (ps_app_ctxt->u4_pic_info_type != 0)
16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pic_info_status = read_pic_info(ps_app_ctxt, pv_pic_info);
16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if((IV_SUCCESS != status) || (IV_SUCCESS != mb_info_status)
16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            || (IV_SUCCESS != pic_info_status))
16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(0 == ps_app_ctxt->u4_loopback)
16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    is_last = 1;
16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    break;
16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    fseek(ps_app_ctxt->fp_ip, 0, SEEK_SET);
16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            break;
16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /****************** Output Initialization *************************************/
16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < DEFAULT_MAX_OUTPUT_BUFS; i++)
16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_app_ctxt->as_output_buf[i].u4_is_free)
16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                pu1_buf = ps_app_ctxt->as_output_buf[i].pu1_buf;
16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                buff_size = ps_app_ctxt->as_output_buf[i].u4_buf_size;
16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_app_ctxt->as_output_buf[i].u4_is_free = 0;
16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->s_out_buf.pv_buf = pu1_buf;
16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->s_out_buf.u4_bytes = 0;
16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->s_out_buf.u4_bufsize = buff_size;
16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /****************** Recon Initialization **************************************/
17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        init_raw_buf_descr(ps_app_ctxt, &s_recon_buf, ps_app_ctxt->as_recon_buf[0].pu1_buf, ps_app_ctxt->e_recon_color_fmt);
17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_app_ctxt->u4_psnr_enable)
17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            init_raw_buf_descr(ps_app_ctxt, &s_inp_buf, ps_app_ctxt->pu1_psnr_buf, ps_app_ctxt->e_inp_color_fmt);
17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->s_recon_buf = s_recon_buf;
17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /************************* Un Initialized *************************************/
17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(0 == ps_app_ctxt->u4_loopback)
17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* If input file is read completely and loopback is not enabled,
17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             *  then exit the loop */
17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(feof(ps_app_ctxt->fp_ip))
17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                is_last = 1;
17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* If last frame, send input null to get back encoded frames */
17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if ( is_last == 1 || ((ps_app_ctxt->u4_max_num_frms) <= u4_timestamp_low) )
17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            is_last = 1;
17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[0] = NULL;
17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[1] = NULL;
17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_inp_raw_buf->apv_bufs[2] = NULL;
17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_is_last = is_last;
17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_mb_info_type = ps_app_ctxt->u4_mb_info_type;
17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_pic_info_type = ps_app_ctxt->u4_pic_info_type;;
17363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_video_encode_op->s_out_buf.pv_buf= NULL;
17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_timestamp_high = u4_timestamp_high;
17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_video_encode_ip->u4_timestamp_low = u4_timestamp_low;
17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        GETTIME(&ps_app_ctxt->enc_last_time);
17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, &ih264e_video_encode_ip, &ih264e_video_encode_op);
17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if (IV_SUCCESS != status)
17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            printf("Encode Frame failed = 0x%x\n", ih264e_video_encode_op.s_ive_op.u4_error_code);
17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            break;
17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef WINDOWS_TIMER
17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        QueryPerformanceFrequency ( &frequency);
17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        GETTIME(&curtime);
17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ELAPSEDTIME(ps_app_ctxt->enc_last_time, curtime, timetaken, frequency);
17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_app_ctxt->enc_last_time = curtime;
17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef PROFILE_ENABLE
17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD32 peak_avg, id;
17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u4_total_time += timetaken;
17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            peak_window[peak_window_idx++] = timetaken;
17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(peak_window_idx == PEAK_WINDOW_SIZE)
17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                peak_window_idx = 0;
17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            peak_avg = 0;
17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(id = 0; id < PEAK_WINDOW_SIZE; id++)
17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                peak_avg += peak_window[id];
17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            peak_avg /= PEAK_WINDOW_SIZE;
17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if (peak_avg > peak_avg_max)
17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                peak_avg_max = peak_avg;
17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /****************** Writing Output ********************************************/
17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /******************************************************************************/
17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        num_bytes = 0;
17803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(1 == ps_video_encode_op->output_present)
17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            num_bytes = ps_video_encode_op->s_out_buf.u4_bytes;
17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            buff_size = ps_video_encode_op->s_out_buf.u4_bufsize;
17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu1_buf = (UWORD8*)ps_video_encode_op->s_out_buf.pv_buf;
17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            status = write_output(ps_app_ctxt->fp_op, pu1_buf, num_bytes);
17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(IV_SUCCESS != status)
17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                printf("Error: Unable to write to output file\n");
17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
17933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
17953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* free input bufer if codec returns a valid input buffer */
17963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_video_encode_op->s_inp_buf.apv_bufs[0])
17973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Reuse of freed input buffer */
17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i = 0; i < DEFAULT_MAX_INPUT_BUFS; i++)
18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_app_ctxt->as_input_buf[i].pu1_buf == ps_video_encode_op->s_inp_buf.apv_bufs[0])
18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->as_input_buf[i].u4_is_free = 1;
18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    break;
18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* free output buffer if codec returns a valid output buffer */
18103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        // if(ps_video_encode_op->s_out_buf.pv_buf)
18113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i = 0; i < DEFAULT_MAX_OUTPUT_BUFS; i++)
18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(ps_app_ctxt->as_output_buf[i].pu1_buf == ps_video_encode_op->s_out_buf.pv_buf)
18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_app_ctxt->as_output_buf[i].u4_is_free = 1;
18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    break;
18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /**********************************************************************
18233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  Print stats
18243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         **********************************************************************/
18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
18263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_pic_type[][5] =
18273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                { "IDR", "I", "P", "B", "NA" };
18283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD32 lookup_idx = 0;
18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            == IV_IDR_FRAME)
18323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                lookup_idx = 0;
18343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else if(ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            == IV_I_FRAME)
18373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                lookup_idx = 1;
18393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else if(ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            == IV_P_FRAME)
18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
18433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                lookup_idx = 2;
18443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else if(ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            == IV_B_FRAME)
18473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                lookup_idx = 3;
18493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else if(ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            == IV_NA_FRAME)
18523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                lookup_idx = 4;
18543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ih264e_video_encode_op.s_ive_op.u4_encoded_frame_type
18573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            != IV_NA_FRAME)
18583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_app_ctxt->u4_pics_cnt++;
18603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_app_ctxt->avg_time = u4_total_time / ps_app_ctxt->u4_pics_cnt;
18613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_app_ctxt->u4_total_bytes += num_bytes;
18623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ps_app_ctxt->u4_psnr_enable == 0)
18653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                printf("[%s] PicNum %4d Bytes Generated %6d TimeTaken(microsec): %6d AvgTime: %6d PeakAvgTimeMax: %6d\n",
18673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                       u1_pic_type[lookup_idx], ps_app_ctxt->u4_pics_cnt,
18683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                       num_bytes, timetaken, ps_app_ctxt->avg_time,
18693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                       peak_avg_max);
18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
18713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
18743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* For psnr computation, we need to read the correct input frame and
18753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * compare with recon. The difficulty with doing it is that we only know
18763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * that the frame number of recon is monotonically increasing. There
18773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * may be gaps in the recon if any pre or post enc skip happens. There are
18783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         * 3 senarios
18793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  1) A frame is encoded -> returns the pic type
18803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  2) A frame is not encoded -> Encoder is waiting, the frame may get
18813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     encoded later
18823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  3) A frame is not encoded -> A post enc or pre enc skip happend. The
18833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     frame is not going to be encoded
18843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *
18853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     The 1st and 2nd scenarios are easy, since we just needs to increment
18863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     recon cnt whenever we get a valid recon. This cnt can we used to
18873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     sync the recon and input
18883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     3rd scenario in conjuction with 2nd will pose problems. Even if
18893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     the returning frame is NA, we donot know we should increment the
18903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *     recon cnt or not becasue it can be case 2 or case 3.
18913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *
18923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  Solutions:
18933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *  -------------------------
18943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   One way to over come this will be to return more information as of
18953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   the frame type. We can send if a frame was skipped as a part of the
18963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   return frame type.
18973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   This will not work. Since the output and recon are not in sync, we
18983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   cannot use the current output frame type to determine if a recon
18993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   is present currently or not. We need some other way to acheive this.
19003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *
19013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   Other way to do this which is cleaner and maintains the seperation
19023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   between recon and the ouptut is to set the width [& height] of output recon
19033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   buffer to be zero. Hence we will in effect be saying :"look there
19043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   is a recon, but due to frame not being encoded it is having a width 0".
19053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   To be more clear we need to make height also to be zero.
19063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *
19073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   But are we using these variables for allocating and deallocating
19083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   the buffers some where ? No we are not. The buffer gets re-init
19093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   at every encode call
19103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *
19113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   Fixes
19123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   ------------------------
19133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   Currently the recon buff width and height are set in the encoder.
19143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   This will not work now because since recon and input are not
19153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   in sync. Hence a recon buff sent at time stamp x will get used to
19163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   fill recon of input at time stamp y (x > y). If we reduced the
19173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   frame dimensions in between, the recon buffer will not have enough
19183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   space. Hence we need to set the with and height appropriatley inside
19193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         *   lib itself.
19203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         */
19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_app_ctxt->u4_recon_enable || ps_app_ctxt->u4_chksum_enable
19233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        || ps_app_ctxt->u4_psnr_enable)
19243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ps_video_encode_op->dump_recon)
19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                s_recon_buf = ps_video_encode_op->s_recon_buf;
19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Read input for psnr computuation */
19303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (ps_app_ctxt->u4_psnr_enable)
19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    read_input(ps_app_ctxt->fp_psnr_ip, &s_inp_buf);
19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* if we have a valid recon buffer do the assocated tasks */
19343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (s_recon_buf.au4_wd[0])
19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
19363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* Dump recon when enabled, and output bytes != 0 */
19373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (ps_app_ctxt->u4_recon_enable)
19383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
19393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        status = write_recon(ps_app_ctxt->fp_recon, &s_recon_buf);
19403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        if (IV_SUCCESS != status)
19413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        {
19423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            printf("Error: Unable to write to recon file\n");
19433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            break;
19443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        }
19453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (ps_app_ctxt->u4_psnr_enable)
19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
19493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        compute_psnr(ps_app_ctxt, &s_recon_buf, &s_inp_buf);
19503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
19518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (ps_app_ctxt->u4_chksum_enable)
19543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
19553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        WORD32 comp, num_comp = 2;
19563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        if (IV_YUV_420P == s_recon_buf.e_color_fmt)
19583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            num_comp = 3;
19593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        for (comp = 0; comp < num_comp; comp++)
19613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        {
19623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            UWORD8 au1_chksum[16];
19633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            calc_md5_cksum((UWORD8 *)s_recon_buf.apv_bufs[comp],
19643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           s_recon_buf.au4_strd[comp],
19653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           s_recon_buf.au4_wd[comp],
19663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           s_recon_buf.au4_ht[comp],
19673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           au1_chksum);
19683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            fwrite(au1_chksum, sizeof(UWORD8), 16, ps_app_ctxt->fp_chksum);
19693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        }
19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_timestamp_low++;
19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Break if all the encoded frames are taken from encoder */
19783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (1 == ps_video_encode_op->u4_is_last)
19793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            break;
19813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Pic count is 1 more than actual num frames encoded, because last call is to just get the output  */
19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_app_ctxt->u4_pics_cnt--;
19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_app_ctxt->u4_psnr_enable)
19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        print_average_psnr(ps_app_ctxt);
19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* house keeping operations */
19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    fclose(ps_app_ctxt->fp_ip);
19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    fclose(ps_app_ctxt->fp_op);
19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_recon_enable)
19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(ps_app_ctxt->fp_recon);
19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_chksum_enable)
20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(ps_app_ctxt->fp_chksum);
20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(1 == ps_app_ctxt->u4_psnr_enable)
20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(ps_app_ctxt->fp_psnr_ip);
20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(0 != ps_app_ctxt->u4_mb_info_type)
20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(ps_app_ctxt->fp_mb_info);
20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if (ps_app_ctxt->u4_pic_info_type)
20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(ps_app_ctxt->fp_pic_info);
20158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    free_input(ps_app_ctxt);
20188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    free_output(ps_app_ctxt);
20198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    free_recon(ps_app_ctxt);
20208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
20218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
20238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : main                                                     */
20258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : Application to demonstrate codec API                     */
20278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : argc    - Number of arguments                            */
20308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  argv[]  - Arguments                                      */
20318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Globals       :                                                          */
20328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    : Shows how to use create, process, control and delete     */
20338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Codec output in a file                                   */
20358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       :                                                          */
20368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Issues        : Assumes both PROFILE_ENABLE to be                        */
20388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                  defined for multithread decode-display working           */
20398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
20418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
20428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes                              */
20438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         20 11 2013   100189          Initial Version                      */
20448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
20458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef IOS
20467497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakarint h264enc_main(char * homedir,char *documentdir, int screen_wd, int screen_ht)
20478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#else
20488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sint main(int argc, char *argv[])
20498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
20508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
20518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Config Parameters for Encoding */
20528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    app_ctxt_t s_app_ctxt;
20538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* error string */
20558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR ac_error[STRLENGTH];
20568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* config file name */
20588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR ac_cfg_fname[STRLENGTH];
20598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* error status */
20618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    IV_STATUS_T status = IV_SUCCESS;
20623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#ifdef IOS
20638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* temp var */
20648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    CHAR filename_with_path[STRLENGTH];
20653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#endif
20668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 num_mem_recs;
20678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    iv_obj_t *ps_enc;
20688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i;
20698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    FILE *fp_cfg = NULL;
20708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef X86_MINGW
20728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* For getting printfs without any delay in eclipse */
20748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    setvbuf(stdout, NULL, _IONBF, 0);
20758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    setvbuf(stderr, NULL, _IONBF, 0);
20768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
20788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    init_default_params(&s_app_ctxt);
20808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef IOS
20828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Usage */
20848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(argc < 2)
20858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
20868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Using enc.cfg as configuration file \n");
20878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        strcpy(ac_cfg_fname, "enc.cfg");
20888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else if(argc == 2)
20908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2091c4355642ba8504d2fcfe3431ee9367d050e1c436Martin Storsjo        if (!strcmp(argv[1], "--help"))
2092c4355642ba8504d2fcfe3431ee9367d050e1c436Martin Storsjo        {
2093c4355642ba8504d2fcfe3431ee9367d050e1c436Martin Storsjo            print_usage();
2094c4355642ba8504d2fcfe3431ee9367d050e1c436Martin Storsjo            exit(-1);
2095c4355642ba8504d2fcfe3431ee9367d050e1c436Martin Storsjo        }
20968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        strcpy(ac_cfg_fname, argv[1]);
20978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
20988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
20997497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar#else
21007497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    strcpy(ac_cfg_fname, "test.cfg");
21017497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar
21028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
21038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
21058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Parse arguments                                                       */
21068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
21078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef IOS
21098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Read command line arguments */
21118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(argc > 2)
21128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
211385783df9840a6bc58a2a71081990797ac3af0976Martin Storsjo        for(i = 1; i + 1 < argc; i += 2)
21148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
21158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(CONFIG == get_argument(argv[i]))
21168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
21178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                strcpy(ac_cfg_fname, argv[i + 1]);
21188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
21198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
21208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    sprintf(ac_error,
21218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            "Could not open Configuration file %s",
21228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ac_cfg_fname);
21238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    codec_exit(ac_error);
21248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
21258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                read_cfg_file(&s_app_ctxt, fp_cfg);
21268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                fclose(fp_cfg);
21278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
21288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
21298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
21308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                parse_argument(&s_app_ctxt, argv[i], argv[i + 1]);
21318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
21328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
21338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
21348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
21358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
21368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
21378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
21388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Could not open Configuration file %s",
21398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ac_cfg_fname);
21408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
21418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
21428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        read_cfg_file(&s_app_ctxt, fp_cfg);
21438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        fclose(fp_cfg);
21448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
21458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#else
21478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sprintf(filename_with_path, "%s/%s", homedir, "enc.cfg");
21498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if((fp_cfg = fopen(filename_with_path, "r")) == NULL)
21508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
21518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Could not open Configuration file %s",
21528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ac_cfg_fname);
21538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
21548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
21568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    read_cfg_file(&s_app_ctxt, fp_cfg);
21578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    fclose(fp_cfg);
21588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
21608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    validate_params(&s_app_ctxt);
21638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
21668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                      Getting Number of MemRecords                     */
21678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
21688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
21698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_num_mem_rec_ip_t s_num_mem_rec_ip;
21708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_num_mem_rec_op_t s_num_mem_rec_op;
21718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_num_mem_rec_ip.s_ive_ip.u4_size = sizeof(ih264e_num_mem_rec_ip_t);
21738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_num_mem_rec_op.s_ive_op.u4_size = sizeof(ih264e_num_mem_rec_op_t);
21748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_num_mem_rec_ip.s_ive_ip.e_cmd = IV_CMD_GET_NUM_MEM_REC;
21768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(0, &s_num_mem_rec_ip, &s_num_mem_rec_op);
21788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
21808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
21818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Get number of memory records failed = 0x%x\n", s_num_mem_rec_op.s_ive_op.u4_error_code);
21828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
21838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
21848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_app_ctxt.u4_num_mem_rec = num_mem_recs = s_num_mem_rec_op.s_ive_op.u4_num_mem_rec;
21868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
21878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Allocate array to hold memory records */
21898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    s_app_ctxt.ps_mem_rec = (iv_mem_rec_t *) malloc(num_mem_recs * sizeof(iv_mem_rec_t));
21908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(NULL == s_app_ctxt.ps_mem_rec)
21918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
21928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        sprintf(ac_error, "Unable to allocate memory for hold memory records: Size %d", (WORD32)(num_mem_recs * sizeof(iv_mem_rec_t)));
21948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        codec_exit(ac_error);
21958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
21968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
21978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
21988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        iv_mem_rec_t *ps_mem_rec;
21998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_mem_rec = s_app_ctxt.ps_mem_rec;
22008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < num_mem_recs; i++)
22018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
22028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->u4_size = sizeof(iv_mem_rec_t);
22038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->pv_base = NULL;
22048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->u4_mem_size = 0;
22058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->u4_mem_alignment = 0;
22068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->e_mem_type = IV_NA_MEM_TYPE;
22078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec++;
22098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
22108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
22118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                      Getting MemRecords Attributes                    */
22148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
22168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_fill_mem_rec_ip_t s_fill_mem_rec_ip;
22178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_fill_mem_rec_op_t s_fill_mem_rec_op;
22188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_size = sizeof(ih264e_fill_mem_rec_ip_t);
22208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_op.s_ive_op.u4_size = sizeof(ih264e_fill_mem_rec_op_t);
22218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.e_cmd = IV_CMD_FILL_NUM_MEM_REC;
22238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
22248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_num_mem_rec = s_app_ctxt.u4_num_mem_rec;
22258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
22268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
22278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_level = s_app_ctxt.u4_max_level;
22288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.e_color_format = DEFAULT_INP_COLOR_FMT;
22298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_ref_cnt = DEFAULT_MAX_REF_FRM;
22308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_reorder_cnt = DEFAULT_MAX_REORDER_FRM;
22318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_srch_rng_x = DEFAULT_MAX_SRCH_RANGE_X;
22328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_fill_mem_rec_ip.s_ive_ip.u4_max_srch_rng_y = DEFAULT_MAX_SRCH_RANGE_Y;
22338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(0, &s_fill_mem_rec_ip, &s_fill_mem_rec_op);
22358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
22378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
22388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Fill memory records failed = 0x%x\n",
22398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_fill_mem_rec_op.s_ive_op.u4_error_code);
22408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
22418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
22428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
22438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                      Allocating Memory for Mem Records                */
22468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
22488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 total_size;
22498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        iv_mem_rec_t *ps_mem_rec;
22508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        total_size = 0;
22518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_mem_rec = s_app_ctxt.ps_mem_rec;
22538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < num_mem_recs; i++)
22548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
22558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec->pv_base = ih264a_aligned_malloc(ps_mem_rec->u4_mem_alignment,
22568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                           ps_mem_rec->u4_mem_size);
22578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_mem_rec->pv_base == NULL)
22588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
22598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                sprintf(ac_error, "Allocation failure for mem record id %d size %d\n",
22608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        i, ps_mem_rec->u4_mem_size);
22618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                codec_exit(ac_error);
22628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
22638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            total_size += ps_mem_rec->u4_mem_size;
22648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec++;
22668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
22678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("\nTotal memory for codec %d\n", total_size);
22688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
22698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                        Codec Instance Creation                        */
22738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
22748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
22758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_init_ip_t s_init_ip;
22768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_init_op_t s_init_op;
22778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_enc = s_app_ctxt.ps_mem_rec[0].pv_base;
22798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_enc->u4_size = sizeof(iv_obj_t);
22808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_enc->pv_fxns = ih264e_api_function;
22818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_app_ctxt.ps_enc = ps_enc;
22828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_size = sizeof(ih264e_init_ip_t);
22848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_op.s_ive_op.u4_size = sizeof(ih264e_init_op_t);
22858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
22868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_cmd = IV_CMD_INIT;
22878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_num_mem_rec = s_app_ctxt.u4_num_mem_rec;
22888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
22898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
22908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
22918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_ref_cnt = DEFAULT_MAX_REF_FRM;
22928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_reorder_cnt = DEFAULT_MAX_REORDER_FRM;
22938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_level = s_app_ctxt.u4_max_level;
22948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_inp_color_fmt = s_app_ctxt.e_inp_color_fmt;
22958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(s_app_ctxt.u4_recon_enable || s_app_ctxt.u4_psnr_enable || s_app_ctxt.u4_chksum_enable)
22968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
22978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            s_init_ip.s_ive_ip.u4_enable_recon           = 1;
22988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
22998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
23008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
23018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            s_init_ip.s_ive_ip.u4_enable_recon           = 0;
23028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
23038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_recon_color_fmt    = s_app_ctxt.e_recon_color_fmt;
23048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_rc_mode            = s_app_ctxt.u4_rc;
23058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_framerate     = s_app_ctxt.u4_max_frame_rate;
23068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_bitrate       = s_app_ctxt.u4_max_bitrate;
23073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        s_init_ip.s_ive_ip.u4_num_bframes       = s_app_ctxt.u4_num_bframes;
23088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_content_type       = IV_PROGRESSIVE;
23098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_srch_rng_x    = DEFAULT_MAX_SRCH_RANGE_X;
23108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_max_srch_rng_y    = DEFAULT_MAX_SRCH_RANGE_Y;
23118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_slice_mode         = s_app_ctxt.u4_slice_mode;
23128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.u4_slice_param       = s_app_ctxt.u4_slice_param;
23138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_arch               = s_app_ctxt.e_arch;
23148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_init_ip.s_ive_ip.e_soc                = s_app_ctxt.e_soc;
23158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, &s_init_ip, &s_init_op);
23178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
23198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
23208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Init memory records failed = 0x%x\n",
23218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_init_op.s_ive_op.u4_error_code);
23228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
23238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
23248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
23258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                        set processor details                          */
23288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
23308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_set_num_cores_ip_t s_ctl_set_num_cores_ip;
23318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_set_num_cores_op_t s_ctl_set_num_cores_op;
23328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
23338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_SET_NUM_CORES;
23348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.u4_num_cores = s_app_ctxt.u4_num_cores;
23358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.u4_timestamp_high = 0;
23368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.u4_timestamp_low = 0;
23378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_set_num_cores_ip_t);
23388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_num_cores_op.s_ive_op.u4_size = sizeof(ih264e_ctl_set_num_cores_op_t);
23408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, (void *) &s_ctl_set_num_cores_ip,
23428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                (void *) &s_ctl_set_num_cores_op);
23438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
23448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
23458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to set processor params = 0x%x\n",
23468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_ctl_set_num_cores_op.s_ive_op.u4_error_code);
23478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
23488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
23498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
23518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                        Get Codec Version                              */
23548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
23568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_getversioninfo_ip_t s_ctl_set_getversioninfo_ip;
23578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_getversioninfo_op_t s_ctl_set_getversioninfo_op;
23588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        CHAR ac_version_string[STRLENGTH];
23598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
23608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_GETVERSION;
23618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_ip.s_ive_ip.pu1_version = (UWORD8 *)ac_version_string;
23628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_ip.s_ive_ip.u4_version_bufsize = sizeof(ac_version_string);
23638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_getversioninfo_ip_t);
23648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_ctl_set_getversioninfo_op.s_ive_op.u4_size = sizeof(ih264e_ctl_getversioninfo_op_t);
23658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, (void *) &s_ctl_set_getversioninfo_ip,
23678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                (void *) &s_ctl_set_getversioninfo_op);
23688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
23698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
23708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to get codec version = 0x%x\n",
23718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_ctl_set_getversioninfo_op.s_ive_op.u4_error_code);
23728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
23738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
23748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("CODEC VERSION %s\n", ac_version_string);
23758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
23768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                      Get I/O Buffer Requirement                       */
23798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
23808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
23818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_getbufinfo_ip_t s_get_buf_info_ip;
23828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_ctl_getbufinfo_op_t s_get_buf_info_op;
23838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.u4_size = sizeof(ih264e_ctl_getbufinfo_ip_t);
23858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_op.s_ive_op.u4_size = sizeof(ih264e_ctl_getbufinfo_op_t);
23868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.e_cmd = IVE_CMD_VIDEO_CTL;
23888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.e_sub_cmd = IVE_CMD_CTL_GETBUFINFO;
23898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
23908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
23918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_get_buf_info_ip.s_ive_ip.e_inp_color_fmt = s_app_ctxt.e_inp_color_fmt;
23928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, &s_get_buf_info_ip, &s_get_buf_info_op);
23948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
23958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if (status != IV_SUCCESS)
23968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
23978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to get I/O buffer requirements = 0x%x\n",
23988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_get_buf_info_op.s_ive_op.u4_error_code);
23998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
24008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
24018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_app_ctxt.s_get_buf_info_op = s_get_buf_info_op;
24028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
24038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Add the following initializations based on the parameters in context      */
24068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Frame dimensions                                     */
24118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24123a52efd36102c9a4cb8e8f23b6f9131b8b01eef5Harish Mahendrakar    s_app_ctxt.u4_strd = s_app_ctxt.u4_wd;
24138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_dimensions(&s_app_ctxt, 0, 0);
24148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Frame rates                                          */
24178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_frame_rate(&s_app_ctxt, 0, 0);
24198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set IPE Params                                           */
24228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_ipe_params(&s_app_ctxt, 0, 0);
24248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Bitrate                                              */
24278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_bit_rate(&s_app_ctxt, 0, 0);
24298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set QP                                                   */
24328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_qp(&s_app_ctxt,0,0);
24348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set AIR params                                           */
24378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_air_params(&s_app_ctxt,0,0);
24398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set VBV params                                           */
24428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_vbv_params(&s_app_ctxt,0,0);
24448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Motion estimation params                             */
24478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_me_params(&s_app_ctxt,0,0);
24498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set GOP params                                           */
24528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_gop_params(&s_app_ctxt, 0, 0);
24548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Deblock params                                       */
24578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_deblock_params(&s_app_ctxt, 0, 0);
24598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control  Set Profile params                                       */
24628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_profile_params(&s_app_ctxt, 0, 0);
24648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*   Video control Set in Encode header mode                                 */
24678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*****************************************************************************/
24688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    set_enc_mode(&s_app_ctxt, 0, 0, IVE_ENC_MODE_PICTURE);
24698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef IOS
24718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Correct file paths */
24727497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_ip_fname);
24738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_ip_fname, filename_with_path);
24748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24757497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_op_fname);
24768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_op_fname, filename_with_path);
24778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24787497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_recon_fname);
24798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_recon_fname, filename_with_path);
24808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24817497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_chksum_fname);
24828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_chksum_fname, filename_with_path);
24838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24847497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_mb_info_fname);
24858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_mb_info_fname, filename_with_path);
24868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24877497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar    sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_pic_info_fname);
24888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    strcpy (s_app_ctxt.ac_pic_info_fname, filename_with_path);
24898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
24908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
24928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*               begin encoding                                          */
24938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
24948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    synchronous_encode(ps_enc, &s_app_ctxt);
24968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
24978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
24988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        DOUBLE bytes_per_frame;
24998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        DOUBLE bytes_per_second;
25008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 achieved_bitrate;
25018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(s_app_ctxt.u4_pics_cnt != 0)
25033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
25048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            bytes_per_frame = (s_app_ctxt.u4_total_bytes) / (s_app_ctxt.u4_pics_cnt);
25053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
25068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        else
25073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
25088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            bytes_per_frame = 0;
25093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
25108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        bytes_per_second = (bytes_per_frame * s_app_ctxt.u4_tgt_frame_rate);
25118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        achieved_bitrate = bytes_per_second * 8;
25138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("\nEncoding Completed\n");
25158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Summary\n");
25168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Input filename                  : %s\n", s_app_ctxt.ac_ip_fname);
25178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Output filename                 : %s\n", s_app_ctxt.ac_op_fname);
25188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Output Width                    : %-4d\n", s_app_ctxt.u4_wd);
25198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Output Height                   : %-4d\n", s_app_ctxt.u4_ht);
25208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Target Bitrate (bps)            : %-4d\n", s_app_ctxt.u4_bitrate);
25218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Achieved Bitrate (bps)          : %-4d\n", achieved_bitrate);
25228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Average Time per Frame          : %-4d\n", s_app_ctxt.avg_time);
25238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        printf("Achieved FPS                    : %-4.2f\n", 1000000.0 / s_app_ctxt.avg_time);
25248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
25258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
25288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*                         Close Codec Instance                         */
25298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
25308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
25318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_retrieve_mem_rec_ip_t s_retrieve_mem_ip;
25328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264e_retrieve_mem_rec_op_t s_retrieve_mem_op;
25338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        iv_mem_rec_t *ps_mem_rec;
25348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_retrieve_mem_ip.s_ive_ip.u4_size =
25358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        sizeof(ih264e_retrieve_mem_rec_ip_t);
25368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_retrieve_mem_op.s_ive_op.u4_size =
25378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        sizeof(ih264e_retrieve_mem_rec_op_t);
25388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_retrieve_mem_ip.s_ive_ip.e_cmd = IV_CMD_RETRIEVE_MEMREC;
25408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        s_retrieve_mem_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
25418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        status = ih264e_api_function(ps_enc, &s_retrieve_mem_ip,
25438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          &s_retrieve_mem_op);
25448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(status != IV_SUCCESS)
25468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
25478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            sprintf(ac_error, "Unable to retrieve memory records = 0x%x\n",
25488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    s_retrieve_mem_op.s_ive_op.u4_error_code);
25498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            codec_exit(ac_error);
25508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
25518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Free memory records */
25538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_mem_rec = s_app_ctxt.ps_mem_rec;
25548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i = 0; i < num_mem_recs; i++)
25558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
25568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264a_aligned_free(ps_mem_rec->pv_base);
25578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_mem_rec++;
25588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
25598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        free(s_app_ctxt.ps_mem_rec);
25618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
25638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return 0;
25658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
25668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
25688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifdef  ANDROID_NDK
25698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sint raise(int a)
25708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
25718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    printf("Divide by zero\n");
25728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return 0;
25738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
25748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid __aeabi_assert(const char *assertion, const char *file, unsigned int line)
25758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
25768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    return;
25778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
25788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif
2579