1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Copyright (C) 2015 The Android Open Source Project
4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Licensed under the Apache License, Version 2.0 (the "License");
6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * you may not use this file except in compliance with the License.
7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * You may obtain a copy of the License at:
8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * http://www.apache.org/licenses/LICENSE-2.0
10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Unless required by applicable law or agreed to in writing, software
12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * distributed under the License is distributed on an "AS IS" BASIS,
13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * See the License for the specific language governing permissions and
15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * limitations under the License.
16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *****************************************************************************
18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  File Name         : main.c                                               */
23aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
24aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description       : Contains an application that demonstrates use of HEVC*/
25aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                      decoder API                                          */
26aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
27aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  List of Functions :                                                      */
28aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
29aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues / Problems : None                                                 */
30aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
31aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History  :                                                      */
32aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
33aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
34aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   Harish          Initial Version                      */
35aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
36aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
37aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* File Includes                                                             */
38aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
39aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <stdio.h>
40aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <string.h>
41aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <stdlib.h>
42aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
43aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef X86_MINGW
44aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <signal.h>
45aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
46aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef IOS
48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <malloc.h>
49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS_DISPLAY
51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "cast_types.h"
52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv_datatypedef.h"
54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv.h"
57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "ivd.h"
58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d.h"
59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "ithread.h"
60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <windows.h>
63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <sys/time.h>
65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ALIGN8(x) ((((x) + 7) >> 3) << 3)
68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define NUM_DISPLAY_BUFFERS 4
69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define DEFAULT_FPS         30
70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ENABLE_DEGRADE 0
73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_DISP_BUFFERS    64
74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define EXTRA_DISP_BUFFERS  0
75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define STRLENGTH 1000
76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//#define TEST_FLUSH
78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define FLUSH_FRM_CNT 100
79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define PATHLENMAX 500
83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanichar filename_with_path[PATHLENMAX];
84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef  LARGE_INTEGER TIMER;
89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct timeval TIMER;
91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef WORD32 TIMER;
94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define GETTIME(timer) QueryPerformanceCounter(timer);
99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define GETTIME(timer) gettimeofday(timer,NULL);
101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ELAPSEDTIME(s_start_timer,s_end_timer, s_elapsed_time, frequency)   \
105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{                                                                           \
106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   TIMER s_temp_time;                                                       \
107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   s_temp_time.LowPart = s_end_timer.LowPart - s_start_timer.LowPart ;      \
108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   s_elapsed_time = (UWORD32) ( ((DOUBLE)s_temp_time.LowPart / (DOUBLE)frequency.LowPart )  * 1000000); \
109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ELAPSEDTIME(s_start_timer,s_end_timer, s_elapsed_time, frequency) \
112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                   s_elapsed_time = ((s_end_timer.tv_sec - s_start_timer.tv_sec) * 1000000) + (s_end_timer.tv_usec - s_start_timer.tv_usec);
113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define GETTIME(timer)
117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ELAPSEDTIME(s_start_timer,s_end_timer, s_elapsed_time, frequency)
118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* Function declarations */
122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef MD5_DISABLE
123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid calc_md5_cksum(UWORD8 *pu1_inbuf, UWORD32 u4_stride, UWORD32 u4_width, UWORD32 u4_height, UWORD8 *pu1_cksum_p);
124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define calc_md5_cksum(a, b, c, d, e)
126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef SDL_DISPLAY
128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* sdl_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sdl_alloc_disp_buffers(void *);
130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sdl_display(void *, WORD32);
131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sdl_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sdl_disp_deinit(void *);
133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sdl_disp_usleep(UWORD32);
134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_COLOR_FORMAT_T sdl_get_color_fmt(void);
135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniUWORD32 sdl_get_stride(void);
136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef INTEL_CE5300
139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* gdl_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid gdl_alloc_disp_buffers(void *);
141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid gdl_display(void *, WORD32);
142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid gdl_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid gdl_disp_deinit(void *);
144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid gdl_disp_usleep(UWORD32);
145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_COLOR_FORMAT_T gdl_get_color_fmt(void);
146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniUWORD32 gdl_get_stride(void);
147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef FBDEV_DISPLAY
150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* fbd_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid fbd_alloc_disp_buffers(void *);
152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid fbd_display(void *, WORD32);
153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid fbd_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid fbd_disp_deinit(void *);
155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid fbd_disp_usleep(UWORD32);
156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_COLOR_FORMAT_T fbd_get_color_fmt(void);
157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniUWORD32 fbd_get_stride(void);
158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS_DISPLAY
161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* ios_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ios_alloc_disp_buffers(void *);
163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ios_display(void *, WORD32);
164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ios_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ios_disp_deinit(void *);
166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ios_disp_usleep(UWORD32);
167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_COLOR_FORMAT_T ios_get_color_fmt(void);
168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniUWORD32 ios_get_stride(void);
169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct
172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_piclen_flag;
174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_file_save_flag;
175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_chksum_save_flag;
176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_max_frm_ts;
177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_COLOR_FORMAT_T e_output_chroma_format;
178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IVD_ARCH_T e_arch;
179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IVD_SOC_T e_soc;
180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 dump_q_rd_idx;
181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 dump_q_wr_idx;
182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32  disp_q_wr_idx;
183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32  disp_q_rd_idx;
184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *cocodec_obj;
186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 share_disp_buf;
187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 num_disp_buf;
188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 b_pic_present;
189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_degrade_type;
190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_degrade_pics;
191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_num_cores;
192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 disp_delay;
193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 trace_enable;
194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_trace_fname[STRLENGTH];
195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_piclen_fname[STRLENGTH];
196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_ip_fname[STRLENGTH];
197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_op_fname[STRLENGTH];
198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_op_chksum_fname[STRLENGTH];
199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_out_bufdesc_t s_disp_buffers[MAX_DISP_BUFFERS];
200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_yuv_buf_t s_disp_frm_queue[MAX_DISP_BUFFERS];
201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 s_disp_frm_id_queue[MAX_DISP_BUFFERS];
202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 loopback;
203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 display;
204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 full_screen;
205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 fps;
206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 max_wd;
207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 max_ht;
208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 max_level;
209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_strd;
211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* For signalling to display thread */
213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_pic_wd;
214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_pic_ht;
215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* For IOS diplay */
217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_screen_wd;
218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_screen_ht;
219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    //UWORD32 u4_output_present;
221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32  quit;
222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32  paused;
223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *pv_disp_ctx;
226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *display_thread_handle;
227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 display_thread_created;
228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    volatile WORD32 display_init_done;
229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    volatile WORD32 display_deinit_flag;
230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void* (*disp_init)(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void (*alloc_disp_buffers)(void *);
233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void (*display_buffer)(void *, WORD32);
234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void (*set_disp_buffers)(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void (*disp_deinit)(void *);
236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void (*disp_usleep)(UWORD32);
237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_COLOR_FORMAT_T(*get_color_fmt)(void);
238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32(*get_stride)(void);
239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}vid_dec_ctx_t;
240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef enum
244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    INVALID,
246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    HELP,
247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    VERSION,
248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    INPUT_FILE,
249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    OUTPUT,
250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHKSUM,
251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    SAVE_OUTPUT,
252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    SAVE_CHKSUM,
253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHROMA_FORMAT,
254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    NUM_FRAMES,
255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    NUM_CORES,
256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    SHARE_DISPLAY_BUF,
258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    LOOPBACK,
259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    DISPLAY,
260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FULLSCREEN,
261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FPS,
262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    TRACE,
263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    MAX_WD,
264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    MAX_HT,
265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    MAX_LEVEL,
266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CONFIG,
267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    DEGRADE_TYPE,
269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    DEGRADE_PICS,
270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ARCH,
271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    SOC,
272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    PICLEN,
273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    PICLEN_FILE,
274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}ARGUMENT_T;
275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct
277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR argument_shortname[4];
279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR argument_name[128];
280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ARGUMENT_T argument;
281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR description[512];
282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}argument_t;
283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistatic const argument_t argument_mapping[] =
285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-h",  "--help",                   HELP,
287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Print this help\n" },
288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-c", "--config",      CONFIG,
289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "config file (Default: test.cfg)\n" },
290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-v",  "--version",                VERSION,
292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Version information\n" },
293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-i",  "--input",                  INPUT_FILE,
294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Input file\n" },
295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-o",  "--output",                 OUTPUT,
296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Output file\n" },
297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--piclen",                 PICLEN,
298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Flag to signal if the decoder has to use a file containing number of bytes in each picture to be fed in each call\n" },
299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--piclen_file",                 PICLEN_FILE,
300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "File containing number of bytes in each picture - each line containing one size\n" },
301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--chksum",          CHKSUM,
302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Output MD5 Checksum file\n" },
303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-s", "--save_output",            SAVE_OUTPUT,
304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Save Output file\n" },
305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--save_chksum",            SAVE_CHKSUM,
306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Save Check sum file\n" },
307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--chroma_format",          CHROMA_FORMAT,
308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Output Chroma format Supported values YUV_420P, YUV_422ILE, RGB_565, YUV_420SP_UV, YUV_420SP_VU\n" },
309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-n", "--num_frames",             NUM_FRAMES,
310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Number of frames to be decoded\n" },
311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--num_cores",              NUM_CORES,
312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Number of cores to be used\n" },
313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--share_display_buf",      SHARE_DISPLAY_BUF,
314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Enable shared display buffer mode\n" },
315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--loopback",      LOOPBACK,
317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Enable playback in a loop\n" },
318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--display",      DISPLAY,
319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Enable display (uses SDL)\n" },
320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--fullscreen",      FULLSCREEN,
321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Enable full screen (Only for GDL and SDL)\n" },
322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--fps",      FPS,
323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "FPS to be used for display \n" },
324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "-i",  "--trace",                   TRACE,
325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Trace file\n" },
326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--max_wd",      MAX_WD,
327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Maximum width (Default: 2560) \n" },
328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--max_ht",      MAX_HT,
329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Maximum height (Default: 1600)\n" },
330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--arch", ARCH,
331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Set Architecture. Supported values  ARM_NONEON, ARM_A9Q, ARM_A7, ARM_A5, ARM_NEONINTR, X86_GENERIC, X86_SSSE3, X86_SSE4 \n" },
332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--soc", SOC,
333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Set SOC. Supported values  GENERIC, HISI_37X \n" },
334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if 0
336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--degrade_type",  DEGRADE_TYPE,
337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Degrade type : 0: No degrade 0th bit set : Disable SAO 1st bit set : Disable deblocking 2nd bit set : Faster inter prediction filters 3rd bit set : Fastest inter prediction filters\n" },
338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--",  "--degrade_pics",  DEGRADE_PICS,
339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Degrade pics : 0 : No degrade  1 : Only on non-reference frames  2 : Do not degrade every 4th or key frames  3 : All non-key frames  4 : All frames" },
340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    { "--", "--max_level",      MAX_LEVEL,
342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        "Maximum Decoder Level (Default: 50)\n" },
343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani};
345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define PEAK_WINDOW_SIZE            8
347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_FRAME_WIDTH             2560
348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_FRAME_HEIGHT            1600
349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_LEVEL_SUPPORTED         50
350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_REF_FRAMES              16
351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_REORDER_FRAMES          16
352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define DEFAULT_SHARE_DISPLAY_BUF   0
353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define STRIDE                      0
354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define DEFAULT_NUM_CORES           1
355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define DUMP_SINGLE_BUF 0
357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define IV_ISFATALERROR(x)         (((x) >> IVD_FATALERROR) & 0x1)
358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define ivd_api_function        impeg2d_api_function
360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanichar filename_trace[PATHLENMAX];
363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if ANDROID_NDK
366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : raise                                                    */
369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Needed as a workaround when the application is built in  */
371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  Android NDK. This is an exception to be called for divide*/
372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  by zero error                                            */
373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : a                                                        */
375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : None                                                     */
377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       :                                                          */
380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniint raise(int a)
390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Divide by zero\n");
392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return 0;
393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef _WIN32
397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* Function to print library calls                                           */
399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : memalign                                                 */
403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Returns malloc data. Ideally should return aligned memory*/
405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  support alignment will be added later                    */
406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : alignment                                                */
408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  size                                                     */
409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    :                                                          */
411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       :                                                          */
414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* app_aligned_malloc(WORD32 alignment, WORD32 size)
425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (void *)_aligned_malloc(size, alignment);
427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid app_aligned_free(void *pv_buf)
430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    _aligned_free(pv_buf);
432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if IOS
437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* app_aligned_malloc(WORD32 alignment, WORD32 size)
438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return malloc(size);
440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid app_aligned_free(void *pv_buf)
443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    free(pv_buf);
445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if (!defined(IOS)) && (!defined(_WIN32))
450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* app_aligned_malloc(WORD32 alignment, WORD32 size)
451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return memalign(alignment, size);
453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid app_aligned_free(void *pv_buf)
456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    free(pv_buf);
458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : set_degrade                                 */
465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to set degrade level       */
467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj  - Codec Handle                                */
470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  type - degrade level value between 0 to 4                */
471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    0 : No degrade                                         */
472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    1st bit : Disable SAO                                  */
473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    2nd bit : Disable Deblock                              */
474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    3rd bit : Faster MC for non-ref                        */
475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    4th bit : Fastest MC for non-ref                       */
476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  pics - Pictures that are are degraded                    */
477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    0 : No degrade                                         */
478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    1 : Non-ref pictures                                   */
479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    2 : Pictures at given interval are not degraded        */
480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    3 : All non-key pictures                               */
481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                    4 : All pictures                                       */
482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls degrade control to the codec                       */
484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T set_degrade(void *codec_obj, UWORD32 type, WORD32 pics)
498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status = IV_SUCCESS;
500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if 0
501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_ctl_degrade_ip_t s_ctl_ip;
502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_ctl_degrade_op_t s_ctl_op;
503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *pv_api_ip, *pv_api_op;
504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_size = sizeof(impeg2d_ctl_degrade_ip_t);
507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.i4_degrade_type = type;
508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.i4_nondegrade_interval = 4;
509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.i4_degrade_pics = pics;
510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_op.u4_size = sizeof(impeg2d_ctl_degrade_op_t);
512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pv_api_ip = (void *)&s_ctl_ip;
514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pv_api_op = (void *)&s_ctl_op;
515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_DEGRADE;
518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, pv_api_ip, pv_api_op);
520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in setting degrade level \n");
524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ((void)(codec_obj));
527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ((void)(type));
528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ((void)(pics));
529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (e_dec_status);
530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : enable_skipb_frames                                      */
536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to enable skipping of b frames              */
538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec handle                                 */
541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls enable skip B frames control                       */
543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T enable_skipb_frames(void *codec_obj,
557aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                         vid_dec_ctx_t *ps_app_ctx)
558aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
559aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_ip_t s_ctl_ip;
560aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_op_t s_ctl_op;
561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
562aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
563aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_disp_wd = ps_app_ctx->u4_strd;
564aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_skip_mode = IVD_SKIP_B;
565aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
567aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_vid_dec_mode = IVD_DECODE_FRAME;
568aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
570aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
571aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
573aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
574aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (void *)&s_ctl_op);
575aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
576aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
578aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Enable SkipB frames \n");
579aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_dec_status;
582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
584aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
585aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : disable_skipb_frames                                     */
586aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
587aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to disable skipping of b frames             */
588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec handle                                 */
591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls disable B frame skip control                       */
593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T disable_skipb_frames(void *codec_obj,
607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                          vid_dec_ctx_t *ps_app_ctx)
608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_ip_t s_ctl_ip;
610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_op_t s_ctl_op;
611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_disp_wd = ps_app_ctx->u4_strd;
614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_skip_mode = IVD_SKIP_NONE;
615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_vid_dec_mode = IVD_DECODE_FRAME;
618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (void *)&s_ctl_op);
625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Disable SkipB frames\n");
629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_dec_status;
632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : enable_skippb_frames                                     */
637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to enable skipping of P & B frames          */
639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec handle                                 */
642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls enable skip P and B frames control                 */
644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
650aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
651aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
652aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
653aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
655aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
656aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
657aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T enable_skippb_frames(void *codec_obj,
658aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                          vid_dec_ctx_t *ps_app_ctx)
659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
660aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_ip_t s_ctl_ip;
661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_op_t s_ctl_op;
662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
663aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
664aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_disp_wd = ps_app_ctx->u4_strd;
665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_skip_mode = IVD_SKIP_PB;
666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_vid_dec_mode = IVD_DECODE_FRAME;
669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (void *)&s_ctl_op);
676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Enable SkipPB frames\n");
679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_dec_status;
682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : disable_skippb_frames                                    */
687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to disable skipping of P and B frames       */
689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec handle                                 */
692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls disable P and B frame skip control                 */
694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T disable_skippb_frames(void *codec_obj,
708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           vid_dec_ctx_t *ps_app_ctx)
709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_ip_t s_ctl_ip;
711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_set_config_op_t s_ctl_op;
712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_disp_wd = ps_app_ctx->u4_strd;
715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_skip_mode = IVD_SKIP_NONE;
716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_vid_dec_mode = IVD_DECODE_FRAME;
719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (void *)&s_ctl_op);
726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Disable SkipPB frames\n");
729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
730aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_dec_status;
732aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
733aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
734aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
736aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : release_disp_frame                                       */
737aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
738aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Calls release display control - Used to signal to the    */
739aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  decoder that this particular buffer has been displayed   */
740aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  and that the codec is now free to write to this buffer   */
741aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
742aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec Handle                                 */
744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  buf_id    : Buffer Id of the buffer to be released       */
745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                              This id would have been returned earlier by  */
746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                              the codec                                    */
747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls Release Display call                               */
749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Status of release display call                           */
752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T release_disp_frame(void *codec_obj, UWORD32 buf_id)
763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_rel_display_frame_ip_t s_video_rel_disp_ip;
765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_rel_display_frame_op_t s_video_rel_disp_op;
766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_video_rel_disp_ip.e_cmd = IVD_CMD_REL_DISPLAY_FRAME;
769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_video_rel_disp_ip.u4_size = sizeof(ivd_rel_display_frame_ip_t);
770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_video_rel_disp_op.u4_size = sizeof(ivd_rel_display_frame_op_t);
771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_video_rel_disp_ip.u4_disp_buf_id = buf_id;
772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_dec_status = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_video_rel_disp_ip,
774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (void *)&s_video_rel_disp_op);
775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(IV_SUCCESS != e_dec_status)
776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
777aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Release Disp frame\n");
778aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
779aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
780aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
781aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (e_dec_status);
782aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
783aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
784aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
785aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
786aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : get_version                                      */
787aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
788aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Control call to get codec version              */
789aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
790aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
791aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : codec_obj : Codec handle                                 */
792aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
793aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Calls enable skip B frames control                       */
794aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
795aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
796aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Control call return status                               */
797aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
798aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
799aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
800aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
801aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
802aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
803aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
804aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
805aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
806aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
807aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T get_version(void *codec_obj)
808aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
809aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_getversioninfo_ip_t s_ctl_dec_ip;
810aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_ctl_getversioninfo_op_t s_ctl_dec_op;
811aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8 au1_buf[512];
812aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T status;
813aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_ip.e_cmd = IVD_CMD_VIDEO_CTL;
814aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_ip.e_sub_cmd = IVD_CMD_CTL_GETVERSION;
815aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_ip.u4_size = sizeof(ivd_ctl_getversioninfo_ip_t);
816aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_op.u4_size = sizeof(ivd_ctl_getversioninfo_op_t);
817aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_ip.pv_version_buffer = au1_buf;
818aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_ctl_dec_ip.u4_version_buffer_size = sizeof(au1_buf);
819aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
820aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    status = ivd_api_function((iv_obj_t *)codec_obj,
821aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                  (void *)&(s_ctl_dec_ip),
822aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                  (void *)&(s_ctl_dec_op));
823aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
824aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(status != IV_SUCCESS)
825aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
826aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Error in Getting Version number e_dec_status = %d u4_error_code = %x\n",
827aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               status, s_ctl_dec_op.u4_error_code);
828aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
829aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
830aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
831aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Ittiam Decoder Version number: %s\n",
832aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               (char *)s_ctl_dec_ip.pv_version_buffer);
833aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
834aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return status;
835aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
836aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
837aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
838aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : codec_exit                                               */
839aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
840aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : handles unrecoverable errors                             */
841aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : Error message                                            */
842aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       : None                                                     */
843aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Prints error message to console and exits.               */
844aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       : Error mesage to the console                              */
845aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : None                                                     */
846aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
847aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
848aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
849aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
850aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
851aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
852aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 06 2006   Sankar          Creation                             */
853aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
854aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
855aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid codec_exit(CHAR *pc_err_message)
856aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
857aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("%s\n", pc_err_message);
858aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    exit(-1);
859aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
860aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
861aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
862aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
863aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : dump_output                                              */
864aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
865aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Used to dump output YUV                                  */
866aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : App context, disp output desc, File pointer              */
867aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       : None                                                     */
868aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Dumps to a file                                          */
869aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : None                                                     */
870aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
871aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
872aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
873aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
874aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
875aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
876aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 06 2006   Sankar          Creation                             */
877aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
878aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
879aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid dump_output(vid_dec_ctx_t *ps_app_ctx,
880aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 iv_yuv_buf_t *ps_disp_frm_buf,
881aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 UWORD32 u4_disp_frm_id,
882aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 FILE *ps_op_file,
883aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 FILE *ps_op_chksum_file,
884aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 WORD32 i4_op_frm_ts,
885aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 UWORD32 file_save,
886aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 UWORD32 chksum_save)
887aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
888aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
889aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
890aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 i;
891aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_yuv_buf_t s_dump_disp_frm_buf;
892aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_disp_id;
893aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
894aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memset(&s_dump_disp_frm_buf, 0, sizeof(iv_yuv_buf_t));
895aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
896aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_app_ctx->share_disp_buf)
897aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
898aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_app_ctx->dump_q_wr_idx == MAX_DISP_BUFFERS
899aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        )
900aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_app_ctx->dump_q_wr_idx = 0;
901aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
902aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_app_ctx->dump_q_rd_idx == MAX_DISP_BUFFERS
903aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        )
904aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_app_ctx->dump_q_rd_idx = 0;
905aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
906aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->s_disp_frm_queue[ps_app_ctx->dump_q_wr_idx] =
907aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        *ps_disp_frm_buf;
908aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->s_disp_frm_id_queue[ps_app_ctx->dump_q_wr_idx] =
909aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        u4_disp_frm_id;
910aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->dump_q_wr_idx++;
911aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
912aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((WORD32)i4_op_frm_ts >= (WORD32)(ps_app_ctx->disp_delay - 1))
913aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
914aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_dump_disp_frm_buf =
915aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_app_ctx->s_disp_frm_queue[ps_app_ctx->dump_q_rd_idx];
916aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_disp_id =
917aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_app_ctx->s_disp_frm_id_queue[ps_app_ctx->dump_q_rd_idx];
918aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_app_ctx->dump_q_rd_idx++;
919aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
920aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
921aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
922aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return;
923aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
924aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
925aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
926aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
927aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_dump_disp_frm_buf = *ps_disp_frm_buf;
928aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_disp_id = u4_disp_frm_id;
929aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
930aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == ps_app_ctx->share_disp_buf)
931aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        release_disp_frame(ps_app_ctx->cocodec_obj, u4_disp_id);
932aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
933aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(0 == file_save && 0 == chksum_save)
934aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return;
935aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
936aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(NULL == s_dump_disp_frm_buf.pv_y_buf)
937aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return;
938aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
939aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_app_ctx->e_output_chroma_format == IV_YUV_420P)
940aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
941aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if DUMP_SINGLE_BUF
942aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
943aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 *buf = s_dump_disp_frm_buf.pv_y_buf - 24 - (s_dump_disp_frm_buf.u4_y_strd * 40);
944aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
945aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD32 size = s_dump_disp_frm_buf.u4_y_strd * ((s_dump_disp_frm_buf.u4_y_ht + 80) + (s_dump_disp_frm_buf.u4_u_ht + 40));
946aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(buf, 1, size, ps_op_file);
947aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
948aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
949aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
950aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(0 != file_save)
951aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
952aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 *buf;
953aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
954aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
955aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
956aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
957aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
958aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                buf += s_dump_disp_frm_buf.u4_y_strd;
959aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
960aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
961aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf = (UWORD8 *)s_dump_disp_frm_buf.pv_u_buf;
962aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
963aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
964aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
965aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                buf += s_dump_disp_frm_buf.u4_u_strd;
966aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
967aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf = (UWORD8 *)s_dump_disp_frm_buf.pv_v_buf;
968aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < s_dump_disp_frm_buf.u4_v_ht; i++)
969aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
970aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fwrite(buf, 1, s_dump_disp_frm_buf.u4_v_wd, ps_op_file);
971aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                buf += s_dump_disp_frm_buf.u4_v_strd;
972aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
973aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
974aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
975aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
976aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(0 != chksum_save)
977aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
978aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 au1_y_chksum[16];
979aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 au1_u_chksum[16];
980aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 au1_v_chksum[16];
981aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_y_buf,
982aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_y_strd,
983aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_y_wd,
984aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_y_ht,
985aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           au1_y_chksum);
986aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_u_buf,
987aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_u_strd,
988aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_u_wd,
989aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_u_ht,
990aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           au1_u_chksum);
991aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_v_buf,
992aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_v_strd,
993aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_v_wd,
994aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_dump_disp_frm_buf.u4_v_ht,
995aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           au1_v_chksum);
996aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
997aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(au1_y_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
998aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(au1_u_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
999aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(au1_v_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
1000aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1001aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1002aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1003aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else if((ps_app_ctx->e_output_chroma_format == IV_YUV_420SP_UV)
1004aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    || (ps_app_ctx->e_output_chroma_format == IV_YUV_420SP_VU))
1005aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1006aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if DUMP_SINGLE_BUF
1007aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1008aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1009aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 *buf = s_dump_disp_frm_buf.pv_y_buf - 24 - (s_dump_disp_frm_buf.u4_y_strd * 40);
1010aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1011aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD32 size = s_dump_disp_frm_buf.u4_y_strd * ((s_dump_disp_frm_buf.u4_y_ht + 80) + (s_dump_disp_frm_buf.u4_u_ht + 40));
1012aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(buf, 1, size, ps_op_file);
1013aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1014aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
1015aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1016aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD8 *buf;
1017aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1018aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
1019aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1020aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1021aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
1022aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                buf += s_dump_disp_frm_buf.u4_y_strd;
1023aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1024aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1025aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf = (UWORD8 *)s_dump_disp_frm_buf.pv_u_buf;
1026aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
1027aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1028aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
1029aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                buf += s_dump_disp_frm_buf.u4_u_strd;
1030aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1031aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1032aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1033aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1034aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else if(ps_app_ctx->e_output_chroma_format == IV_RGBA_8888)
1035aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1036aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD8 *buf;
1037aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1038aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        buf = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
1039aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1040aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1041aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd * 4, ps_op_file);
1042aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf += s_dump_disp_frm_buf.u4_y_strd * 4;
1043aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1044aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1045aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
1046aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1047aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD8 *buf;
1048aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1049aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        buf = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
1050aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1051aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1052aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_strd * 2, ps_op_file);
1053aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            buf += s_dump_disp_frm_buf.u4_y_strd * 2;
1054aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1055aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1056aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1057aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    fflush(ps_op_file);
1058aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    fflush(ps_op_chksum_file);
1059aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1060aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1061aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1062aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1063aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1064aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1065aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : print_usage                                              */
1066aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1067aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Prints argument format                                   */
1068aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1069aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1070aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        :                                                          */
1071aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1072aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Prints argument format                                   */
1073aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1074aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
1075aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       :                                                          */
1076aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1077aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
1078aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1079aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1080aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1081aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1082aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
1083aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1084aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1085aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1086aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid print_usage(void)
1087aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1088aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i = 0;
1089aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
1090aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("\nUsage:\n");
1091aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(i < num_entries)
1092aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1093aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("%-32s\t %s", argument_mapping[i].argument_name,
1094aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               argument_mapping[i].description);
1095aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i++;
1096aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1097aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1098aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1099aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : get_argument                                             */
1102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Gets argument for a given string                         */
1104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : name                                                     */
1107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Searches the given string in the array and returns       */
1109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  appropriate argument ID                                  */
1110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       : Argument ID                                              */
1112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Argument ID                                              */
1113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
1115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
1120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniARGUMENT_T get_argument(CHAR *name)
1124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i = 0;
1126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
1127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(i < num_entries)
1128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((0 == strcmp(argument_mapping[i].argument_name, name)) ||
1130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        ((0 == strcmp(argument_mapping[i].argument_shortname, name)) &&
1131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        (0 != strcmp(argument_mapping[i].argument_shortname, "--"))))
1132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return argument_mapping[i].argument;
1134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i++;
1136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return INVALID;
1138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : get_argument                                             */
1143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Gets argument for a given string                         */
1145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : name                                                     */
1148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Searches the given string in the array and returns       */
1150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  appropriate argument ID                                  */
1151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       : Argument ID                                              */
1153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : Argument ID                                              */
1154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
1156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
1161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid parse_argument(vid_dec_ctx_t *ps_app_ctx, CHAR *argument, CHAR *value)
1165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ARGUMENT_T arg;
1167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    arg = get_argument(argument);
1169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    switch(arg)
1170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case HELP:
1172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            print_usage();
1173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            exit(-1);
1174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case VERSION:
1175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case INPUT_FILE:
1177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%s", ps_app_ctx->ac_ip_fname);
1178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            //input_passed = 1;
1179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case OUTPUT:
1182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%s", ps_app_ctx->ac_op_fname);
1183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case CHKSUM:
1186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%s", ps_app_ctx->ac_op_chksum_fname);
1187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case SAVE_OUTPUT:
1190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->u4_file_save_flag);
1191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case SAVE_CHKSUM:
1194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->u4_chksum_save_flag);
1195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case CHROMA_FORMAT:
1198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((strcmp(value, "YUV_420P")) == 0)
1199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_YUV_420P;
1200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "YUV_422ILE")) == 0)
1201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_YUV_422ILE;
1202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "RGB_565")) == 0)
1203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_RGB_565;
1204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "RGBA_8888")) == 0)
1205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_RGBA_8888;
1206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "YUV_420SP_UV")) == 0)
1207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_YUV_420SP_UV;
1208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "YUV_420SP_VU")) == 0)
1209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_YUV_420SP_VU;
1210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("\nInvalid colour format setting it to IV_YUV_420P\n");
1213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_output_chroma_format = IV_YUV_420P;
1214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case NUM_FRAMES:
1218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->u4_max_frm_ts);
1219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case NUM_CORES:
1222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->u4_num_cores);
1223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case DEGRADE_PICS:
1225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->i4_degrade_pics);
1226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->i4_degrade_pics = 0;
1227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("degrade_pics is not supported. Setting it to zero");
1228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case DEGRADE_TYPE:
1230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->i4_degrade_type);
1231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case SHARE_DISPLAY_BUF:
1233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->share_disp_buf);
1234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case LOOPBACK:
1236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->loopback);
1237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case DISPLAY:
1239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if defined(SDL_DISPLAY) || defined(FBDEV_DISPLAY) || defined(INTEL_CE5300) || defined(IOS_DISPLAY)
1240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->display);
1241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
1242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_app_ctx->display = 0;
1243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case FULLSCREEN:
1246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->full_screen);
1247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case FPS:
1249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->fps);
1250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ps_app_ctx->fps <= 0)
1251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->fps = DEFAULT_FPS;
1252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case MAX_WD:
1254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->max_wd);
1255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case MAX_HT:
1257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->max_ht);
1258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case MAX_LEVEL:
1260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->max_level);
1261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case ARCH:
1263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((strcmp(value, "ARM_NONEON")) == 0)
1264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_NONEON;
1265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "ARM_A9Q")) == 0)
1266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_A9Q;
1267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "ARM_V8")) == 0)
1268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARMV8_GENERIC;
1269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "ARM_A7")) == 0)
1270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_A7;
1271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "ARM_A5")) == 0)
1272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_A5;
1273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "ARM_NEONINTR")) == 0)
1274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_NEONINTR;
1275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "X86_GENERIC")) == 0)
1276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_X86_GENERIC;
1277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "X86_SSSE3")) == 0)
1278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_X86_SSSE3;
1279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "X86_SSE42")) == 0)
1280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_X86_SSE42;
1281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "X86_AVX2")) == 0)
1282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_X86_AVX2;
1283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "MIPS_GENERIC")) == 0)
1284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_MIPS_GENERIC;
1285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "MIPS_32")) == 0)
1286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_MIPS_32;
1287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("\nInvalid Arch. Setting it to ARM_A9Q\n");
1290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_arch = ARCH_ARM_A9Q;
1291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case SOC:
1295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((strcmp(value, "GENERIC")) == 0)
1296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_soc = SOC_GENERIC;
1297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((strcmp(value, "HISI_37X")) == 0)
1298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_soc = SOC_HISI_37X;
1299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_soc = atoi(value);
1302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*
1303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("\nInvalid SOC. Setting it to GENERIC\n");
1304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_app_ctx->e_soc = SOC_GENERIC;
1305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
1306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case PICLEN:
1309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%d", &ps_app_ctx->u4_piclen_flag);
1310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case PICLEN_FILE:
1313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sscanf(value, "%s", ps_app_ctx->ac_piclen_fname);
1314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        case INVALID:
1317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        default:
1318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("Ignoring argument :  %s\n", argument);
1319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : read_cfg_file                                            */
1326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Reads arguments from a configuration file                */
1328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : ps_app_ctx  : Application context                        */
1331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  fp_cfg_file : Configuration file handle                  */
1332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Parses the arguments and fills in the application context*/
1334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       : Arguments parsed                                         */
1336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : None                                                     */
1337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        :                                                          */
1339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
1344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid read_cfg_file(vid_dec_ctx_t *ps_app_ctx, FILE *fp_cfg_file)
1348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR line[STRLENGTH];
1351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR description[STRLENGTH];
1352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR value[STRLENGTH];
1353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR argument[STRLENGTH];
1354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *ret;
1355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(0 == feof(fp_cfg_file))
1356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        line[0] = '\0';
1358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = fgets(line, STRLENGTH, fp_cfg_file);
1359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(NULL == ret)
1360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        argument[0] = '\0';
1362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Reading Input File Name */
1363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sscanf(line, "%s %s %s", argument, value, description);
1364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(argument[0] == '\0')
1365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            continue;
1366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        parse_argument(ps_app_ctx, argument, value);
1368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*!
1374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \if Function name : dispq_producer_dequeue \endif
1376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \brief
1378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This function gets a free buffer index where display data can be written
1379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This is a blocking call and can be exited by setting quit to true in
1380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    the application context
1381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \param[in]  ps_app_ctx  : Pointer to application context
1383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \return
1385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    returns Next free buffer index for producer
1386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \author
1388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Ittiam
1389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
1392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 dispq_producer_dequeue(vid_dec_ctx_t *ps_app_ctx)
1393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 idx;
1395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If there is no free buffer wait */
1397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(((ps_app_ctx->disp_q_wr_idx + 1) % NUM_DISPLAY_BUFFERS) == ps_app_ctx->disp_q_rd_idx)
1399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ithread_msleep(1);
1402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_app_ctx->quit)
1404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return (-1);
1405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    idx = ps_app_ctx->disp_q_wr_idx;
1408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (idx);
1409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*!
1412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \if Function name : dispq_producer_queue \endif
1414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \brief
1416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This function adds buffer which can be displayed
1417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \param[in]  ps_app_ctx  : Pointer to application context
1419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \return
1421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    returns Next free buffer index for producer
1422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \author
1424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Ittiam
1425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
1428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 dispq_producer_queue(vid_dec_ctx_t *ps_app_ctx)
1429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->disp_q_wr_idx++;
1431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_app_ctx->disp_q_wr_idx == NUM_DISPLAY_BUFFERS)
1432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->disp_q_wr_idx = 0;
1433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (0);
1435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*!
1437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \if Function name : dispq_consumer_dequeue \endif
1439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \brief
1441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This function gets a free buffer index where display data can be written
1442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This is a blocking call and can be exited by setting quit to true in
1443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    the application context
1444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \param[in]  ps_app_ctx  : Pointer to application context
1446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \return
1448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    returns Next free buffer index for producer
1449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \author
1451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Ittiam
1452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
1455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 dispq_consumer_dequeue(vid_dec_ctx_t *ps_app_ctx)
1456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 idx;
1458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If there is no free buffer wait */
1460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(ps_app_ctx->disp_q_wr_idx == ps_app_ctx->disp_q_rd_idx)
1462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ithread_msleep(1);
1465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_app_ctx->quit)
1467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return (-1);
1468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    idx = ps_app_ctx->disp_q_rd_idx;
1471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (idx);
1472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*!
1475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \if Function name : dispq_producer_queue \endif
1477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \brief
1479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    This function adds buffer which can be displayed
1480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \param[in]  ps_app_ctx  : Pointer to application context
1482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \return
1484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*    returns Next free buffer index for producer
1485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* \author
1487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Ittiam
1488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani**************************************************************************
1490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
1491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 dispq_consumer_queue(vid_dec_ctx_t *ps_app_ctx)
1492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->disp_q_rd_idx++;
1494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_app_ctx->disp_q_rd_idx == NUM_DISPLAY_BUFFERS)
1495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->disp_q_rd_idx = 0;
1496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (0);
1498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : display_thread                                           */
1503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Thread to display the frame                              */
1505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : pv_ctx  : Application context                            */
1508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Wait for a buffer to get produced by decoder and display */
1511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  that frame                                               */
1512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       :                                                          */
1514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       : None                                                     */
1515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        : Pause followed by quit is making some deadlock condn     */
1517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  If decoder was lagging initially and then fasten up,     */
1518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  display will also go at faster rate till it reaches      */
1519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  equilibrium wrt the initial time                         */
1520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 05 2013   100578          Initial Version                      */
1525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 display_thread(void *pv_ctx)
1529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    vid_dec_ctx_t *ps_app_ctx = (vid_dec_ctx_t *)pv_ctx;
1531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 frm_duration; /* in us */
1534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 current_time;
1535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 expected_time;
1536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    TIMER   s_end_timer;
1537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    TIMER   s_first_frame_time;
1538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 first_frame_displayed;
1539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
1541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    TIMER frequency;
1542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
1546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    QueryPerformanceFrequency(&frequency);
1547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    first_frame_displayed = 0;
1549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    expected_time = 0;
1550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    frm_duration = 1000000 / ps_app_ctx->fps;
1551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Init display and allocate display buffers */
1553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->pv_disp_ctx = (void *)ps_app_ctx->disp_init(ps_app_ctx->u4_pic_wd,
1554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->u4_pic_ht,
1555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->i4_screen_wd,
1556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->i4_screen_ht,
1557aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->max_wd,
1558aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->max_ht,
1559aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_app_ctx->full_screen,
1560aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            &ps_app_ctx->quit,
1561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            &ps_app_ctx->paused);
1562aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->alloc_disp_buffers(ps_app_ctx->pv_disp_ctx);
1563aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1564aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->display_init_done = 1;
1565aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(1)
1567aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1568aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        WORD32 rd_idx;
1569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1570aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        rd_idx = dispq_consumer_dequeue(ps_app_ctx);
1571aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_app_ctx->quit)
1572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1573aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1574aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->display_buffer(ps_app_ctx->pv_disp_ctx, rd_idx);
1575aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1576aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(0 == first_frame_displayed)
1577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1578aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            GETTIME(&s_first_frame_time);
1579aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            first_frame_displayed = 1;
1580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*********************************************************************/
1583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Sleep based on the expected time of arrival of current buffer and */
1584aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* the Current frame                                                 */
1585aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*********************************************************************/
1586aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1587aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        GETTIME(&s_end_timer);
1588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ELAPSEDTIME(s_first_frame_time, s_end_timer, current_time, frequency);
1589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* time in micro second */
1591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        expected_time += frm_duration;
1592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        //printf("current_time %d expected_time %d diff %d \n", current_time, expected_time, (expected_time - current_time));
1594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* sleep for the diff. in time */
1595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(current_time < expected_time)
1596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_app_ctx->disp_usleep((expected_time - current_time));
1597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
1598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            expected_time += (current_time - expected_time);
1599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        dispq_consumer_queue(ps_app_ctx);
1601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(0 == ps_app_ctx->display_deinit_flag)
1606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_app_ctx->disp_usleep(1000);
1608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_app_ctx->disp_deinit(ps_app_ctx->pv_disp_ctx);
1610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* destroy the display thread */
1612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ithread_exit(ps_app_ctx->display_thread_handle);
1613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return 0;
1615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid flush_output(iv_obj_t *codec_obj,
1618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  vid_dec_ctx_t *ps_app_ctx,
1619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  ivd_out_bufdesc_t *ps_out_buf,
1620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  UWORD8 *pu1_bs_buf,
1621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  UWORD32 *pu4_op_frm_ts,
1622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  FILE *ps_op_file,
1623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  FILE *ps_op_chksum_file,
1624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  UWORD32 u4_ip_frm_ts,
1625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  UWORD32 u4_bytes_remaining)
1626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 ret;
1628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    do
1630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_flush_ip_t s_ctl_ip;
1633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_flush_op_t s_ctl_op;
1634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(*pu4_op_frm_ts >= (ps_app_ctx->u4_max_frm_ts + ps_app_ctx->disp_delay))
1636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_FLUSH;
1640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_size = sizeof(ivd_ctl_flush_ip_t);
1641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_op.u4_size = sizeof(ivd_ctl_flush_op_t);
1642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
1643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_op);
1644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ret != IV_SUCCESS)
1646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("Error in Setting the decoder in flush mode\n");
1648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1650aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(IV_SUCCESS == ret)
1651aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1652aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_video_decode_ip_t s_video_decode_ip;
1653aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_video_decode_op_t s_video_decode_op;
1654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1655aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.e_cmd = IVD_CMD_VIDEO_DECODE;
1656aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_ts = u4_ip_frm_ts;
1657aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.pv_stream_buffer = pu1_bs_buf;
1658aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_num_Bytes = u4_bytes_remaining;
1659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_size = sizeof(ivd_video_decode_ip_t);
1660aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[0] =
1661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[0];
1662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[1] =
1663aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[1];
1664aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[2] =
1665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[2];
1666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[0] =
1668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[0];
1669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[1] =
1670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[1];
1671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[2] =
1672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[2];
1673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_num_bufs =
1674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_num_bufs;
1675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_op.u4_size = sizeof(ivd_video_decode_op_t);
1677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
1679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*   API Call: Video Decode                                                  */
1680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
1681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_video_decode_ip,
1682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_video_decode_op);
1683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(1 == s_video_decode_op.u4_output_present)
1685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                dump_output(ps_app_ctx, &(s_video_decode_op.s_disp_frm_buf),
1687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_video_decode_op.u4_disp_buf_id, ps_op_file,
1688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_op_chksum_file,
1689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            *pu4_op_frm_ts, ps_app_ctx->u4_file_save_flag,
1690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_app_ctx->u4_chksum_save_flag);
1691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                (*pu4_op_frm_ts)++;
1693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }while(IV_SUCCESS == ret);
1696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef X86_MINGW
1700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid sigsegv_handler()
1701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Segmentation fault, Exiting.. \n");
1703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    exit(-1);
1704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniUWORD32 default_get_stride(void)
1708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return 0;
1710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_COLOR_FORMAT_T default_get_color_fmt(void)
1714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return IV_YUV_420P;
1716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Function Name : main                                                     */
1720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Description   : Application to demonstrate codec API                     */
1722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Inputs        : argc    - Number of arguments                            */
1725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  argv[]  - Arguments                                      */
1726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Globals       :                                                          */
1727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Processing    : Shows how to use create, process, control and delete     */
1728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Outputs       : Codec output in a file                                   */
1730aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Returns       :                                                          */
1731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1732aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Issues        : Assumes both PROFILE_ENABLE to be                        */
1733aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                  defined for multithread decode-display working           */
1734aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*  Revision History:                                                        */
1736aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*                                                                           */
1737aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         DD MM YYYY   Author(s)       Changes                              */
1738aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         07 09 2012   100189          Initial Version                      */
1739aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*         09 05 2013   100578          Multithread decode-display           */
1740aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/
1741aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
1742aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniint vdec_main(char *homedir, char *documentdir, int screen_wd, int screen_ht)
1743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
1744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniint main(WORD32 argc, CHAR *argv[])
1745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_cfg_fname[STRLENGTH];
1748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FILE *fp_cfg_file = NULL;
1749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FILE *ps_piclen_file = NULL;
1750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FILE *ps_ip_file = NULL;
1751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FILE *ps_op_file = NULL;
1752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    FILE *ps_op_chksum_file = NULL;
1753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 ret;
1754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CHAR ac_error_str[STRLENGTH];
1755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    vid_dec_ctx_t s_app_ctx;
1756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8 *pu1_bs_buf;
1757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_out_bufdesc_t *ps_out_buf;
1759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_num_bytes_dec = 0;
1760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 file_pos = 0;
1761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IV_API_CALL_STATUS_T e_dec_status;
1762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_ip_frm_ts = 0, u4_op_frm_ts = 0;
1763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 u4_bytes_remaining = 0;
1765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void *pv_mem_rec_location;
1766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_num_mem_recs;
1767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 i;
1768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_ip_buf_len;
1769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 frm_cnt = 0;
1770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 total_bytes_comsumed;
1771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
1773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_tot_cycles = 0;
1774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_tot_fmt_cycles = 0;
1775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 peak_window[PEAK_WINDOW_SIZE];
1776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 peak_window_idx = 0;
1777aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 peak_avg_max = 0;
1778aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef INTEL_CE5300
1779aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 time_consumed = 0;
1780aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 bytes_consumed = 0;
1781aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1782aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1783aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
1784aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    TIMER frequency;
1785aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1786aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 width = 0, height = 0;
1787aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_obj_t *codec_obj;
1788aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if defined(GPU_BUILD) && !defined(X86)
1789aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    int ioctl_init();
1790aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    ioctl_init();
1791aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1792aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1793aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef X86_MINGW
1794aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    //For getting printfs without any delay
1795aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    setvbuf(stdout, NULL, _IONBF, 0);
1796aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    setvbuf(stderr, NULL, _IONBF, 0);
1797aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1798aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
1799aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    sprintf(filename_trace, "%s/iostrace.txt", homedir);
1800aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("\ntrace file name = %s", filename_trace);
1801aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1802aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1803aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef X86_MINGW
1804aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1805aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        signal(SIGSEGV, sigsegv_handler);
1806aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1807aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1808aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1809aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1810aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef IOS
1811aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Usage */
1812aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(argc < 2)
1813aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1814aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Using test.cfg as configuration file \n");
1815aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        strcpy(ac_cfg_fname, "test.cfg");
1816aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1817aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else if(argc == 2)
1818aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1819aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        strcpy(ac_cfg_fname, argv[1]);
1820aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1821aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1822aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
1823aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    strcpy(ac_cfg_fname, "test.cfg");
1824aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1825aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1826aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1827aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1828aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
1829aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*                  Initialize Application parameters                  */
1830aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
1831aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1832aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    strcpy(s_app_ctx.ac_ip_fname, "\0");
1833aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.dump_q_wr_idx = 0;
1834aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.dump_q_rd_idx = 0;
1835aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_thread_created = 0;
1836aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_q_wr_idx = 0;
1837aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_q_rd_idx = 0;
1838aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_delay = 0;
1839aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.loopback = 0;
1840aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display = 0;
1841aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.full_screen = 0;
1842aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_piclen_flag = 0;
1843aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.fps = DEFAULT_FPS;
1844aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    file_pos = 0;
1845aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    total_bytes_comsumed = 0;
1846aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_ip_frm_ts = 0;
1847aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_op_frm_ts = 0;
1848aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
1849aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memset(peak_window, 0, sizeof(WORD32) * PEAK_WINDOW_SIZE);
1850aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1851aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.share_disp_buf = DEFAULT_SHARE_DISPLAY_BUF;
1852aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_num_cores = DEFAULT_NUM_CORES;
1853aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.i4_degrade_type = 0;
1854aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.i4_degrade_pics = 0;
1855aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.max_wd = 0;
1856aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.max_ht = 0;
1857aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.max_level = 0;
1858aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.e_arch = ARCH_ARM_A9Q;
1859aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.e_soc = SOC_GENERIC;
1860aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1861aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_strd = STRIDE;
1862aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1863aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_thread_handle           = malloc(ithread_get_handle_size());
1864aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.quit          = 0;
1865aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.paused        = 0;
1866aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    //s_app_ctx.u4_output_present = 0;
1867aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1868aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_stride = &default_get_stride;
1869aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1870aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_color_fmt = &default_get_color_fmt;
1871aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1872aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Set function pointers for display */
1873aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef SDL_DISPLAY
1874aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_init = &sdl_disp_init;
1875aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.alloc_disp_buffers = &sdl_alloc_disp_buffers;
1876aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_buffer = &sdl_display;
1877aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.set_disp_buffers = &sdl_set_disp_buffers;
1878aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_deinit = &sdl_disp_deinit;
1879aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_usleep = &sdl_disp_usleep;
1880aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_color_fmt = &sdl_get_color_fmt;
1881aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_stride = &sdl_get_stride;
1882aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1883aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1884aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef FBDEV_DISPLAY
1885aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_init = &fbd_disp_init;
1886aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.alloc_disp_buffers = &fbd_alloc_disp_buffers;
1887aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_buffer = &fbd_display;
1888aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.set_disp_buffers = &fbd_set_disp_buffers;
1889aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_deinit = &fbd_disp_deinit;
1890aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_usleep = &fbd_disp_usleep;
1891aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_color_fmt = &fbd_get_color_fmt;
1892aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_stride = &fbd_get_stride;
1893aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1894aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1895aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef INTEL_CE5300
1896aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_init = &gdl_disp_init;
1897aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.alloc_disp_buffers = &gdl_alloc_disp_buffers;
1898aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_buffer = &gdl_display;
1899aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.set_disp_buffers = &gdl_set_disp_buffers;
1900aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_deinit = &gdl_disp_deinit;
1901aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_usleep = &gdl_disp_usleep;
1902aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_color_fmt = &gdl_get_color_fmt;
1903aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_stride = &gdl_get_stride;
1904aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1905aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1906aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS_DISPLAY
1907aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_init = &ios_disp_init;
1908aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.alloc_disp_buffers = &ios_alloc_disp_buffers;
1909aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_buffer = &ios_display;
1910aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.set_disp_buffers = &ios_set_disp_buffers;
1911aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_deinit = &ios_disp_deinit;
1912aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.disp_usleep = &ios_disp_usleep;
1913aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_color_fmt = &ios_get_color_fmt;
1914aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.get_stride = &ios_get_stride;
1915aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1916aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1917aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display_deinit_flag = 0;
1918aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.e_output_chroma_format = IV_YUV_420SP_UV;
1919aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
1920aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Parse arguments                                                       */
1921aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
1922aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1923aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef IOS
1924aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Read command line arguments */
1925aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(argc > 2)
1926aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1927aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 1; i < (UWORD32)argc; i += 2)
1928aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1929aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(CONFIG == get_argument(argv[i]))
1930aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1931aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                strcpy(ac_cfg_fname, argv[i + 1]);
1932aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if((fp_cfg_file = fopen(ac_cfg_fname, "r")) == NULL)
1933aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1934aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    sprintf(ac_error_str, "Could not open Configuration file %s",
1935aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ac_cfg_fname);
1936aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    codec_exit(ac_error_str);
1937aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1938aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                read_cfg_file(&s_app_ctx, fp_cfg_file);
1939aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fclose(fp_cfg_file);
1940aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1941aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1942aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1943aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                parse_argument(&s_app_ctx, argv[i], argv[i + 1]);
1944aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1945aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1946aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1947aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
1948aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1949aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((fp_cfg_file = fopen(ac_cfg_fname, "r")) == NULL)
1950aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1951aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Could not open Configuration file %s",
1952aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ac_cfg_fname);
1953aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
1954aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1955aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        read_cfg_file(&s_app_ctx, fp_cfg_file);
1956aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        fclose(fp_cfg_file);
1957aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1958aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
1959aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    sprintf(filename_with_path, "%s/%s", homedir, ac_cfg_fname);
1960aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if((fp_cfg_file = fopen(filename_with_path, "r")) == NULL)
1961aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1962aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sprintf(ac_error_str, "Could not open Configuration file %s",
1963aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ac_cfg_fname);
1964aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        codec_exit(ac_error_str);
1965aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1966aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1967aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    read_cfg_file(&s_app_ctx, fp_cfg_file);
1968aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    fclose(fp_cfg_file);
1969aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1970aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1971aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PRINT_PICSIZE
1972aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If the binary is used for only getting number of bytes in each picture, then disable the following features */
1973aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_piclen_flag = 0;
1974aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_file_save_flag = 0;
1975aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.u4_chksum_save_flag = 0;
1976aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.i4_degrade_pics = 0;
1977aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.i4_degrade_type = 0;
1978aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.loopback = 0;
1979aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.share_disp_buf = 0;
1980aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.display = 0;
1981aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
1982aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1983aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If display is enabled, then turn off shared mode and get color format that is supported by display */
1984aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == s_app_ctx.display)
1985aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1986aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.share_disp_buf = 0;
1987aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.e_output_chroma_format = s_app_ctx.get_color_fmt();
1988aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1989aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(strcmp(s_app_ctx.ac_ip_fname, "\0") == 0)
1990aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1991aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("\nNo input file given for decoding\n");
1992aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        exit(-1);
1993aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1994aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1995aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1996aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
1997aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*          create the file object for input file                      */
1998aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
1999aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
2000aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    sprintf(filename_with_path, "%s/%s", homedir, s_app_ctx.ac_ip_fname);
2001aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_ip_file = fopen(filename_with_path, "rb");
2002aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
2003aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_ip_file = fopen(s_app_ctx.ac_ip_fname, "rb");
2004aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2005aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(NULL == ps_ip_file)
2006aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2007aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sprintf(ac_error_str, "Could not open input file %s",
2008aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.ac_ip_fname);
2009aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        codec_exit(ac_error_str);
2010aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2011aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2012aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*          create the file object for input file                      */
2013aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2014aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == s_app_ctx.u4_piclen_flag)
2015aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2016aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
2017aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sprintf(filename_with_path, "%s/%s", homedir, s_app_ctx.ac_piclen_fname);
2018aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_piclen_file = fopen(filename_with_path, "rb");
2019aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
2020aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_piclen_file = fopen(s_app_ctx.ac_piclen_fname, "rb");
2021aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2022aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(NULL == ps_piclen_file)
2023aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2024aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Could not open piclen file %s",
2025aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_app_ctx.ac_piclen_fname);
2026aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2027aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2028aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2029aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2030aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2031aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*          create the file object for output file                     */
2032aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2033aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == s_app_ctx.u4_file_save_flag)
2034aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2035aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef IOS
2036aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctx.ac_op_fname);
2037aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_op_file = fopen(filename_with_path, "wb");
2038aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
2039aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_op_file = fopen(s_app_ctx.ac_op_fname, "wb");
2040aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2041aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2042aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(NULL == ps_op_file)
2043aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2044aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Could not open output file %s",
2045aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_app_ctx.ac_op_fname);
2046aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2047aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2048aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2049aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2050aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2051aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*          create the file object for check sum file                  */
2052aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2053aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == s_app_ctx.u4_chksum_save_flag)
2054aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2055aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if IOS
2056aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctx.ac_op_chksum_fname);
2057aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_op_chksum_file = fopen(filename_with_path, "wb");
2058aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
2059aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_op_chksum_file = fopen(s_app_ctx.ac_op_chksum_fname, "wb");
2060aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2061aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(NULL == ps_op_chksum_file)
2062aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2063aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Could not open check sum file %s",
2064aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_app_ctx.ac_op_chksum_fname);
2065aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2066aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2067aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2068aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2069aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*                      Create decoder instance                        */
2070aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
2071aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2072aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2073aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_out_buf = (ivd_out_bufdesc_t *)malloc(sizeof(ivd_out_bufdesc_t));
2074aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2075aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2076aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            iv_num_mem_rec_ip_t s_no_of_mem_rec_query_ip;
2077aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            iv_num_mem_rec_op_t s_no_of_mem_rec_query_op;
2078aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2079aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_no_of_mem_rec_query_ip.u4_size = sizeof(s_no_of_mem_rec_query_ip);
2080aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_no_of_mem_rec_query_op.u4_size = sizeof(s_no_of_mem_rec_query_op);
2081aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_no_of_mem_rec_query_ip.e_cmd = IV_CMD_GET_NUM_MEM_REC;
2082aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2083aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2084aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*   API Call: Get Number of Mem Records                                     */
2085aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2086aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_dec_status = ivd_api_function(
2087aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            NULL, (void *)&s_no_of_mem_rec_query_ip,
2088aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (void *)&s_no_of_mem_rec_query_op);
2089aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(IV_SUCCESS != e_dec_status)
2090aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2091aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "Error in get mem records");
2092aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2093aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2094aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2095aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_num_mem_recs = s_no_of_mem_rec_query_op.u4_num_mem_rec;
2096aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2097aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2098aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        pv_mem_rec_location = malloc(u4_num_mem_recs * sizeof(iv_mem_rec_t));
2099aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(pv_mem_rec_location == NULL)
2100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Allocation failure for mem_rec_location");
2102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_fill_mem_rec_ip_t s_fill_mem_rec_ip;
2108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_fill_mem_rec_op_t s_fill_mem_rec_op;
2109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            iv_mem_rec_t *ps_mem_rec;
2110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD32 total_size;
2111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.e_cmd =
2113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            IV_CMD_FILL_NUM_MEM_REC;
2114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location =
2115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (iv_mem_rec_t *)pv_mem_rec_location;
2116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_wd =
2117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (s_app_ctx.max_wd == 0) ? MAX_FRAME_WIDTH : s_app_ctx.max_wd;
2118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_ht =
2119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (s_app_ctx.max_ht == 0) ? MAX_FRAME_HEIGHT : s_app_ctx.max_ht;
2120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.u4_share_disp_buf = s_app_ctx.share_disp_buf;
2121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.e_output_format =
2122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (IV_COLOR_FORMAT_T)s_app_ctx.e_output_chroma_format;
2123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_size =
2125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            sizeof(impeg2d_fill_mem_rec_ip_t);
2126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_fill_mem_rec_op.s_ivd_fill_mem_rec_op_t.u4_size =
2127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            sizeof(impeg2d_fill_mem_rec_op_t);
2128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_mem_rec = (iv_mem_rec_t *)pv_mem_rec_location;
2130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < u4_num_mem_recs; i++)
2131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_mem_rec[i].u4_size = sizeof(iv_mem_rec_t);
2132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*   API Call: Fill Mem Records                                     */
2135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_dec_status = ivd_api_function(NULL,
2138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                (void *)&s_fill_mem_rec_ip,
2139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                (void *)&s_fill_mem_rec_op);
2140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_num_mem_recs =
2142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_fill_mem_rec_op.s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled;
2143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(IV_SUCCESS != e_dec_status)
2145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "Error in fill mem records: %x", s_fill_mem_rec_op.s_ivd_fill_mem_rec_op_t.u4_error_code);
2147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_mem_rec = (iv_mem_rec_t *)pv_mem_rec_location;
2151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            total_size = 0;
2152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(i = 0; i < u4_num_mem_recs; i++)
2153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_mem_rec->pv_base = app_aligned_malloc(ps_mem_rec->u4_mem_alignment,
2155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                            ps_mem_rec->u4_mem_size);
2156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ps_mem_rec->pv_base == NULL)
2157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    sprintf(ac_error_str,
2159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            "\nAllocation failure for mem record id %d size %d\n",
2160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            i, ps_mem_rec->u4_mem_size);
2161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    codec_exit(ac_error_str);
2162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                total_size += ps_mem_rec->u4_mem_size;
2165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_mem_rec++;
2167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            //printf("\nTotal memory for codec %d\n", total_size);
2169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*   API Call: Initialize the Decoder                                        */
2172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_init_ip_t s_init_ip;
2175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_init_op_t s_init_op;
2176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void *fxns = &ivd_api_function;
2177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            iv_mem_rec_t *mem_tab;
2178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            mem_tab = (iv_mem_rec_t *)pv_mem_rec_location;
2180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.e_cmd = (IVD_API_COMMAND_TYPE_T)IV_CMD_INIT;
2181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.pv_mem_rec_location = mem_tab;
2182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.u4_frm_max_wd = (s_app_ctx.max_wd == 0) ? MAX_FRAME_WIDTH : s_app_ctx.max_wd;
2183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.u4_frm_max_ht = (s_app_ctx.max_ht == 0) ? MAX_FRAME_HEIGHT : s_app_ctx.max_ht;
2184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.u4_share_disp_buf = s_app_ctx.share_disp_buf;
2186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.u4_num_mem_rec = u4_num_mem_recs;
2188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.e_output_format =
2189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (IV_COLOR_FORMAT_T)s_app_ctx.e_output_chroma_format;
2190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_ip.s_ivd_init_ip_t.u4_size = sizeof(impeg2d_init_ip_t);
2191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_init_op.s_ivd_init_op_t.u4_size = sizeof(impeg2d_init_op_t);
2192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_obj = (iv_obj_t *)mem_tab[0].pv_base;
2194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_obj->pv_fxns = fxns;
2195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_obj->u4_size = sizeof(iv_obj_t);
2196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.cocodec_obj = codec_obj;
2198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_init_ip,
2200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_init_op);
2201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ret != IV_SUCCESS)
2202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "Error in Init %8x\n",
2204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_init_op.s_ivd_init_op_t.u4_error_code);
2205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*  Input and output buffer allocation                                       */
2210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ivd_ctl_getbufinfo_ip_t s_ctl_ip;
2214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ivd_ctl_getbufinfo_op_t s_ctl_op;
2215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_GETBUFINFO;
2218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_ctl_ip.u4_size = sizeof(ivd_ctl_getbufinfo_ip_t);
2219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_ctl_op.u4_size = sizeof(ivd_ctl_getbufinfo_op_t);
2220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
2221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           (void *)&s_ctl_op);
2222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ret != IV_SUCCESS)
2223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    sprintf(ac_error_str, "Error in Get Buf Info %x", s_ctl_op.u4_error_code);
2225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    codec_exit(ac_error_str);
2226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* Allocate input buffer */
2229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_ip_buf_len = s_ctl_op.u4_min_in_buf_size[0];
2230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                pu1_bs_buf = (UWORD8 *)malloc(u4_ip_buf_len);
2231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(pu1_bs_buf == NULL)
2233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    sprintf(ac_error_str,
2235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            "\nAllocation failure for input buffer of size %d",
2236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            u4_ip_buf_len);
2237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    codec_exit(ac_error_str);
2238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.num_disp_buf = s_ctl_op.u4_num_disp_bufs;
2240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* Allocate output buffer only if display buffers are not shared */
2241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* Or if shared and output is 420P */
2242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if((0 == s_app_ctx.share_disp_buf) || (IV_YUV_420P == s_app_ctx.e_output_chroma_format))
2243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    UWORD32 outlen;
2245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_out_buf->u4_min_out_buf_size[0] =
2246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                    s_ctl_op.u4_min_out_buf_size[0];
2247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_out_buf->u4_min_out_buf_size[1] =
2248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                    s_ctl_op.u4_min_out_buf_size[1];
2249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_out_buf->u4_min_out_buf_size[2] =
2250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                    s_ctl_op.u4_min_out_buf_size[2];
2251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    outlen = s_ctl_op.u4_min_out_buf_size[0];
2253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(s_ctl_op.u4_min_num_out_bufs > 1)
2254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        outlen += s_ctl_op.u4_min_out_buf_size[1];
2255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(s_ctl_op.u4_min_num_out_bufs > 2)
2257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        outlen += s_ctl_op.u4_min_out_buf_size[2];
2258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_out_buf->pu1_bufs[0] = (UWORD8 *)malloc(outlen);
2260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(ps_out_buf->pu1_bufs[0] == NULL)
2261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sprintf(ac_error_str,
2263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                "\nAllocation failure for output buffer of size %d",
2264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                outlen);
2265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        codec_exit(ac_error_str);
2266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(s_ctl_op.u4_min_num_out_bufs > 1)
2269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        ps_out_buf->pu1_bufs[1] = ps_out_buf->pu1_bufs[0]
2270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        + (s_ctl_op.u4_min_out_buf_size[0]);
2271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(s_ctl_op.u4_min_num_out_bufs > 2)
2273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        ps_out_buf->pu1_bufs[2] = ps_out_buf->pu1_bufs[1]
2274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                        + (s_ctl_op.u4_min_out_buf_size[1]);
2275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_out_buf->u4_num_bufs = s_ctl_op.u4_min_num_out_bufs;
2277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* set num of cores                                                      */
2287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
2291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_set_num_cores_op_t s_ctl_set_cores_op;
2292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_cores_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_SET_NUM_CORES;
2295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_cores_ip.u4_num_cores = s_app_ctx.u4_num_cores;
2296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_cores_ip.u4_size = sizeof(impeg2d_ctl_set_num_cores_ip_t);
2297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_cores_op.u4_size = sizeof(impeg2d_ctl_set_num_cores_op_t);
2298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_set_cores_ip,
2300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_set_cores_op);
2301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ret != IV_SUCCESS)
2302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "\nError in setting number of cores");
2304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* set processsor                                                        */
2310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_set_processor_ip_t s_ctl_set_num_processor_ip;
2315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_set_processor_op_t s_ctl_set_num_processor_op;
2316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_SET_PROCESSOR;
2319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_ip.u4_arch = s_app_ctx.e_arch;
2320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_ip.u4_soc = s_app_ctx.e_soc;
2321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_ip.u4_size = sizeof(impeg2d_ctl_set_processor_ip_t);
2322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_set_num_processor_op.u4_size = sizeof(impeg2d_ctl_set_processor_op_t);
2323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_set_num_processor_ip,
2325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_set_num_processor_op);
2326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ret != IV_SUCCESS)
2327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "\nError in setting Processor type");
2329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*****************************************************************************/
2336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*   Decode header to get width and height and buffer sizes                  */
2337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*****************************************************************************/
2338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_set_config_ip_t s_ctl_ip;
2341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_set_config_op_t s_ctl_op;
2342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_video_decode_ip_t s_video_decode_ip;
2344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_video_decode_op_t s_video_decode_op;
2345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_disp_wd = STRIDE;
2347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.display)
2348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_ip.u4_disp_wd = s_app_ctx.get_stride();
2349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_frm_skip_mode = IVD_SKIP_NONE;
2351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
2352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_vid_dec_mode = IVD_DECODE_HEADER;
2353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
2355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
2356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
2357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
2359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_op);
2360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ret != IV_SUCCESS)
2361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str,
2363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    "\nError in setting the codec in header decode mode");
2364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        do
2368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            WORD32 numbytes;
2370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(0 == s_app_ctx.u4_piclen_flag)
2371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fseek(ps_ip_file, file_pos, SEEK_SET);
2373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                numbytes = u4_ip_buf_len;
2374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
2376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                WORD32 entries;
2378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(1 != entries)
2380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    numbytes = u4_ip_buf_len;
2381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_bytes_remaining = fread(pu1_bs_buf, sizeof(UWORD8), numbytes,
2384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       ps_ip_file);
2385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(0 == u4_bytes_remaining)
2387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "\nUnable to read from input file");
2389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.e_cmd = IVD_CMD_VIDEO_DECODE;
2393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_ts = u4_ip_frm_ts;
2394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.pv_stream_buffer = pu1_bs_buf;
2395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_num_Bytes = u4_bytes_remaining;
2396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_size = sizeof(ivd_video_decode_ip_t);
2397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_op.u4_size = sizeof(ivd_video_decode_op_t);
2398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*   API Call: Header Decode                                                  */
2401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_video_decode_ip,
2403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_video_decode_op);
2404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ret != IV_SUCCESS)
2406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "\nError in header decode %x",
2408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_video_decode_op.u4_error_code);
2409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                // codec_exit(ac_error_str);
2410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_num_bytes_dec = s_video_decode_op.u4_num_bytes_consumed;
2413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef PROFILE_ENABLE
2414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("%d\n", s_video_decode_op.u4_num_bytes_consumed);
2415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            file_pos += u4_num_bytes_dec;
2417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            total_bytes_comsumed += u4_num_bytes_dec;
2418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }while(ret != IV_SUCCESS);
2419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* copy pic_wd and pic_ht to initialize buffers */
2421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.u4_pic_wd = s_video_decode_op.u4_pic_wd;
2422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.u4_pic_ht = s_video_decode_op.u4_pic_ht;
2423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if IOS_DISPLAY
2425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.i4_screen_wd = screen_wd;
2426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.i4_screen_ht = screen_ht;
2427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Create display thread and wait for the display buffers to be initialized */
2430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.display)
2431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(0 == s_app_ctx.display_thread_created)
2433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.display_init_done = 0;
2435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ithread_create(s_app_ctx.display_thread_handle, NULL,
2436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                               (void *)&display_thread, (void *)&s_app_ctx);
2437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.display_thread_created = 1;
2438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                while(1)
2440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(s_app_ctx.display_init_done)
2442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        break;
2443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ithread_msleep(1);
2445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.u4_strd = s_app_ctx.get_stride();
2449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Get actual number of output buffers requried, which is dependent      */
2454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* on stream properties such as width, height and level etc              */
2455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* This is needed mainly for shared display mode                         */
2456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    //if(1 == s_app_ctx.share_disp_buf)
2458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_getbufinfo_ip_t s_ctl_ip;
2460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_getbufinfo_op_t s_ctl_op;
2461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        WORD32 outlen = 0;
2462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_GETBUFINFO;
2465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_size = sizeof(ivd_ctl_getbufinfo_ip_t);
2466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_op.u4_size = sizeof(ivd_ctl_getbufinfo_op_t);
2467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
2468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_op);
2469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ret != IV_SUCCESS)
2470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Error in Get Buf Info %x", s_ctl_op.u4_error_code);
2472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef APP_EXTRA_BUFS
2476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.disp_delay = EXTRA_DISP_BUFFERS;
2477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_op.u4_num_disp_bufs += EXTRA_DISP_BUFFERS;
2478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*   API Call: Allocate display buffers for display buffer shared case       */
2482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < s_ctl_op.u4_num_disp_bufs; i++)
2485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[0] =
2488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_ctl_op.u4_min_out_buf_size[0];
2489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[1] =
2490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_ctl_op.u4_min_out_buf_size[1];
2491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[2] =
2492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_ctl_op.u4_min_out_buf_size[2];
2493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            outlen = s_ctl_op.u4_min_out_buf_size[0];
2495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_ctl_op.u4_min_num_out_bufs > 1)
2496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                outlen += s_ctl_op.u4_min_out_buf_size[1];
2497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_ctl_op.u4_min_num_out_bufs > 2)
2499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                outlen += s_ctl_op.u4_min_out_buf_size[2];
2500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.s_disp_buffers[i].pu1_bufs[0] = (UWORD8 *)malloc(outlen);
2502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_app_ctx.s_disp_buffers[i].pu1_bufs[0] == NULL)
2504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str,
2506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        "\nAllocation failure for output buffer of size %d",
2507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        outlen);
2508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_ctl_op.u4_min_num_out_bufs > 1)
2512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.s_disp_buffers[i].pu1_bufs[1] =
2513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                s_app_ctx.s_disp_buffers[i].pu1_bufs[0]
2514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                + (s_ctl_op.u4_min_out_buf_size[0]);
2515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_ctl_op.u4_min_num_out_bufs > 2)
2517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.s_disp_buffers[i].pu1_bufs[2] =
2518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                s_app_ctx.s_disp_buffers[i].pu1_bufs[1]
2519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                                + (s_ctl_op.u4_min_out_buf_size[1]);
2520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_app_ctx.s_disp_buffers[i].u4_num_bufs =
2522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_ctl_op.u4_min_num_out_bufs;
2523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.num_disp_buf = s_ctl_op.u4_num_disp_bufs;
2525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*   API Call: Send the allocated display buffers to codec                   */
2528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*****************************************************************************/
2529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.share_disp_buf)
2530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_set_display_frame_ip_t s_set_display_frame_ip;
2532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_set_display_frame_op_t s_set_display_frame_op;
2533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_set_display_frame_ip.e_cmd = IVD_CMD_SET_DISPLAY_FRAME;
2535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_set_display_frame_ip.u4_size = sizeof(ivd_set_display_frame_ip_t);
2536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_set_display_frame_op.u4_size = sizeof(ivd_set_display_frame_op_t);
2537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_set_display_frame_ip.num_disp_bufs = s_app_ctx.num_disp_buf;
2539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            memcpy(&(s_set_display_frame_ip.s_disp_buffer),
2541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                   &(s_app_ctx.s_disp_buffers),
2542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                   s_ctl_op.u4_num_disp_bufs * sizeof(ivd_out_bufdesc_t));
2543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj,
2545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_set_display_frame_ip,
2546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_set_display_frame_op);
2547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(IV_SUCCESS != ret)
2549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "Error in Set display frame");
2551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2557aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2558aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2559aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Get frame dimensions for display buffers such as x_offset,y_offset    */
2560aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* etc. This information might be needed to set display buffer           */
2561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* offsets in case of shared display buffer mode                         */
2562aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2563aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2564aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2565aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_get_frame_dimensions_ip_t s_ctl_get_frame_dimensions_ip;
2566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_get_frame_dimensions_op_t s_ctl_get_frame_dimensions_op;
2567aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2568aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_frame_dimensions_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_frame_dimensions_ip.e_sub_cmd =
2570aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_GET_BUFFER_DIMENSIONS;
2571aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_frame_dimensions_ip.u4_size =
2572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sizeof(impeg2d_ctl_get_frame_dimensions_ip_t);
2573aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_frame_dimensions_op.u4_size =
2574aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sizeof(impeg2d_ctl_get_frame_dimensions_op_t);
2575aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2576aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_get_frame_dimensions_ip,
2577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_get_frame_dimensions_op);
2578aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(IV_SUCCESS != ret)
2579aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Error in Get buffer Dimensions");
2581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
2582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2584aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*
2585aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Frame offsets due to padding\n");
2586aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("s_ctl_get_frame_dimensions_op.x_offset[0] %d s_ctl_get_frame_dimensions_op.y_offset[0] %d\n",
2587aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               s_ctl_get_frame_dimensions_op.u4_x_offset[0],
2588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               s_ctl_get_frame_dimensions_op.u4_y_offset[0]);
2589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
2590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Get VUI parameters                                                    */
2593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if 0
2595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_get_vui_params_ip_t s_ctl_get_vui_params_ip;
2598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_ctl_get_vui_params_op_t s_ctl_get_vui_params_op;
2599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_vui_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_vui_params_ip.e_sub_cmd =
2602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_GET_VUI_PARAMS;
2603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_vui_params_ip.u4_size =
2604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sizeof(impeg2d_ctl_get_vui_params_ip_t);
2605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_get_vui_params_op.u4_size =
2606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sizeof(impeg2d_ctl_get_vui_params_op_t);
2607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_get_vui_params_ip,
2609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_ctl_get_vui_params_op);
2610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(IV_SUCCESS != ret)
2611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Error in Get VUI params");
2613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            //codec_exit(ac_error_str);
2614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Set the decoder in frame decode mode. It was set in header decode     */
2621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* mode earlier                                                          */
2622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_set_config_ip_t s_ctl_ip;
2626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ivd_ctl_set_config_op_t s_ctl_op;
2627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_disp_wd = STRIDE;
2629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.display)
2630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_ip.u4_disp_wd = s_app_ctx.get_stride();
2631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_frm_skip_mode = IVD_SKIP_NONE;
2632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
2634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_vid_dec_mode = IVD_DECODE_FRAME;
2635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
2637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
2638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
2640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip, (void *)&s_ctl_op);
2642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(IV_SUCCESS != ret)
2644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Error in Set Parameters");
2646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            //codec_exit(ac_error_str);
2647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
2650aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2651aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If required disable deblocking and sao at given level                 */
2652aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*************************************************************************/
2653aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    set_degrade(codec_obj, s_app_ctx.i4_degrade_type, s_app_ctx.i4_degrade_pics);
2654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef WINDOWS_TIMER
2655aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    QueryPerformanceFrequency(&frequency);
2656aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2657aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef PRINT_PICSIZE
2658aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    get_version(codec_obj);
2659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2660aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_op_frm_ts < (s_app_ctx.u4_max_frm_ts + s_app_ctx.disp_delay))
2661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
2662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2663aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef TEST_FLUSH
2664aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_ip_frm_ts == FLUSH_FRM_CNT)
2665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_ctl_flush_ip_t s_ctl_ip;
2667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_ctl_flush_op_t s_ctl_op;
2668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_FLUSH;
2671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_ip.u4_size = sizeof(ivd_ctl_flush_ip_t);
2672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_op.u4_size = sizeof(ivd_ctl_flush_op_t);
2673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
2674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_ctl_op);
2675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ret != IV_SUCCESS)
2677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("Error in Setting the decoder in flush mode\n");
2679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            file_pos = 0;
2681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fseek(ps_ip_file, file_pos, SEEK_SET);
2683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_ip_frm_ts < s_app_ctx.num_disp_buf && (1 == s_app_ctx.share_disp_buf))
2687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            release_disp_frame(codec_obj, u4_ip_frm_ts);
2689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*************************************************************************/
2693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* set num of cores                                                      */
2694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*************************************************************************/
2695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef DYNAMIC_NUMCORES
2696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
2699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_ctl_set_num_cores_op_t s_ctl_set_cores_op;
2700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_set_cores_ip.e_sub_cmd = IMPEG2D_CMD_CTL_SET_NUM_CORES;
2703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_set_cores_ip.u4_num_cores =  1 + 3 * (u4_ip_frm_ts % 2);
2704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_set_cores_ip.u4_size = sizeof(impeg2d_ctl_set_num_cores_ip_t);
2705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_ctl_set_cores_op.u4_size = sizeof(impeg2d_ctl_set_num_cores_op_t);
2706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_set_cores_ip,
2708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_ctl_set_cores_op);
2709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ret != IV_SUCCESS)
2710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                sprintf(ac_error_str, "\nError in setting number of cores");
2712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                codec_exit(ac_error_str);
2713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /***********************************************************************/
2718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*   Seek the file to start of current frame, this is equavelent of    */
2719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*   having a parcer which tells the start of current frame            */
2720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /***********************************************************************/
2721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            WORD32 numbytes;
2723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(0 == s_app_ctx.u4_piclen_flag)
2725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                fseek(ps_ip_file, file_pos, SEEK_SET);
2727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                numbytes = u4_ip_buf_len;
2728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
2730aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                WORD32 entries;
2732aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2733aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(1 != entries)
2734aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    numbytes = u4_ip_buf_len;
2735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2736aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2737aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_bytes_remaining = fread(pu1_bs_buf, sizeof(UWORD8),
2738aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       numbytes, ps_ip_file);
2739aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2740aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(u4_bytes_remaining == 0)
2741aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2742aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(1 == s_app_ctx.loopback)
2743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    file_pos = 0;
2745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(0 == s_app_ctx.u4_piclen_flag)
2746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        fseek(ps_ip_file, file_pos, SEEK_SET);
2748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        numbytes = u4_ip_buf_len;
2749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    else
2751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        WORD32 entries;
2753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        if(1 != entries)
2755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            numbytes = u4_ip_buf_len;
2756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    u4_bytes_remaining = fread(pu1_bs_buf, sizeof(UWORD8),
2760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                               numbytes, ps_ip_file);
2761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
2763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
2764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
2766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*********************************************************************/
2768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Following calls can be enabled at diffent times                   */
2769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*********************************************************************/
2770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if ENABLE_DEGRADE
2771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts >= 10000)
2772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            disable_deblocking(codec_obj, 4);
2773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts == 30000)
2775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            enable_deblocking(codec_obj);
2776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2777aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts == 10000)
2778aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            enable_skippb_frames(codec_obj);
2779aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2780aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts == 60000)
2781aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            disable_skippb_frames(codec_obj);
2782aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2783aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts == 30000)
2784aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            enable_skipb_frames(codec_obj);
2785aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2786aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_op_frm_ts == 60000)
2787aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            disable_skipb_frames(codec_obj);
2788aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2789aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2790aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2791aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
2792aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_video_decode_ip_t s_video_decode_ip;
2793aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ivd_video_decode_op_t s_video_decode_op;
2794aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
2795aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD32 s_elapsed_time;
2796aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            TIMER s_start_timer;
2797aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            TIMER s_end_timer;
2798aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2799aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2800aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2801aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.e_cmd = IVD_CMD_VIDEO_DECODE;
2802aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_ts = u4_ip_frm_ts;
2803aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.pv_stream_buffer = pu1_bs_buf;
2804aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_num_Bytes = u4_bytes_remaining;
2805aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.u4_size = sizeof(ivd_video_decode_ip_t);
2806aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[0] =
2807aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[0];
2808aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[1] =
2809aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[1];
2810aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_min_out_buf_size[2] =
2811aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_min_out_buf_size[2];
2812aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2813aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[0] =
2814aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[0];
2815aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[1] =
2816aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[1];
2817aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.pu1_bufs[2] =
2818aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->pu1_bufs[2];
2819aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_ip.s_out_buffer.u4_num_bufs =
2820aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_out_buf->u4_num_bufs;
2821aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_video_decode_op.u4_size = sizeof(ivd_video_decode_op_t);
2822aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2823aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* Get display buffer pointers */
2824aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(1 == s_app_ctx.display)
2825aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2826aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                WORD32 wr_idx;
2827aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2828aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                wr_idx = dispq_producer_dequeue(&s_app_ctx);
2829aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2830aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(s_app_ctx.quit)
2831aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
2832aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2833aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.set_disp_buffers(s_app_ctx.pv_disp_ctx, wr_idx,
2834aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           &s_video_decode_ip.s_out_buffer.pu1_bufs[0],
2835aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           &s_video_decode_ip.s_out_buffer.pu1_bufs[1],
2836aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           &s_video_decode_ip.s_out_buffer.pu1_bufs[2]);
2837aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2838aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2839aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2840aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*   API Call: Video Decode                                                  */
2841aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*****************************************************************************/
2842aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2843aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            GETTIME(&s_start_timer);
2844aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2845aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_video_decode_ip,
2846aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (void *)&s_video_decode_op);
2847aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2848aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2849aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            GETTIME(&s_end_timer);
2850aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ELAPSEDTIME(s_start_timer, s_end_timer, s_elapsed_time, frequency);
2851aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
2852aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2853aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                UWORD32 peak_avg, id;
2854aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_tot_cycles += s_elapsed_time;
2855aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                peak_window[peak_window_idx++] = s_elapsed_time;
2856aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(peak_window_idx == PEAK_WINDOW_SIZE)
2857aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    peak_window_idx = 0;
2858aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                peak_avg = 0;
2859aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                for(id = 0; id < PEAK_WINDOW_SIZE; id++)
2860aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2861aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    peak_avg += peak_window[id];
2862aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2863aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                peak_avg /= PEAK_WINDOW_SIZE;
2864aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(peak_avg > peak_avg_max)
2865aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    peak_avg_max = peak_avg;
2866aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                frm_cnt++;
2867aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2868aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("FrameNum: %4d TimeTaken(microsec): %6d AvgTime: %6d PeakAvgTimeMax: %6d Output: %2d NumBytes: %6d \n",
2869aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                       frm_cnt, s_elapsed_time, u4_tot_cycles / frm_cnt, peak_avg_max, s_video_decode_op.u4_output_present, s_video_decode_op.u4_num_bytes_consumed);
2870aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2871aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2872aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef INTEL_CE5300
2873aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            time_consumed += s_elapsed_time;
2874aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            bytes_consumed += s_video_decode_op.u4_num_bytes_consumed;
2875aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(!(frm_cnt % (s_app_ctx.fps)))
2876aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2877aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                time_consumed = time_consumed / s_app_ctx.fps;
2878aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("Average decode time(micro sec) for the last second = %6d\n", time_consumed);
2879aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("Average bitrate(kb) for the last second = %6d\n", (bytes_consumed * 8) / 1024);
2880aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                time_consumed = 0;
2881aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                bytes_consumed = 0;
2882aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2883aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2884aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2885aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#else
2886aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("%d\n", s_video_decode_op.u4_num_bytes_consumed);
2887aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
2888aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2889aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(IV_SUCCESS != ret)
2890aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2891aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                printf("Error in video Frame decode : ret %x Error %x\n", ret,
2892aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                       s_video_decode_op.u4_error_code);
2893aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if ((s_video_decode_op.u4_error_code & 0xFF) == IVD_RES_CHANGED)
2894aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2895aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ivd_ctl_reset_ip_t s_ctl_ip;
2896aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ivd_ctl_reset_op_t s_ctl_op;
2897aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2898aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    flush_output(codec_obj, &s_app_ctx, ps_out_buf,
2899aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 pu1_bs_buf, &u4_op_frm_ts,
2900aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 ps_op_file, ps_op_chksum_file,
2901aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 u4_ip_frm_ts, u4_bytes_remaining);
2902aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2903aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2904aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_RESET;
2905aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_ctl_ip.u4_size = sizeof(ivd_ctl_reset_ip_t);
2906aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    s_ctl_op.u4_size = sizeof(ivd_ctl_reset_op_t);
2907aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2908aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_ip,
2909aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           (void *)&s_ctl_op);
2910aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if(IV_SUCCESS != ret)
2911aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2912aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        sprintf(ac_error_str, "Error in Reset");
2913aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        codec_exit(ac_error_str);
2914aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2915aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /*************************************************************************/
2916aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /* set num of cores                                                      */
2917aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /*************************************************************************/
2918aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2919aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2920aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        impeg2d_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
2921aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        impeg2d_ctl_set_num_cores_op_t s_ctl_set_cores_op;
2922aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2923aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2924aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_cores_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_SET_NUM_CORES;
2925aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_cores_ip.u4_num_cores = s_app_ctx.u4_num_cores;
2926aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_cores_ip.u4_size = sizeof(impeg2d_ctl_set_num_cores_ip_t);
2927aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_cores_op.u4_size = sizeof(impeg2d_ctl_set_num_cores_op_t);
2928aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2929aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_set_cores_ip,
2930aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                               (void *)&s_ctl_set_cores_op);
2931aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        if(ret != IV_SUCCESS)
2932aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        {
2933aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            sprintf(ac_error_str, "\nError in setting number of cores");
2934aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            codec_exit(ac_error_str);
2935aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        }
2936aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2937aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2938aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /*************************************************************************/
2939aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /* set processsor                                                        */
2940aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    /*************************************************************************/
2941aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2942aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
2943aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2944aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        impeg2d_ctl_set_processor_ip_t s_ctl_set_num_processor_ip;
2945aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        impeg2d_ctl_set_processor_op_t s_ctl_set_num_processor_op;
2946aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2947aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2948aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_SET_PROCESSOR;
2949aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_ip.u4_arch = s_app_ctx.e_arch;
2950aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_ip.u4_soc = s_app_ctx.e_soc;
2951aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_ip.u4_size = sizeof(impeg2d_ctl_set_processor_ip_t);
2952aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        s_ctl_set_num_processor_op.u4_size = sizeof(impeg2d_ctl_set_processor_op_t);
2953aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2954aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_set_num_processor_ip,
2955aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                               (void *)&s_ctl_set_num_processor_op);
2956aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        if(ret != IV_SUCCESS)
2957aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        {
2958aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            sprintf(ac_error_str, "\nError in setting Processor type");
2959aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            codec_exit(ac_error_str);
2960aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        }
2961aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2962aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
2963aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2964aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2965aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else if(IMPEG2D_UNSUPPORTED_DIMENSIONS
2966aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                == (IMPEG2D_ERROR_CODES_T)s_video_decode_op.u4_error_code)
2967aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
2968aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    flush_output(codec_obj, &s_app_ctx, ps_out_buf,
2969aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 pu1_bs_buf, &u4_op_frm_ts,
2970aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 ps_op_file, ps_op_chksum_file,
2971aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                 u4_ip_frm_ts, u4_bytes_remaining);
2972aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2973aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    printf("Reinit codec with width %d and height %d\n",
2974aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_video_decode_op.u4_pic_wd,
2975aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                           s_video_decode_op.u4_pic_ht);
2976aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2977aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
2978aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
2979aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2980aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2981aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((1 == s_app_ctx.display) &&
2982aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (1 == s_video_decode_op.u4_output_present))
2983aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2984aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                dispq_producer_queue(&s_app_ctx);
2985aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
2986aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2987aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(IV_B_FRAME == s_video_decode_op.e_pic_type)
2988aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_app_ctx.b_pic_present |= 1;
2989aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2990aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_num_bytes_dec = s_video_decode_op.u4_num_bytes_consumed;
2991aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2992aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            file_pos += u4_num_bytes_dec;
2993aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            total_bytes_comsumed += u4_num_bytes_dec;
2994aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_ip_frm_ts++;
2995aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2996aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2997aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(1 == s_video_decode_op.u4_output_present)
2998aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
2999aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                width = s_video_decode_op.s_disp_frm_buf.u4_y_wd;
3000aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                height = s_video_decode_op.s_disp_frm_buf.u4_y_ht;
3001aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                dump_output(&s_app_ctx, &(s_video_decode_op.s_disp_frm_buf),
3002aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_video_decode_op.u4_disp_buf_id, ps_op_file,
3003aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            ps_op_chksum_file,
3004aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            u4_op_frm_ts, s_app_ctx.u4_file_save_flag,
3005aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            s_app_ctx.u4_chksum_save_flag);
3006aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3007aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_op_frm_ts++;
3008aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
3009aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
3010aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
3011aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if((s_video_decode_op.u4_error_code >> IVD_FATALERROR) & 1)
3012aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
3013aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    printf("Fatal error\n");
3014aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
3015aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
3016aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
3017aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3018aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3019aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3020aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3021aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3022aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*      To get the last decoded frames, call process with NULL input    */
3023aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3024aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    flush_output(codec_obj, &s_app_ctx, ps_out_buf,
3025aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 pu1_bs_buf, &u4_op_frm_ts,
3026aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 ps_op_file, ps_op_chksum_file,
3027aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 u4_ip_frm_ts, u4_bytes_remaining);
3028aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3029aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* set disp_end flag */
3030aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_app_ctx.quit = 1;
3031aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3032aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3033aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifdef PROFILE_ENABLE
3034aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Summary\n");
3035aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Input filename                  : %s\n", s_app_ctx.ac_ip_fname);
3036aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Output Width                    : %-4d\n", width);
3037aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    printf("Output Height                   : %-4d\n", height);
3038aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3039aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(frm_cnt)
3040aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3041aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        double avg = u4_tot_cycles / frm_cnt;
3042aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        double bytes_avg = total_bytes_comsumed / frm_cnt;
3043aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        double bitrate = (bytes_avg * 8 * s_app_ctx.fps) / 1000000;
3044aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Bitrate @ %2d fps(mbps)          : %-6.2f\n", s_app_ctx.fps, bitrate);
3045aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Average decode time(micro sec)  : %-6d\n", (WORD32)avg);
3046aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        printf("Avg Peak decode time(%2d frames) : %-6d\n", PEAK_WINDOW_SIZE, (WORD32)peak_avg_max);
3047aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        avg = (u4_tot_cycles + u4_tot_fmt_cycles) * 1.0 / frm_cnt;
3048aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3049aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(0 == s_app_ctx.share_disp_buf)
3050aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("FPS achieved (with format conv) : %-3.2f\n", 1000000 / avg);
3051aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
3052aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            printf("FPS achieved                    : %-3.2f\n", 1000000 / avg);
3053aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3054aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif
3055aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3056aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*   Clear the decoder, close all the files, free all the memory       */
3057aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3058aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(1 == s_app_ctx.display)
3059aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3060aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_app_ctx.display_deinit_flag = 1;
3061aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* wait for display to finish */
3062aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(s_app_ctx.display_thread_created)
3063aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
3064aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ithread_join(s_app_ctx.display_thread_handle, NULL);
3065aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3066aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        free(s_app_ctx.display_thread_handle);
3067aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3068aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3069aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3070aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        iv_retrieve_mem_rec_ip_t s_retrieve_dec_ip;
3071aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        iv_retrieve_mem_rec_op_t s_retrieve_dec_op;
3072aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_retrieve_dec_ip.pv_mem_rec_location = (iv_mem_rec_t *)pv_mem_rec_location;
3073aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3074aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_retrieve_dec_ip.e_cmd = IV_CMD_RETRIEVE_MEMREC;
3075aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_retrieve_dec_ip.u4_size = sizeof(iv_retrieve_mem_rec_ip_t);
3076aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_retrieve_dec_op.u4_size = sizeof(iv_retrieve_mem_rec_op_t);
3077aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3078aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_retrieve_dec_ip,
3079aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                   (void *)&s_retrieve_dec_op);
3080aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3081aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(IV_SUCCESS != ret)
3082aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
3083aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            sprintf(ac_error_str, "Error in Retrieve Memrec");
3084aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            codec_exit(ac_error_str);
3085aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3086aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3087aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
3088aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            iv_mem_rec_t *ps_mem_rec;
3089aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            UWORD16 u2_i;
3090aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3091aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_num_mem_recs = s_retrieve_dec_op.u4_num_mem_rec_filled;
3092aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3093aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_mem_rec = s_retrieve_dec_ip.pv_mem_rec_location;
3094aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3095aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for(u2_i = 0; u2_i < u4_num_mem_recs; u2_i++)
3096aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
3097aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                app_aligned_free(ps_mem_rec->pv_base);
3098aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_mem_rec++;
3099aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
3100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            free(s_retrieve_dec_ip.pv_mem_rec_location);
3101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*              Close all the files and free all the memory            */
3106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /***********************************************************************/
3107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        fclose(ps_ip_file);
3109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.u4_file_save_flag)
3111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
3112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fclose(ps_op_file);
3113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(1 == s_app_ctx.u4_chksum_save_flag)
3115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
3116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            fclose(ps_op_chksum_file);
3117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
3118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(0 == s_app_ctx.share_disp_buf)
3122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        free(ps_out_buf->pu1_bufs[0]);
3124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    for(i = 0; i < s_app_ctx.num_disp_buf; i++)
3127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
3128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        free(s_app_ctx.s_disp_buffers[i].pu1_bufs[0]);
3129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
3130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    free(ps_out_buf);
3132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    free(pu1_bs_buf);
3133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (0);
3135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
3136