1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =============================================================================
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             Texas Instruments OMAP(TM) Platform Software
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
25b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  Use of this software is controlled by the terms and conditions found
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_VideoEnc_Utils.h
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
31b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* This file implements OMX Component for MPEG-4 encoder that
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* is fully compliant with the OMX specification 1.5.
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path  $(CSLPATH)\inc
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev  0.1
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------- */
39b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* =============================================================================
40b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*!
41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! Revision History
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ================================================================
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
44b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 02-Feb-2006 mf: Revisions appear in reverse chronological order;
45b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! that is, newest first.  The date format is dd-Mon-yyyy.
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_VIDEOENC_UTILS__H
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_VIDEOENC_UTILS__H
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_DspCodec.h"
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_Types.h"
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_CodecInterface.h"
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <ResourceManagerProxyAPI.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_VideoEnc_DSP.h"
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include "perf.h"
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #endif
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_TI_Debug.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h>
63b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef LOG_TAG
64b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    #undef LOG_TAG
65b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
66b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define LOG_TAG "TI_OMX_VideoEnc"
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <oaf_debug.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <pthread.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_TI_Common.h"
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <utils/Log.h>
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* this is the max of VIDENC_MAX_NUM_OF_IN_BUFFERS and VIDENC_MAX_NUM_OF_OUT_BUFFERS */
76e7a8c5109b8019f9ecf3b520813cd672ad3e3b2c<Benny.Wong@motorola.com>#define VIDENC_MAX_NUM_OF_BUFFERS     10
77e7a8c5109b8019f9ecf3b520813cd672ad3e3b2c<Benny.Wong@motorola.com>#define VIDENC_MAX_NUM_OF_IN_BUFFERS  10
78e7a8c5109b8019f9ecf3b520813cd672ad3e3b2c<Benny.Wong@motorola.com>#define VIDENC_MAX_NUM_OF_OUT_BUFFERS 10
79e7a8c5109b8019f9ecf3b520813cd672ad3e3b2c<Benny.Wong@motorola.com>#define VIDENC_NUM_OF_IN_BUFFERS  5
80e7a8c5109b8019f9ecf3b520813cd672ad3e3b2c<Benny.Wong@motorola.com>#define VIDENC_NUM_OF_OUT_BUFFERS 10
81b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define VIDENC_NUM_OF_PORTS 2
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
84b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define VIDENC_MAXBITRATES 7
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
86b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#if 1
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define GPP_PRIVATE_NODE_HEAP
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __KHRONOS_CONF__
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __KHRONOS_CONF_1_1__
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
97b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define KHRONOS_1_2
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
100b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define VIDENC_MAX_COMPONENT_TIMEOUT 0xFFFFFFFF
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_NOPORT 0xFFFFFFFE
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAXNUMSLCGPS 8  /*< max. number of slice groups*/
103b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* Remove after OMX 1.1 migration */
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef __KHRONOS_CONF_1_1__
105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    #define OMX_BUFFERFLAG_SYNCFRAME 0x00000040
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_LFRAMETYPE_H264 1
1086bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong#define OMX_LFRAMETYPE_IDR_H264 4
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CFRAMETYPE_MPEG4 1
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*Select Timeout */
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define  VIDENC_TIMEOUT_SEC 120;
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define  VIDENC_TIMEOUT_USEC 0;
113b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define WVGA_MAX_WIDTH 854
114b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define WVGA_MAX_HEIGHT WVGA_MAX_WIDTH
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Definition of capabilities index and structure
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Needed to inform OpenCore about component capabilities.
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PV_OMXComponentCapabilityFlagsType
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* OMX COMPONENT CAPABILITY RELATED MEMBERS*/
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iIsOMXComponentMultiThreaded;
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentSupportsPartialFrames;
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentUsesNALStartCode;
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL iOMXComponentUsesFullAVCFrames;
133b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} PV_OMXComponentCapabilityFlagsType;
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Redirects control flow in an error situation.
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * The OMX_CONF_CMD_BAIL label is defined inside the calling function.
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_BAIL_IF_ERROR(_eError)                     \
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(_eError != OMX_ErrorNone) {                          \
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;                             \
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_VIDENC_BAIL_IF_ERROR(_eError, _hComp)           \
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
148b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if(_eError != OMX_ErrorNone) {  \
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        _eError = OMX_VIDENC_HandleError(_hComp, _eError);  \
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(_eError != OMX_ErrorNone) {                      \
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR5(_hComp->dbg, "*Fatal Error : %x\n", _eError); \
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto OMX_CONF_CMD_BAIL;                         \
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Sets error type and redirects control flow to error handling and cleanup section
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_SET_ERROR_BAIL(_eError, _eCode)\
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    _eError = _eCode;                                       \
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    goto OMX_CONF_CMD_BAIL;                                 \
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_VIDENC_SET_ERROR_BAIL(_eError, _eCode, _hComp)\
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    _eError = _eCode;                                       \
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERROR5(_hComp->dbg, "*Fatal Error : %x\n", eError); \
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDENC_HandleError(_hComp, _eError);                \
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    goto OMX_CONF_CMD_BAIL;                                 \
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Checking paramaters for non-NULL values.
176b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * The macro takes three parameters because inside the code the highest
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *   number of parameters passed for checking in a single instance is three.
178b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * In case one or two parameters are passed, the ramaining parameters
179b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *   are set to 1 (or a nonzero value).
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3)             \
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!_ptr1 || !_ptr2 || !_ptr3){                         \
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;                     \
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;                             \
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Initialize the Circular Buffer data. The Tail and Head pointers are NULL.
191b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*The number of nodes inside the circular buffer is equal to zero.
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Also the number of nodes that contains BufferData is iqual zero.
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*It should be in the ComponentInit call of the Component.
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_INIT(_pPrivateData_)       \
196b65f253fdc60f6208a54911bee793d225f23cdf8James Dongdo {                                                        \
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pPrivateData_)->sCircularBuffer.pHead = NULL;         \
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pPrivateData_)->sCircularBuffer.pTail = NULL;         \
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pPrivateData_)->sCircularBuffer.nElements = 0;        \
200b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        (_pPrivateData_)->sCircularBuffer.nFillElements = 0;\
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
204b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*Restart the Circular Buffer. The tail points to the same node as the head. The
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*number of fill elements is set to zero. It should be put in the Idle->Execution
206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*transition.
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_RESTART(_sCircular_)       \
209b65f253fdc60f6208a54911bee793d225f23cdf8James Dongdo {                                                        \
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pTail = (_sCircular_).pHead;              \
211b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    (_sCircular_).nFillElements = 0;                        \
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Add node to the Circular Buffer.  Should be use when UseBuffer or AllocateBuffer
216b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*is call. The new node is insert in the head of the list. The it will go the last node
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*and rewrite pNext with the new address of the Head.
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_ADD_NODE(_pPrivateData_, _sCircular_)\
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((_sCircular_).nElements < VIDENC_MAX_NUM_OF_BUFFERS) \
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {                                                       \
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_U8 _i_ = 0;                                      \
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_CIRCULAR_BUFFER_NODE* pTmp = (_sCircular_).pHead;\
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        VIDENC_MALLOC( (_sCircular_).pHead,                 \
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        sizeof(OMX_CONF_CIRCULAR_BUFFER_NODE),\
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_CONF_CIRCULAR_BUFFER_NODE,      \
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (_pPrivateData_)->pMemoryListHead,  \
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (_pPrivateData_)->dbg);             \
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).nElements++;                          \
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(!pTmp){                                           \
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pHead->pNext = (_sCircular_).pHead;\
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pTail = (_sCircular_).pHead;      \
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else{                                               \
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pHead->pNext = pTmp;              \
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            for(_i_=2 ; _i_ < (_sCircular_).nElements; _i_++) \
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pTmp = pTmp->pNext;                     \
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTmp->pNext = (_sCircular_).pHead;              \
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* Will move the Tail of the Cirular Buffer to the next element. In the tail resides the last buffer to enter
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*the component from the Application layer. It will get all the Data to be propageted from
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* the pBufferHeader and write it in the node. Then it will move the Tail to the next element.
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*It should be put in the function that handles the filled buffer from the application.
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_MOVE_TAIL(_pBufHead_, _sCircular_, _pPrivateData_)\
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((_pPrivateData_)->pMarkBuf){                        \
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).pTail->pMarkData = (_pPrivateData_)->pMarkBuf->pMarkData;\
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).pTail->hMarkTargetComponent = (_pPrivateData_)->pMarkBuf->hMarkTargetComponent;\
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_pPrivateData_)->pMarkBuf = NULL;                  \
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else{                                                   \
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).pTail->pMarkData = (_pBufHead_)->pMarkData; \
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).pTail->hMarkTargetComponent = (_pBufHead_)->hMarkTargetComponent;\
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pTail->nTickCount = (_pBufHead_)->nTickCount;\
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pTail->nTimeStamp = (_pBufHead_)->nTimeStamp;\
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pTail->nFlags = (_pBufHead_)->nFlags;      \
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pTail = (_sCircular_).pTail->pNext;       \
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).nFillElements++;                          \
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(((_sCircular_).pTail == (_sCircular_).pHead) &&      \
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_sCircular_).nFillElements != 0)){                 \
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE2((_pPrivateData_)->dbg, "**Warning:Circular Buffer Full.\n"); \
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Will move the Head of the Circular Buffer to the next element. In the head is the Data of the first Buffer
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*to enter to the Application layer. It will propagate the Data and put it in the pBufferHeader
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*that goes to the Application layer. Then it will move the Head to the Next element.
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*It should be put in the function that handles the filled buffers that comes from the DSP.
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_MOVE_HEAD(_pBufHead_, _sCircular_, _pPrivateData_) \
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                         \
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pBufHead_)->pMarkData = (_sCircular_).pHead->pMarkData;\
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pBufHead_)->hMarkTargetComponent = (_sCircular_).pHead->hMarkTargetComponent;\
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pBufHead_)->nTickCount = (_sCircular_).pHead->nTickCount;\
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pBufHead_)->nTimeStamp = (_sCircular_).pHead->nTimeStamp;\
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_pBufHead_)->nFlags = (_sCircular_).pHead->nFlags;      \
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).pHead = (_sCircular_).pHead->pNext;       \
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_sCircular_).nFillElements--;                          \
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(((_sCircular_).pTail == (_sCircular_).pHead) &&      \
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_sCircular_).nFillElements == 0)){                 \
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE1((_pPrivateData_)->dbg, "**Note:Circular Buffer Empty.\n"); \
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*This Macro will delete a node from the Circular Buffer. It will rearrenge the conections
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*between the nodes, and restart the CircularBuffer. The Tail and Head will point to the same
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*location and the nFillElement will be set to 0. It should be in the FreeBuffer call.
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CIRCULAR_BUFFER_DELETE_NODE(_pPrivateData_, _sCircular_)\
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_CIRCULAR_BUFFER_NODE* pTmp1 = (_sCircular_).pHead;\
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_CIRCULAR_BUFFER_NODE* pTmp2 = NULL;            \
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(((_sCircular_).pHead != NULL) &&                     \
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_sCircular_).pTail != NULL)){                      \
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while(pTmp1->pNext != (_sCircular_).pHead){         \
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTmp2 = pTmp1;                                  \
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTmp1 = pTmp1->pNext;                           \
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        VIDENC_FREE(pTmp1,(_pPrivateData_)->pMemoryListHead, (_pPrivateData_)->dbg); \
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).nElements--;                          \
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_sCircular_).nFillElements = 0;                    \
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pTmp2 != NULL){                                  \
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTmp2->pNext = (_sCircular_).pHead;             \
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pTail = (_sCircular_).pHead;      \
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {                                              \
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pHead = NULL;                     \
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (_sCircular_).pTail = NULL;                     \
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }                                                   \
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Checking for version compliance.
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * If the nSize of the OMX structure is not set, raises bad parameter error.
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * In case of version mismatch, raises a version mismatch error.
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_CHK_VERSION(_s_, _name_, _e_)              \
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((_s_)->nSize != sizeof(_name_)) _e_ = OMX_ErrorBadParameter; \
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(((_s_)->nVersion.s.nVersionMajor != 0x1)||           \
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_s_)->nVersion.s.nVersionMinor != 0x0)||           \
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_s_)->nVersion.s.nRevision != 0x0)||               \
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((_s_)->nVersion.s.nStep != 0x0)) _e_ = OMX_ErrorVersionMismatch;\
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(_e_ != OMX_ErrorNone) goto OMX_CONF_CMD_BAIL;        \
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Initializes a data structure using a pointer to the structure.
341b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * The initialization of OMX structures always sets up the nSize and nVersion fields
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *   of the structure.
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_CONF_INIT_STRUCT(_s_, _name_)       \
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                            \
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nSize = sizeof(_name_);              \
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nVersion.s.nVersionMajor = 0x1;      \
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nVersion.s.nVersionMinor = 0x0;      \
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nVersion.s.nRevision     = 0x0;      \
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nVersion.s.nStep         = 0x0;      \
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
352b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
353b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Event Handler Macro*/
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_VIDENC_EVENT_HANDLER(_hComponent_, _eEvent_, _nData1_, _nData2_, _pEventData_) \
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((_hComponent_)->bHideEvents != OMX_TRUE )            \
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (_hComponent_)->sCbData.EventHandler((_hComponent_)->pHandle, \
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            (_hComponent_)->pHandle->pApplicationPrivate, \
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            _eEvent_,       \
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            _nData1_,       \
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            _nData2_,       \
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            _pEventData_);  \
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            \
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1((_hComponent_)->dbg, "EventHandler : %lx : %lx : %lx \n", (OMX_U32) (_eEvent_), (OMX_U32) (_nData1_), (OMX_U32) (_nData2_)); \
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            \
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define VIDENC_MALLOC(_p_, _s_, _c_, _h_, dbg)              \
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    _p_ = (_c_*)malloc(_s_);                                \
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (_p_ == NULL) {                                      \
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(dbg, "malloc() error.\n");               \
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;            \
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;                             \
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {                                                  \
378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_TRACE1(dbg, "malloc() -> %p\n", _p_);           \
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset((_p_), 0x0, _s_);                                \
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((_p_) == NULL) {                                    \
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(dbg, "memset() error.\n");               \
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;                        \
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;                             \
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_VIDENC_ListAdd(&(dbg), _h_, _p_);          \
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError == OMX_ErrorInsufficientResources) {         \
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(dbg, "malloc() error.\n");               \
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;                             \
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                       \
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define VIDENC_FREE(_p_, _h_, dbg)                          \
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo {                                                        \
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDENC_ListRemove((&dbg), _h_, _p_);                \
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    _p_ = NULL;                                             \
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} while(0)
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDENC_NODE
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pData;
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct VIDENC_NODE* pNext;
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}VIDENC_NODE;
404b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum VIDEOENC_PORT_INDEX
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_INPUT_PORT = 0x0,
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_OUTPUT_PORT
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDEOENC_PORT_INDEX;
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Custom set/get param */
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDENC_CUSTOM_DEFINITION
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 cCustomName[128];
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_INDEXTYPE nCustomIndex;
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDENC_CUSTOM_DEFINITION;
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct OMX_CONF_CIRCULAR_BUFFER_NODE
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE hMarkTargetComponent;
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pMarkData;
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nTickCount;
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_TICKS nTimeStamp;
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nFlags;
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_CONF_CIRCULAR_BUFFER_NODE* pNext;
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} OMX_CONF_CIRCULAR_BUFFER_NODE;
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct OMX_CONF_CIRCULAR_BUFFER
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_CONF_CIRCULAR_BUFFER_NODE* pHead;
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_CONF_CIRCULAR_BUFFER_NODE* pTail;
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nElements;
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nFillElements;
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} OMX_CONF_CIRCULAR_BUFFER;
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef enum VIDENC_CUSTOM_INDEX
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #ifdef KHRONOS_1_2
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        VideoEncodeCustomParamIndexVBVSize = OMX_IndexVendorStartUnused,
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #else
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        VideoEncodeCustomParamIndexVBVSize = OMX_IndexIndexVendorStartUnused,
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #endif
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomParamIndexDeblockFilter,
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexForceIFrame,
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexIntraFrameInterval,
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexTargetFrameRate,
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexQPI,
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexAIRRate,
449b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VideoEncodeCustomConfigIndexUnrestrictedMV,
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Segment mode Metadata*/
451b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VideoEncodeCustomConfigIndexMVDataEnable,
452b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VideoEncodeCustomConfigIndexResyncDataEnable,
453b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /*ASO*/
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexNumSliceASO,
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexAsoSliceOrder,
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*FMO*/
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexNumSliceGroups,
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexSliceGroupMapType,
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexSliceGroupChangeDirectionFlag,
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexSliceGroupChangeRate,
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexSliceGroupChangeCycle,
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexSliceGroupParams,
463b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /*others*/
464b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VideoEncodeCustomConfigIndexMIRRate,
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexMaxMVperMB,
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexIntra4x4EnableIdc,
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*only for H264*/
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomParamIndexEncodingPreset,
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomParamIndexNALFormat,
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* debug config */
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VideoEncodeCustomConfigIndexDebug
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDENC_CUSTOM_INDEX;
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum VIDENC_BUFFER_OWNER
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_BUFFER_WITH_CLIENT = 0x0,
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_BUFFER_WITH_COMPONENT,
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_BUFFER_WITH_DSP,
479b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VIDENC_BUFFER_WITH_TUNNELEDCOMP
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDENC_BUFFER_OWNER;
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum VIDENC_AVC_NAL_FORMAT
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
484b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VIDENC_AVC_NAL_UNIT = 0,    /*Default, one buffer per frame, no NAL mode*/
485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VIDENC_AVC_NAL_SLICE,       /*One NAL unit per buffer, one or more NAL units conforms a Frame*/
486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    VIDENC_AVC_NAL_FRAME        /*One frame per buffer, one or more NAL units inside the buffer*/
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}VIDENC_AVC_NAL_FORMAT;
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDENC_BUFFER_PRIVATE
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
491b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PTR pMetaData;/*pointer to metadata structure, this structure is used when MPEG4 segment mode is enabled  */
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBufferHdr;
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pUalgParam;
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_BUFFER_OWNER eBufferOwner;
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bAllocByComponent;
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bReadFromPipe;
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDENC_BUFFER_PRIVATE;
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDENC_MPEG4_SEGMENTMODE_METADATA
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
501b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    unsigned int mvDataSize;/*unsigned int*/
502b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    unsigned int numPackets;/*unsigned int*/
503b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PTR pMVData;/*pointer to unsigned char MVData[3264]*/
504b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PTR pResyncData;/*pointer to unsigned char ResyncData[5408]*/
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}VIDENC_MPEG4_SEGMENTMODE_METADATA;
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDEOENC_PORT_TYPE
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBufferCnt;
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nTunnelPort;
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE hTunnelComponent;
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERSUPPLIERTYPE eSupplierSetting;
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef;
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortFormat;
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __KHRONOS_CONF_1_1__
517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VIDEO_PARAM_PROFILELEVELTYPE* pProfileType;
518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_CONFIG_FRAMERATETYPE* pFrameRateConfig;
519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VIDEO_CONFIG_BITRATETYPE* pBitRateTypeConfig;
520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pErrorCorrectionType;
521b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pIntraRefreshType;
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
524b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VIDEO_PARAM_BITRATETYPE* pBitRateType;
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_BUFFER_PRIVATE* pBufferPrivate[VIDENC_MAX_NUM_OF_BUFFERS];
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDEOENC_PORT_TYPE;
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef KHRONOS_1_2
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum OMX_EXTRADATATYPE
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
531b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_ExtraDataNone = 0,
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ExtraDataQuantization
533b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} OMX_EXTRADATATYPE;
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct OMX_OTHER_EXTRADATATYPE_1_1_2
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
538b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nSize;
539b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_VERSIONTYPE nVersion;
540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nPortIndex;
541b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_EXTRADATATYPE eType;
542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nDataSize;
543b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8 data[1];
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} OMX_OTHER_EXTRADATATYPE_1_1_2;
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
546b3c895c1b4ef6c6986c7c5bebfadd43de3671995Benny Wongtypedef struct VIDEO_PROFILE_LEVEL
547b3c895c1b4ef6c6986c7c5bebfadd43de3671995Benny Wong{
548b3c895c1b4ef6c6986c7c5bebfadd43de3671995Benny Wong    OMX_S32  nProfile;
549b3c895c1b4ef6c6986c7c5bebfadd43de3671995Benny Wong    OMX_S32  nLevel;
550b3c895c1b4ef6c6986c7c5bebfadd43de3671995Benny Wong} VIDEO_PROFILE_LEVEL_TYPE;
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
55224ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong/* ======================================================================= */
55324ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong/**
55424ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong * pthread variable to indicate OMX returned all buffers to app
55524ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong */
55624ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong/* ======================================================================= */
55724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dongpthread_mutex_t bufferReturned_mutex;
55824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dongpthread_cond_t bufferReturned_condition;
55924ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
561b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * The VIDENC_COMPONENT_PRIVATE data structure is used to store component's
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *                              private data.
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct VIDENC_COMPONENT_PRIVATE
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PORT_PARAM_TYPE* pPortParamType;
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDEOENC_PORT_TYPE* pCompPort[VIDENC_NUM_OF_PORTS];
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __KHRONOS_CONF_1_1__
569b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PORT_PARAM_TYPE* pPortAudioType;
570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PORT_PARAM_TYPE* pPortImageType;
571b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PORT_PARAM_TYPE* pPortOtherType;
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRIORITYMGMTTYPE* pPriorityMgmt;
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_AVCTYPE* pH264;
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_CONFIG_AVCINTRAPERIOD*  pH264IntraPeriod;  /* for intraFrameInterval */
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_MOTIONVECTORTYPE* pMotionVector;     /* for searchRange, maxMVperMB, qpi */
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_MPEG4TYPE* pMpeg4;
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_H263TYPE* pH263;
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_BITRATETYPE* pVidParamBitrate;
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VIDEO_PARAM_QUANTIZATIONTYPE* pQuantization;
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CALLBACKTYPE sCbData;
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle;
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_STATETYPE eState;
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VERSIONTYPE ComponentVersion;
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VERSIONTYPE SpecVersion;
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_STRING cComponentName;
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nFree_oPipe[2];
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nFilled_iPipe[2];
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nCmdPipe[2];
592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int nCmdDataPipe[2];
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void* pModLcml;
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void* pLcmlHandle;
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE* pLCML;
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nFrameCnt;
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE pPERF, pPERFcomp;
599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nLcml_nCntIp;
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nLcml_nCntOpReceived;
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    unsigned int nVBVSize;
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_MARKTYPE* pMarkBuf;
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pMarkData;
605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_HANDLETYPE hMarkTargetComponent;
606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nFlags;
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* these are duplicates */
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned int nIntraFrameInterval;  /* should be OMX_VIDEO_CONFIG_AVCINTRAPERIOD */
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned int nTargetFrameRate;  /* should be OMX_CONFIG_FRAMERATETYPE */
6106bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    unsigned int nPrevTargetFrameRate;
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned int nQPI;              /* same as OMX_VIDEO_PARAM_QUANTIZATIONTYPE */
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned int nAIRRate;          /* same as OMX_VIDEO_PARAM_INTRAREFRESHTYPE */
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned int nTargetBitRate;    /* should be OMX_VIDEO_CONFIG_BITRATETYPE */
614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nMIRRate;
615b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8  ucUnrestrictedMV;
6166bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    OMX_BOOL bSentFirstSpsPps;
617eb6da54ec5a57e2f7219330d36a37213a850db17James Dong    unsigned char *sps;
618eb6da54ec5a57e2f7219330d36a37213a850db17James Dong    OMX_U32  spsLen;
619b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nInBufferSize;
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nOutBufferSize;
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
623b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_mutex_t mVideoEncodeBufferMutex;
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bDeblockFilter;
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bCodecStarted;
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bCodecLoaded;
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bDSPStopAck;
629b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL bForceIFrame;
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bFlushComplete;
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bHideEvents;
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bHandlingFatalError;
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bUnresponsiveDsp;
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_NODE*  pMemoryListHead;
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_CIRCULAR_BUFFER sCircularBuffer;
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __KHRONOS_CONF__
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __KHRONOS_CONF_1_1__
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE componentRole;
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bPassingIdleToLoaded;
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bErrorLcmlHandle;
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_t ComponentThread;
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*ASO*/
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 numSliceASO;
648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 asoSliceOrder[MAXNUMSLCGPS];
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*FMO*/
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 numSliceGroups;
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 sliceGroupMapType;
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 sliceGroupChangeDirectionFlag;
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 sliceGroupChangeRate;
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 sliceGroupChangeCycle;
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 sliceGroupParams[MAXNUMSLCGPS];
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_mutex_t videoe_mutex;   /* pthread_cond_t  control_cond; */
658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_mutex_t videoe_mutex_app;
659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_cond_t  populate_cond;
660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_cond_t  unpopulate_cond;
661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_cond_t  stop_cond;
662b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_cond_t  flush_cond;
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_Event AlloBuf_event;
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 AlloBuf_waitingsignal;
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_Event InLoaded_event;
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 InLoaded_readytoidle;
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_Event InIdle_event;
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 InIdle_goingtoloaded;
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
6730c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    unsigned int nEncodingPreset;
6740c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    VIDENC_AVC_NAL_FORMAT AVCNALFormat;
6750c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_BOOL bMVDataEnable;
6760c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_BOOL bResyncDataEnable;
6770c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    IH264VENC_Intra4x4Params intra4x4EnableIdc;
6780c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_U32 maxMVperMB;
6790c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong#ifdef RESOURCE_MANAGER_ENABLED
6800c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    RMPROXY_CALLBACKTYPE cRMCallBack;
6810c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong#endif
6820c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_BOOL bPreempted;
6830c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_VIDEO_CODINGTYPE compressionFormats[3];
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COLOR_FORMATTYPE colorFormats[3];
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_TI_Debug dbg;
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PV_OMXComponentCapabilityFlagsType* pCapabilityFlags;
687b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /*Variables neded to manage the VOL header request*/
688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    MP4VE_GPP_SN_UALGInputParams* pTempUalgInpParams;
689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL bRequestVOLHeader;
690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL bWaitingForVOLHeaderBuffer;
691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL bWaitingVOLHeaderCallback;
6920c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong
6930c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    /* Reference count for pending state change requests */
6940c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    OMX_U32 nPendingStateChangeRequests;
6950c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    pthread_mutex_t mutexStateChangeRequest;
6960c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong    pthread_cond_t StateChangeCondition;
6970c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong
6986bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    /* Variable related to variabe frame rate settings */
6996bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    OMX_TICKS nLastUpdateTime;          /* Timstamp of last framerate update */
7006bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    OMX_U32   nFrameRateUpdateInterval; /* Unit is number of frames */
7016bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    OMX_U32   nFrameCount;              /* Number of input frames received since last framerate update */
7026bf5fadc2cc19bc298c4e998657e35cf03644d3dJames Dong    OMX_TICKS nVideoTime;               /* Video duration since last framerate update */
70324ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong
70424ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong    OMX_U32 EmptybufferdoneCount;
70524ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong    OMX_U32 EmptythisbufferCount;
70624ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong    OMX_U32 FillbufferdoneCount;
70724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong    OMX_U32 FillthisbufferCount;
70824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} VIDENC_COMPONENT_PRIVATE;
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef OMX_ERRORTYPE (*fpo)(OMX_HANDLETYPE);
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComp);
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleLcmlEvent(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, TUsnCodecEvent eEvent, void* argsCb []);
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSet(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1);
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSet (VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1);
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetIdle(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetLoaded (VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetExecuting(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetPause (VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandFlush(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1, OMX_BOOL bInternalFlush);
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandDisablePort(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1);
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleCommandEnablePort(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1);
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_Process_FilledInBuf(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_Process_FilledOutBuf(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBufHead);
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_Process_FreeInBuf(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBufHead);
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_Process_FreeOutBuf(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_InitLCML(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_InitDSP_H264Enc(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_InitDSP_Mpeg4Enc(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_LCML_Callback(TUsnCodecEvent event, void* argsCb [10]);
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
754b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE OMX_VIDENC_Allocate_DSPResources (OMX_IN VIDENC_COMPONENT_PRIVATE* pComponentPrivate,
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U32 nPortIndex);
75624ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dongvoid OMX_VIDENC_EmptyDataPipes (VIDENC_COMPONENT_PRIVATE *pComponentPrivate);
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_ListCreate(struct OMX_TI_Debug *dbg, struct VIDENC_NODE** pListHead);
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_ListAdd(struct OMX_TI_Debug *dbg, struct VIDENC_NODE* pListHead, OMX_PTR pData);
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_ListRemove(struct OMX_TI_Debug *dbg, struct VIDENC_NODE* pListHead, OMX_PTR pData);
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_ListDestroy(struct OMX_TI_Debug *dbg, struct VIDENC_NODE* pListHead);
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_VIDENC_HandleError(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_ERRORTYPE eError);
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid OMX_VIDENC_ResourceManagerCallBack(RMPROXY_COMMANDDATATYPE cbData);
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 GetMaxAVCBufferSize(OMX_U32 width, OMX_U32 height);
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
773b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_U32 OMX_VIDENC_GetDefaultBitRate(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
774b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
775b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid printMpeg4Params(MP4VE_GPP_SN_Obj_CreatePhase* pCreatePhaseArgs,
776b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      struct OMX_TI_Debug *dbg);
777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
778b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid printH264CreateParams(H264VE_GPP_SN_Obj_CreatePhase* pCreatePhaseArgs, struct OMX_TI_Debug *dbg);
779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
780b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid printMpeg4UAlgInParam(MP4VE_GPP_SN_UALGInputParams* pUalgInpParams, int printAlways, struct OMX_TI_Debug *dbg);
781b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
782b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid printH264UAlgInParam(H264VE_GPP_SN_UALGInputParams* pUalgInpParams, int printAlways, struct OMX_TI_Debug *dbg);
783b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
7840c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny WongOMX_ERRORTYPE AddStateTransition(VIDENC_COMPONENT_PRIVATE* pComponentPrivate);
7850c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny WongOMX_ERRORTYPE RemoveStateTransition(VIDENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal);
7860c1fc978146aeb80d968d0b27abe70bf84c62ed4Benny Wong
78724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dongvoid OMX_VIDENC_IncrementBufferCountByOne(OMX_U32 *count);
78824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dongvoid OMX_VIDEC_SignalIfAllBuffersAreReturned(VIDENC_COMPONENT_PRIVATE *pComponentPrivate);
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
790