1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  you may not use this file except in compliance with the License.
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  You may obtain a copy of the License at
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  See the License for the specific language governing permissions and
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * limitations under the License.
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ====================================================================
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*             Texas Instruments OMAP(TM) Platform Software
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved.
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* in the license agreement under which this software has been supplied.
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ==================================================================== */
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @file JPEGTestEnc.c
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements OMX Component for JPEG encoder that
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* is fully compliant with the OMX specification 1.5.
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @path  $(CSLPATH)\src
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @rev  0.1
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------------------- */
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! Revision History
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! ===================================
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 22-May-2006 mf: Revisions appear in reverse chronological order;
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! that is, newest first.  The date format is dd-Mon-yyyy.
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ================================================================================= */
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*utilities includes */
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdarg.h>
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sched.h>
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <time.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin//#include <mcheck.h>
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <getopt.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* OMX includes */
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_JpegEnc_CustomCmd.h"
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "JPEGTestEnc.h"
65b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#include "OMX_JpegEnc_Utils.h"
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* DSP recovery includes */
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <qosregistry.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <qosti.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPManager.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPProcessor.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPProcessor_OEM.h>
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define STRESS
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define NSTRESSCASES 1
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define STRESSMULTILOAD 1
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define NUM_OF_PORTS  2
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define NUM_OF_BUFFERSJPEG 1
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_STRING StrJpegEncoder= "OMX.TI.IMAGE.JPEG.ENC";
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
84b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_STRING StrJpegEncoder= "OMX.TI.JPEG.Encoder";
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U8 APPLICATION1_NOTHUMB[]={
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 0 */0, 0, 0, 0, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00,      /* Indicate Exif Data*/
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 10 */ 0x49, 0x49,                                                  /* "Intel" type byte align*/
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x2A, 0x00,                                             /* Confirm "Intel" type byte align*/
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 14 */ 0x08, 0x00, 0x00, 0x00,            /* Offset to first IFDc*/
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x06, 0x00,                     /* Number of IFD as 1*/
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 21 */0x0f, 0x01,                     /* TAG: Make*/
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: Data format is 0x0002, ASCII */
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x0c, 0x00, 0x00, 0x00,  /* Count: number of chars*/
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x56, 0x00, 0x00, 0x00, /* Offset Make data*/
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 33 */0x10, 0x01,                     /* TAG: Model*/
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: Data format is 0x0002, ASCII */
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x05, 0x00, 0x00, 0x00,  /* Count: number of chars*/
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x62, 0x00, 0x00, 0x00, /* Offset Model data*/
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*45*/0x12, 0x01,                     /* TAG: Orientation*/
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x03, 0x00,                    /* Type: Data format is 0x0003,  (short)*/
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00, 0x00, 0x00,  /* Count: number of chars*/
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00, 0x00, 0x00, /* 1 means normal orientation*/
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*57*/0x31, 0x01,                     /* TAG: Software*/
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: ASCII*/
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x08, 0x00, 0x00, 0x00,  /* Count: number of chars*/
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x67, 0x00, 0x00, 0x00, /* Offset*/
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*69*/0x3b, 0x01,                     /* TAG: Artist*/
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: ASCII*/
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x09, 0x00, 0x00, 0x00,  /* Count: number of chars*/
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x6f, 0x00, 0x00, 0x00, /* Offset*/
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 81 */0x69, 0x87,                     /* Exif SubIFD*/
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 83 */ 0x04, 0x00,                    /* Data format is 0x0004, ULInt*/
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*long integer data size is 4bytes/components, so total data length is 1x4=4bytes*/
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 89 */ 0x78, 0x00,0x00, 0x00,             /* Offset of Exif data*/
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*93*/0x9E, 0x00,  0x00, 0x00,    /* Offset to next IFD. As we are saying only one directory( Number of IFD as 1) this indicate the offset of next IFD*/
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*97*/0x53, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x20, 0x26, 0x20, 0x54, 0x49, 0x00, /*Make*/
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*109*/0x4f, 0x4d, 0x41, 0x50,0x00, /*Model*/
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*114*/0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x61, 0x78, 0x00, /*Software*/
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*122*/0x47, 0x65, 0x6f, 0x72, 0x67, 0x65, 0x20, 0x53, 0x00, /*Artist*/
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* exif ub-ID start Here */
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 131 */ 0x03,  0x00,   /* Number of Exif ID*/
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x00, 0x90, /* Exif Version*/
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x07, 0x00,     /*Data format is 0x0007, undefined*/
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x04, 0x00, 0x00, 0x00,         /* number of components is 4.*/
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*Undefined data size is   1bytes/components, so total data length is 4x1=4bytes*/
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x30, 0x32, 0x32, 0x30, /* Exif version number 30 32 32 30 meaning 0220 (2.2)*/
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* next IFD start Here */
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*169*/0x03,  0x00,    /* Number of IFD1*/
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*171*/0x03,  0x01,    /* Compression  (0x0103)*/
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x03, 0x00,                     /*Data format is 0x0003 unsigned short,*/
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*unsigned short  data size is 2bytes/components, so total data length is 1x2=2bytes*/
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*183*/            0x01,  0x02,    /* JpegIFOffset  (0x0201)*/
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*195*/            0x02,  0x02,    /* JpegIFByteCount (0x0202)*/
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*203*/            0xff, 0xff,0xff, 0xff,  /* Legth of thumbnail data*/
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U8 APPLICATION1_THUMB[]={
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 0 */0, 0, 0, 0, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00,      /* Indicate Exif Data*/
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 10 */ 0x49, 0x49,                                                  /* "Intel" type byte align*/
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x2A, 0x00,                                             /* Confirm "Intel" type byte align*/
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 14 */ 0x08, 0x00, 0x00, 0x00,            /* Offset to first IFDc*/
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x06, 0x00,                     /* Number of IFD as 1*/
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 21 */0x0f, 0x01,                     /* TAG: Make*/
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: Data format is 0x0002, ASCII */
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x0c, 0x00, 0x00, 0x00,  /* Count: number of chars*/
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x56, 0x00, 0x00, 0x00, /* Offset Make data*/
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 33 */0x10, 0x01,                     /* TAG: Model*/
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: Data format is 0x0002, ASCII */
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x05, 0x00, 0x00, 0x00,  /* Count: number of chars*/
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x62, 0x00, 0x00, 0x00, /* Offset Model data*/
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*45*/0x12, 0x01,                     /* TAG: Orientation*/
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x03, 0x00,                    /* Type: Data format is 0x0003,  (short)*/
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00, 0x00, 0x00,  /* Count: number of chars*/
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00, 0x00, 0x00, /* 1 means normal orientation*/
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*57*/0x31, 0x01,                     /* TAG: Software*/
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: ASCII*/
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x08, 0x00, 0x00, 0x00,  /* Count: number of chars*/
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x67, 0x00, 0x00, 0x00, /* Offset*/
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*69*/0x3b, 0x01,                     /* TAG: Artist*/
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x02, 0x00,                    /* Type: ASCII*/
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x09, 0x00, 0x00, 0x00,  /* Count: number of chars*/
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x6f, 0x00, 0x00, 0x00, /* Offset*/
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 81 */0x69, 0x87,                     /* Exif SubIFD*/
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 83 */ 0x04, 0x00,                    /* Data format is 0x0004, ULInt*/
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*long integer data size is 4bytes/components, so total data length is 1x4=4bytes*/
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 89 */ 0x78, 0x00,0x00, 0x00,             /* Offset of Exif data*/
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*93*/0x9E, 0x00,  0x00, 0x00,    /* Offset to next IFD. As we are saying only one directory( Number of IFD as 1) this indicate the offset of next IFD*/
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*97*/0x53, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x20, 0x26, 0x20, 0x54, 0x49, 0x00, /*Make*/
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*109*/0x4f, 0x4d, 0x41, 0x50,0x00, /*Model*/
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*114*/0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x61, 0x78, 0x00, /*Software*/
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*122*/0x47, 0x65, 0x6f, 0x72, 0x67, 0x65, 0x20, 0x53, 0x00, /*Artist*/
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* exif ub-ID start Here */
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 131 */ 0x03,  0x00,   /* Number of Exif ID*/
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x00, 0x90, /* Exif Version*/
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x07, 0x00,     /*Data format is 0x0007, undefined*/
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x04, 0x00, 0x00, 0x00,         /* number of components is 4.*/
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*Undefined data size is   1bytes/components, so total data length is 4x1=4bytes*/
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x30, 0x32, 0x32, 0x30, /* Exif version number 30 32 32 30 meaning 0220 (2.2)*/
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*145*/0x02,  0xA0,    /* Exif Image Width  (0xA002)*/
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 153 */ 0xB0, 0x00,0x00, 0x00,     /* Image width  , 0x00000280 i.e. 640*/
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*157*/0x03,  0xA0,    /* Exif Image Width  (0xA003)*/
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 165 */ 0x90, 0x00,0x00, 0x00,     /* Image Height  , 0x000001E0 i.e. 480*/
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* next IFD start Here */
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*169*/0x03,  0x00,    /* Number of IFD1*/
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*171*/0x03,  0x01,    /* Compression  (0x0103)*/
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x03, 0x00,                     /*Data format is 0x0003 unsigned short,*/
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*unsigned short  data size is 2bytes/components, so total data length is 1x2=2bytes*/
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin0x06, 0x00,0x00, 0x00,  /* '6' means JPEG compression.*/
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /*Shows compression method.
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        o   '1' means no compression,
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        o    '6' means JPEG compression.*/
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*183*/            0x01,  0x02,    /* JpegIFOffset  (0x0201)*/
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*191*/            0xc4, 0x00,0x00, 0x00,  /* Address 0f Thumbnail data*/
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*195*/            0x02,  0x02,    /* JpegIFByteCount (0x0202)*/
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x04, 0x00,                     /* Data format is 0x0004, ULInt*/
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0x01, 0x00,  0x00, 0x00,            /* number of components is 1.*/
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*203*/            0xff, 0xff,0xff, 0xff,  /* Legth of thumbnail data*/
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*Set the fist 4 bytes to 0*/
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U8 APPLICATION13[200] = {
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x00, 0x00, 0x00, 0x00, /*We should set the first 4 bytes to 0 */
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x33, 0x2e, 0x30, 0x00,/*Photoshop header*/
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x38, 0x42, 0x49, 0x4d, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x4e, /* Initial marker*/
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*IPTC Marker       TAG         Size of string*/
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x1c,      0x02,       0x78,       0x00, 0x20,
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x54, 0x68, 0x69, 0x73,  0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, /*String of data (ASCII)*/
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x1c, 0x02, 0x7a, 0x00, 0x16,
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x49, 0x27,0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72,
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x1c, 0x02, 0x5a, 0x00, 0x09,
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    0x4d, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x65, 0x79,
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U8 APPLICATION0[19]={0, 0, 0, 0,
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x4A, 0x46, 0x49, 0x46, 0x00, // JFIF Identifier
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x01, 0x02, // Version
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00, // X and Y Unit Densities.
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00, 0x08, // Horizontal Pixel density
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00, 0x09, // Vertical Pixel density
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00,
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00,
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	0x00,
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U8 APPLICATION5[6]={0xff,0xff,0xff,0xff,0xff,0xff};
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinconst OMX_U8 CustomLumaQuantizationTable[64]= {
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin14, 10, 9, 14, 22, 30, 41, 51,
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin12, 12, 14, 19, 26, 58, 60, 55,
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin14, 13, 16, 24, 40, 57, 69, 56,
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin14, 17, 22, 29, 51, 87, 80, 62,
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin18, 22, 37, 56, 68, 109, 103, 77,
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin24, 35, 55, 64, 81, 104, 113, 92,
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin49, 64, 78, 87, 103, 121, 120, 101,
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin72, 92, 95, 98, 112, 100, 103, 99,
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinconst OMX_U8 CustomChromaQuantizationTable[64]= {
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin15, 16, 22, 35, 99, 99, 99, 99,
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin18, 21, 26, 66, 99, 99, 99, 99,
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin24, 26, 56, 99, 99, 99, 99, 99,
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin47, 66, 99, 99, 99, 99, 99, 99,
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin99, 99, 99, 99, 99, 99, 99, 99,
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin99, 99, 99, 99, 99, 99, 99, 99,
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin99, 99, 99, 99, 99, 99, 99, 99,
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin99, 99, 99, 99, 99, 99, 99, 99
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinJPEGENC_CUSTOM_HUFFMAN_TABLE CustomHuffmanTable =
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* VLC Tables */
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set 1 for Y Component */
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*DC-Y*/
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*const unsigned int JPEGENC_DCHUFFY[12] */
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Length[16]-Codeword[16]*/
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00020000,
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030002,
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030003,
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030004,
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030005,
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030006,
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0004000e,
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0005001e,
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0006003e,
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0007007e,
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000800fe,
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000901fe
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*AC-Y*/
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*const unsigned int JPEGENC_ACHUFFY[16][16] */
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Length[16]-Codeword[16]*/
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0004000a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x000b07f9
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00020000, 0x0004000c, 0x0005001c, 0x0006003a, 0x0006003b, 0x0007007a,
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0007007b, 0x000800fa, 0x000901f8, 0x000901f9, 0x000901fa, 0x000a03f9,
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000a03fa, 0x000b07f8, 0x0010ffeb, 0x0010fff5
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00020001, 0x0005001b, 0x000800f9, 0x000901f7, 0x000a03f8, 0x000b07f7,
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000c0ff6, 0x000c0ff7, 0x000f7fc0, 0x0010ffbe, 0x0010ffc7, 0x0010ffd0,
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffd9, 0x0010ffe2, 0x0010ffec, 0x0010fff6
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00030004, 0x00070079, 0x000a03f7, 0x000c0ff5, 0x0010ff96, 0x0010ff9e,
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa6, 0x0010ffae, 0x0010ffb6, 0x0010ffbf, 0x0010ffc8, 0x0010ffd1,
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffda, 0x0010ffe3, 0x0010ffed, 0x0010fff7
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0004000b, 0x000901f6, 0x000c0ff4, 0x0010ff8f, 0x0010ff97, 0x0010ff9f,
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa7, 0x0010ffaf, 0x0010ffb7, 0x0010ffc0, 0x0010ffc9, 0x0010ffd2,
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdb, 0x0010ffe4, 0x0010ffee, 0x0010fff8
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0005001a, 0x000b07f6, 0x0010ff89, 0x0010ff90, 0x0010ff98, 0x0010ffa0,
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa8, 0x0010ffb0, 0x0010ffb8, 0x0010ffc1, 0x0010ffca, 0x0010ffd3,
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdc, 0x0010ffe5, 0x0010ffef, 0x0010fff9
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00070078, 0x0010ff84, 0x0010ff8a, 0x0010ff91, 0x0010ff99, 0x0010ffa1,
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa9, 0x0010ffb1, 0x0010ffb9, 0x0010ffc2, 0x0010ffcb, 0x0010ffd4,
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdd, 0x0010ffe6, 0x0010fff0, 0x0010fffa
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000800f8, 0x0010ff85, 0x0010ff8b, 0x0010ff92, 0x0010ff9a, 0x0010ffa2,
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffaa, 0x0010ffb2, 0x0010ffba, 0x0010ffc3, 0x0010ffcc, 0x0010ffd5,
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffde, 0x0010ffe7, 0x0010fff1, 0x0010fffb
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000a03f6, 0x0010ff86, 0x0010ff8c, 0x0010ff93, 0x0010ff9b, 0x0010ffa3,
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffab, 0x0010ffb3, 0x0010ffbb, 0x0010ffc4, 0x0010ffcd, 0x0010ffd6,
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdf, 0x0010ffe8, 0x0010fff2, 0x0010fffc
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ff82, 0x0010ff87, 0x0010ff8d, 0x0010ff94, 0x0010ff9c, 0x0010ffa4,
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffac, 0x0010ffb4, 0x0010ffbc, 0x0010ffc5, 0x0010ffce, 0x0010ffd7,
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe0, 0x0010ffe9, 0x0010fff3, 0x0010fffd
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ff83, 0x0010ff88, 0x0010ff8e, 0x0010ff95, 0x0010ff9d, 0x0010ffa5,
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffad, 0x0010ffb5, 0x0010ffbd, 0x0010ffc6, 0x0010ffcf, 0x0010ffd8,
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe1, 0x0010ffea, 0x0010fff4, 0x0010fffe
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00000000, 0x00000000, 0x00000000, 0x00000000
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set 2 for U & V Component */
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*DC-UV*/
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*const unsigned int JPEGENC_DCHUFFUV[12] */
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Length[16]-Codeword[16]*/
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00020000,
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00020001,
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00020002,
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00030006,
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0004000e,
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0005001e,
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0006003e,
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x0007007e,
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000800fe,
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000901fe,
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000a03fe,
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x000b07fe
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*AC-UV*/
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*const unsigned int JPEGENC_ACHUFFUV[16][16] */
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Length[16]-Codeword[16]*/
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x000a03fa
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00020001, 0x0004000b, 0x0005001a, 0x0005001b, 0x0006003a, 0x0006003b,
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00070079, 0x0007007a, 0x000800f9, 0x000901f7, 0x000901f8, 0x000901f9,
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000901fa, 0x000b07f9, 0x000e3fe0, 0x000f7fc3
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00030004, 0x00060039, 0x000800f7, 0x000800f8, 0x000901f6, 0x000a03f9,
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000b07f7, 0x000b07f8, 0x0010ffb7, 0x0010ffc0, 0x0010ffc9, 0x0010ffd2,
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdb, 0x0010ffe4, 0x0010ffed, 0x0010fff6
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0004000a, 0x000800f6, 0x000a03f7, 0x000a03f8, 0x0010ff97, 0x0010ff9f,
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa7, 0x0010ffaf, 0x0010ffb8, 0x0010ffc1, 0x0010ffca, 0x0010ffd3,
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdc, 0x0010ffe5, 0x0010ffee, 0x0010fff7
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00050018, 0x000901f5, 0x000c0ff6, 0x000c0ff7, 0x0010ff98, 0x0010ffa0,
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa8, 0x0010ffb0, 0x0010ffb9, 0x0010ffc2, 0x0010ffcb, 0x0010ffd4,
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdd, 0x0010ffe6, 0x0010ffef, 0x0010fff8
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00050019, 0x000b07f6, 0x000f7fc2, 0x0010ff91, 0x0010ff99, 0x0010ffa1,
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffa9, 0x0010ffb1, 0x0010ffba, 0x0010ffc3, 0x0010ffcc, 0x0010ffd5,
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffde, 0x0010ffe7, 0x0010fff0, 0x0010fff9
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00060038, 0x000c0ff5, 0x0010ff8c, 0x0010ff92, 0x0010ff9a, 0x0010ffa2,
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffaa, 0x0010ffb2, 0x0010ffbb, 0x0010ffc4, 0x0010ffcd, 0x0010ffd6,
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffdf, 0x0010ffe8, 0x0010fff1, 0x0010fffa
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00070078, 0x0010ff88, 0x0010ff8d, 0x0010ff93, 0x0010ff9b, 0x0010ffa3,
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffab, 0x0010ffb3, 0x0010ffbc, 0x0010ffc5, 0x0010ffce, 0x0010ffd7,
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe0, 0x0010ffe9, 0x0010fff2, 0x0010fffb
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000901f4, 0x0010ff89, 0x0010ff8e, 0x0010ff94, 0x0010ff9c, 0x0010ffa4,
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffac, 0x0010ffb4, 0x0010ffbd, 0x0010ffc6, 0x0010ffcf, 0x0010ffd8,
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe1, 0x0010ffea, 0x0010fff3, 0x0010fffc
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000a03f6, 0x0010ff8a, 0x0010ff8f, 0x0010ff95, 0x0010ff9d, 0x0010ffa5,
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffad, 0x0010ffb5, 0x0010ffbe, 0x0010ffc7, 0x0010ffd0, 0x0010ffd9,
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe2, 0x0010ffeb, 0x0010fff4, 0x0010fffd
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x000c0ff4, 0x0010ff8b, 0x0010ff90, 0x0010ff96, 0x0010ff9e, 0x0010ffa6,
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffae, 0x0010ffb6, 0x0010ffbf, 0x0010ffc8, 0x0010ffd1, 0x0010ffda,
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x0010ffe3, 0x0010ffec, 0x0010fff5, 0x0010fffe
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        },
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            0x00000000, 0x00000000, 0x00000000, 0x00000000
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* DHT Marker */
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_dc_codelens */
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_dc_ncodes */
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    16,
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_dc_symbols */
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_dc_nsymbols */
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    12,
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_ac_codelens */
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d},
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_ac_ncodes */
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    16,
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_ac_symbols */
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xf9, 0xfa
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* lum_ac_nsymbols */
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    162,
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_dc_codelens */
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0},
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_dc_ncodes */
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    16,
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_dc_symbols */
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_dc_nsymbols */
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    12,
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_ac_codelens */
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77},
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_ac_ncodes */
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    16,
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_ac_symbols */
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0xf9, 0xfa
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    },
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* chm_ac_nsymbols */
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    162
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin};
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef unsigned char uchar;
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Pipe used to communicate back to the main thread from the component thread;
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin**/
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint IpBuf_Pipe[2];
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint OpBuf_Pipe[2];
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint Event_Pipe[2];
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* the FLAG when we need to DeInit the OMX */
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint DEINIT_FLAG = 0;
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* Flag set when component is preempted */
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint bPreempted=0;
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* Hardware error flag */
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL bError = OMX_FALSE;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*function prototypes */
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavininline int maxint(int a, int b);
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE SetMarkers(OMX_HANDLETYPE pHandle, IMAGE_INFO *imageinfo, OMX_CONFIG_RECTTYPE sCrop, int nWidth, int nHeight);
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint LoadBaseImage();
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*Routine to get the maximum of 2 integers */
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavininline int maxint(int a, int b)
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return(a>b) ? a : b;
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will wait for the component or mixer to get to the correct
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * state.  It is not a real implementation, but just simulates what a real
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * wait routine may do.
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin**/
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForState(OMX_HANDLETYPE* pHandle,
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_STATETYPE DesiredState)
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_STATETYPE CurState = OMX_StateInvalid;
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_ERRORTYPE eError = OMX_ErrorNone;
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	int nCnt = 0;
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Inside Test Application WaitForState function\n");
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	eError = pComponent->GetState(pHandle, &CurState);
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	while ( (eError == OMX_ErrorNone) &&
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        (CurState != DesiredState)) {
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sched_yield();
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/*sleep(1);*/
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( nCnt++ == 0xFFFFFFFE ) {
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			fprintf(stderr, "Press CTL-C to continue\n");
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = pComponent->GetState(pHandle, &CurState);
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (CurState == OMX_StateInvalid && DesiredState != OMX_StateInvalid) {
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorInvalidState;
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( eError != OMX_ErrorNone ) {
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		PRINT("Error: Couldn't get state for component or sent to invalid state because of an error.\n");
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		return eError;
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	return OMX_ErrorNone;
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE EventHandler(OMX_HANDLETYPE hComponent,OMX_PTR pAppData,OMX_EVENTTYPE eEvent,
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_U32 nData1, OMX_U32 data2, OMX_PTR pEventData)
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)hComponent;
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE state;
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError;
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    JPEGE_EVENTPRIVATE MyEvent;
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.eEvent = eEvent;
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.nData1 = nData1;
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.nData2 = data2;
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.pAppData = pAppData;
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.pEventInfo = pEventData;
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PRINT("Inside Test Application EventHandler function\n");
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pComponent->GetState (hComponent, &state);
721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( eError != OMX_ErrorNone ) {
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PRINT("Error: From JPEGENC_GetState\n");
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch ( eEvent ) {
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventCmdComplete:
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PRINT ("Component State Changed\n");
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventError:
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (nData1 == OMX_ErrorHardware){
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("\n\nAPP:: ErrorNotification received: Error Num = %p Severity = %ld String  = %s\n", (OMX_PTR)nData1, data2, (OMX_STRING)pEventData);
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("\nAPP:: OMX_ErrorHardware. Deinitialization of the component....\n\n");
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!bError) {
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        bError = OMX_TRUE;
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        write(Event_Pipe[1], &MyEvent, sizeof(JPEGE_EVENTPRIVATE));
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(nData1 == OMX_ErrorResourcesPreempted) {
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    bPreempted = 1;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PRINT("APP:: OMX_ErrorResourcesPreempted !\n\n");
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(nData1 == OMX_ErrorInvalidState) {
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("\n\nAPP:: ErrorNotification received: Error Num = %p Severity = %ld String	= %s\n", (OMX_PTR)nData1, data2, (OMX_STRING)pEventData);
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("\nAPP:: Invalid state\n\n");
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!bError) {
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        bError = OMX_TRUE;
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        write(Event_Pipe[1], &MyEvent, sizeof(JPEGE_EVENTPRIVATE));
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(nData1 == OMX_ErrorPortUnpopulated) {
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("APP:: OMX_ErrorPortUnpopulated\n");
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    		    bError = OMX_TRUE;
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if (nData1 == OMX_ErrorStreamCorrupt) {
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("\n\nAPP:: ErrorNotification received: Error Num = %p Severity = %ld String	= %s\n", (OMX_PTR)nData1, data2, (OMX_STRING)pEventData);
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("%s: Stream Corrupt (%ld %s)\n",__FUNCTION__,data2,(char*)pEventData);
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!bError) {
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    			bError = OMX_TRUE;
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    			write(Event_Pipe[1], &MyEvent, sizeof(JPEGE_EVENTPRIVATE));
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    		    }
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    		    bError = OMX_TRUE;
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    DEINIT_FLAG = 1;
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventResourcesAcquired:
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bPreempted = 0;
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventPortSettingsChanged:
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventBufferFlag:
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PRINT("Event Buffer Flag detected\n");
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventMax:
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventMark:
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PRINT("ErrorNotification received: Error Num %p: String :%s\n", (OMX_PTR)nData1, (OMX_STRING)pEventData);
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return OMX_ErrorNone;
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR ptr,
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     OMX_BUFFERHEADERTYPE* pBuffHead)
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PRINT("Inside Test Application FillBufferDone function\n");
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    write(OpBuf_Pipe[1], &pBuffHead, sizeof(pBuffHead));
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid EmptyBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR ptr,
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     OMX_BUFFERHEADERTYPE* pBuffer)
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PRINT("Inside Test Application EmptyBufferDone function\n");
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    write(IpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBufferPrivate, HANDLE fIn, int buffSize)
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBuf, FILE *fIn, int buffSize)
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRead;
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 oneByte;
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PRINT("Inside Test Application fill_data function\n");
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ReadFile(fIn, pBuf->pBuffer, lSize, &nRead, NULL);
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRead = fread(pBuf->pBuffer,1, buffSize , fIn);
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf ("Buffer Size = %d. Read %d bytes from file. \n", (int) buffSize, (int)nRead);
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBuf->nFilledLen = nRead;
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    oneByte = fgetc(fIn);
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (feof(fIn)){
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuf->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PRINT("Read full file...\n");
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        rewind(fIn);
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ungetc(oneByte, fIn);
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return nRead;
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE SetMarkers(OMX_HANDLETYPE pHandle, IMAGE_INFO *imageinfo, OMX_CONFIG_RECTTYPE sCrop, int nWidth, int nHeight) {
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_ERRORTYPE eError = OMX_ErrorNone;
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_INDEXTYPE nCustomIndex = OMX_IndexMax;
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set APP0 Marker config (JFIF) */
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->bAPP0) {
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		JPEG_APPTHUMB_MARKER sAPP0;
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP0.bMarkerEnabled = OMX_TRUE;
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* set JFIF marker buffer */
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP0.nMarkerSize = sizeof(APPLICATION0);
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP0.pMarkerBuffer = APPLICATION0;
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP0.nThumbnailWidth = imageinfo->nThumbnailWidth_app0;
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP0.nThumbnailHeight = imageinfo->nThumbnailHeight_app0;
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.APP0", (OMX_INDEXTYPE*)&nCustomIndex);
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex, &sAPP0);
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set APP1 Marker config (EXIF) */
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->bAPP1) {
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		JPEG_APPTHUMB_MARKER sAPP1;
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP1.bMarkerEnabled = OMX_TRUE;
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* set JFIF marker buffer */
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP1.nThumbnailWidth = imageinfo->nThumbnailWidth_app1;
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP1.nThumbnailHeight = imageinfo->nThumbnailHeight_app1;
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* if thumbnail is set, use APPLICATION structure with thumbnail */
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if(sAPP1.nThumbnailWidth > 0 && sAPP1.nThumbnailHeight > 0) {
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.nMarkerSize = sizeof(APPLICATION1_THUMB);
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer = APPLICATION1_THUMB;
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else {
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.nMarkerSize = sizeof(APPLICATION1_NOTHUMB);
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer = APPLICATION1_NOTHUMB;
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/*set crop */
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (sCrop.nWidth != 0)
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[152] = sCrop.nWidth & 0xFF;
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[153] = (sCrop.nWidth >> 8) & 0xFF;
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[152] = nWidth & 0xFF;
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[153] = (nWidth >> 8) & 0xFF;
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (sCrop.nHeight != 0)
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[164] = sCrop.nHeight;
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[165] = (sCrop.nHeight >> 8) & 0xFF;
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[164] = nHeight;
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			sAPP1.pMarkerBuffer[165] = (nHeight >> 8) & 0xFF;
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.APP1", (OMX_INDEXTYPE*)&nCustomIndex);
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex, &sAPP1);
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set APP5 Marker config	*/
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->bAPP5) {
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		JPEG_APPTHUMB_MARKER sAPP5;
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP5.bMarkerEnabled = OMX_TRUE;
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* set JFIF marker buffer */
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP5.nMarkerSize = sizeof(APPLICATION5);
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP5.pMarkerBuffer = APPLICATION5;
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP5.nThumbnailWidth = imageinfo->nThumbnailWidth_app5;
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP5.nThumbnailHeight = imageinfo->nThumbnailHeight_app5;
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.APP5", (OMX_INDEXTYPE*)&nCustomIndex);
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex, &sAPP5);
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set APP13 Marker config	*/
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->bAPP13) {
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		JPEG_APP13_MARKER sAPP13;
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP13.bMarkerEnabled = OMX_TRUE;
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* set JFIF marker buffer */
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP13.nMarkerSize = sizeof(APPLICATION13);
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sAPP13.pMarkerBuffer = APPLICATION13;
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.APP13", (OMX_INDEXTYPE*)&nCustomIndex);
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex, &sAPP13);
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* set comment marker */
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->nComment) {
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.CommentFlag", (OMX_INDEXTYPE*)&nCustomIndex);
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex,  &(imageinfo->nComment));
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.CommentString", (OMX_INDEXTYPE*)&nCustomIndex);
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_SetConfig(pHandle, nCustomIndex, imageinfo->pCommentString);
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( eError != OMX_ErrorNone ) {
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("%d::APP_Error at function call: %x\n", __LINE__, eError);
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUndefined;
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	return eError;
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid PrintUsage(void)
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("\ni.. Input File\n");
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("o.. Output File\n");
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("w.. Width Of Image\n");
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("h.. Height Of Image\n");
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("f.. Input Of Image:\n    1.- YUV 420 Planer\n    2.- YUV 422 Interleaved UYVY\n    3.- 32 bit RAW (RGB32)\n    4.- 16 bit RAW (RGB16)\n    5.- YUV 422 Interleaved YUYV\n");
1021b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    printf("z.. 420p to 422i conversion before encode \n");
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("q.. Quality Factor Of Image: 1 to 100\n");
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("b.. Exit Buffer: 1 o 2\n");
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("c.. Marker Comment: The comment string length should be less than 255 characters\n");
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("j.. Marker APP0: Contain Information about JFIF\n");
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("e.. Marker APP1: Contain Information about EXIF\n");
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("d.. Marker APP5: Contain Miscellaneous  Information\n");
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("m.. Marker APP13: Contain Miscellaneous  Information\n");
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("x.. Width of Thumbnail of EXIF (default set to 88)\n");
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("y.. Height of Thumbnail of EXIF (default set to 72)\n");
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("s.. Width of Thumbnail of JFIF (default set to 88)\n");
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("k.. Height of Thumbnail of JFIF (default set to 72)\n");
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("n.. Width of Thumbnail of APP5 (default set to 88)\n");
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("p.. Height of Thumbnail of APP5 (default set to 72)\n");
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("t.. Type of Quantization Table  \n\t 0.-Default Quantization Tables \n\t 1.-Custom Luma And Choma Tables\n");
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("u.. Type of Huffman Table       \n\t 0.-Default Huffman Table        \n\t 1.-Custom Huffman Table\n");
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("r.. No. of times to repeat\n");
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("v.. Crop width value\n");
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("l.. Crop height value\n");
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("\na.. Prints this information\n");
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("\nExample: ./JPEGTestEnc_common -i patterns/JPGE_CONF_003.yuv -o output.jpg -w 176 -h 144 -f 2 -q 100 -b 1 -c JPEG  -j -e -m -x 100 -y 100 -r 1\n\n");
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint _tmain(int argc, TCHAR **argv)
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint main(int argc, char** argv)
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin//mtrace();
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle;
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 AppData = 100;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CALLBACKTYPE JPEGCaBa = {(void *)EventHandler,
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     (void*) EmptyBufferDone,
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     (void*)FillBufferDone};
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int retval;
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nWidth;
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nHeight;
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int framesent = 0;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRepeated = 0;
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int maxRepeat = 1;
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int inputformat;
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int qualityfactor;
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int buffertype;
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bSetCustomHuffmanTable=0;
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bSetCustomQuatizationTable=0;
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sigset_t set;
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE state;
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent;
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    IMAGE_INFO* imageinfo = NULL;
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PORT_PARAM_TYPE* pPortParamType = NULL;
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_IMAGE_PARAM_QFACTORTYPE* pQfactorType = NULL;
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    JPEGENC_CUSTOM_HUFFMANTTABLETYPE *pHuffmanTable = NULL;
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *pQuantizationTable = NULL;
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pInPortDef = NULL;
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pOutPortDef = NULL;
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_RECTTYPE sCrop;
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1086b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL bConvertion_420pTo422i = OMX_FALSE;
1087b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR* szInFile = NULL;
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR* szOutFile = NULL;
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fIn = NULL;
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fOut = NULL;
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DWORD dwWritten;
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* szInFile = NULL;
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* szOutFile = NULL;
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fIn = NULL;
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fOut = NULL;
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pInBuff[NUM_OF_BUFFERSJPEG];
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pOutBuff[NUM_OF_BUFFERSJPEG];
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nCounter = 0;
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax;
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pTemp;
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pInBuffer[NUM_OF_BUFFERSJPEG];
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pOutBuffer[NUM_OF_BUFFERSJPEG];
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuffer;
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuf;
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRead;
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int done;
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_S32 sJPEGEnc_CompID = 300;
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIndex1= 0;
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIndex2 = 0;
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nframerecieved = 0;
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nMultFactor = 0;
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nHeightNew, nWidthNew;
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE nCustomIndex = OMX_IndexMax;
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef STRESS
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int multiload = 0;
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int next_option;
1127b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    const char* const short_options = "i:o:w:h:f:q:b:c:x:y:s:k:t:u:r:v:l:n:p:ajemdvlz";
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    const struct option long_options[] =
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "InputFile",1, NULL, 'i' },
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "OutputFile",1, NULL, 'o' },
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "WidthImage",1, NULL, 'w' },
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "HeightImage",1, NULL, 'h' },
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "inputFormat",1, NULL, 'f' },
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "QualityFactor",1, NULL, 'q' },
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "Ext/IntBuffer",1, NULL, 'b' },
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "MarkerComment",1, NULL, 'c' },
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "EXIFwidthThumbnail",1, NULL, 'x' },
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "EXIFheightThumbnail",1, NULL, 'y' },
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "JFIFwidthThumbnail",1, NULL, 's' },
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "JFIFheightThumbnail",1, NULL, 'k' },
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "APP5heightThumbnail",1, NULL, 'p' },
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "APP5widthThumbnail",1, NULL, 'n' },
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "Repetition",1, NULL, 'r' },
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 	 {"QuantizationTable",1,NULL,'t'},
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 {"HuffmanTable",1,NULL,'u'},
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "help", 0, NULL, 'a' },
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "MarkerAPP0",0,NULL,'j'},
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "MarkerAPP1",0,NULL,'e'},
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "MarkerAPP13",0,NULL,'m'},
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "MarkerAPP5",0,NULL,'d'},
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "CroppedWidth",0,NULL,'v'},
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { "CroppedHeight",0,NULL,'l'},
1154b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        { "420pTo422iConversion",0,NULL,'z'},
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        { NULL, 0, NULL, 0 }
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    };
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pPortParamType, OMX_PORT_PARAM_TYPE);
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pQfactorType, OMX_IMAGE_PARAM_QFACTORTYPE);
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pQuantizationTable,OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE);
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pHuffmanTable, JPEGENC_CUSTOM_HUFFMANTTABLETYPE);
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pInPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(pOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MALLOC(imageinfo, IMAGE_INFO);
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Setting up default parameters */
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    szOutFile="output.jpg";
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nWidth=176;
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nHeight=144;
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputformat=1;
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    qualityfactor=100;
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    buffertype=1;
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailWidth_app0 = 0;
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailHeight_app0 = 0;
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailWidth_app1 = 0;
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailHeight_app1 = 0;
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailWidth_app5 = 0;
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailHeight_app5 = 0;
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailWidth_app13 = 0;
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nThumbnailHeight_app13 = 0;
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->bAPP0 = OMX_FALSE;
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->bAPP1 = OMX_FALSE;
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->bAPP5 = OMX_FALSE;
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->bAPP13 = OMX_FALSE;
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->nComment = OMX_FALSE;
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    imageinfo->pCommentString = NULL;
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sCrop.nTop = 0;
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sCrop.nLeft = 0;
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sCrop.nWidth = 0;
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sCrop.nHeight = 0;
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (argc <= 1)
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PrintUsage();
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return 0;
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavindo
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    next_option = getopt_long(argc, argv, short_options,long_options, NULL);
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(next_option)
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'a':
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PrintUsage();
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return 0;
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'i':
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        szInFile=optarg;
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'o':
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        szOutFile=optarg;
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'w':
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         nWidth = atoi(optarg);
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'h':
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nHeight=atoi(optarg);
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'f':
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        inputformat=atoi(optarg);
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1231b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case 'z':
1232b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        bConvertion_420pTo422i = OMX_TRUE;
1233b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        PRINT("\n ********* bConvertion_420pTo422i is set to TRUE \n");
1234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        break;
1235b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'q':
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        qualityfactor=atoi(optarg);
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'b':
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buffertype=atoi(optarg);
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'c':
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nComment = 1;
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->pCommentString  = (char *)optarg;
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/*EXIF */
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'e':
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->bAPP1 = OMX_TRUE;
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'x':
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailWidth_app1 = atoi(optarg);
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'y':
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailHeight_app1 = atoi(optarg);
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* JFIF */
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'j':
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->bAPP0 = OMX_TRUE;
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 's':
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailWidth_app0 = atoi(optarg);
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'k':
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailHeight_app0 = atoi(optarg);
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'n':
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailWidth_app5 = atoi(optarg);
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'p':
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->nThumbnailHeight_app5 = atoi(optarg);
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'm':
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->bAPP13 = OMX_TRUE;
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'd':
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        imageinfo->bAPP5 = OMX_TRUE;
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 't':
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        bSetCustomQuatizationTable=atoi(optarg);
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'u':
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        bSetCustomHuffmanTable=atoi(optarg);
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'r':
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        maxRepeat = atoi(optarg);
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'v':
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sCrop.nWidth = atoi(optarg);
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 'l':
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sCrop.nHeight = atoi(optarg);
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}while (next_option != -1);
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("\n------------------------------------------------\n");
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("OMX JPEG Encoder Test App built on " __DATE__ ":" __TIME__ "\n");
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("------------------------------------------------\n");
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("Output File Name is %s \n" , szOutFile);
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef STRESS
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (multiload = 0; multiload < STRESSMULTILOAD; multiload ++) {
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("Stress Test: Iteration %d\n", multiload + 1);
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* LOAD BASE IMAGE FIRST TIME */
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LoadBaseImage();
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = TIOMX_Init();
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error returned by OMX_Init()\n");
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("OMX_Init Successful!\n");
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = TIOMX_GetHandle(&pHandle,StrJpegEncoder,(void *)&AppData, &JPEGCaBa);
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( (error != OMX_ErrorNone) || (pHandle == NULL) ) {
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf (stderr,"Error in Get Handle function\n");
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef STRESS
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_U8 i;
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for(i=0; i < NSTRESSCASES; i++) {
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     printf("Stress test number %d\n",i);
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Create a pipe used to queue data from the callback. */
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	retval = pipe(IpBuf_Pipe);
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( retval != 0 ) {
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf(stderr, "Error:Fill Data Pipe failed to open\n");
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	retval = pipe(OpBuf_Pipe);
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( retval != 0 ) {
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf(stderr, "Error:Empty Data Pipe failed to open\n");
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	retval = pipe(Event_Pipe);
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( retval != 0 ) {
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf(stderr, "Error:Empty Data Pipe failed to open\n");
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Input/Output Pipes created\n");
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* save off the "max" of the handles for the selct statement */
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fdmax = maxint(IpBuf_Pipe[0], OpBuf_Pipe[0]);
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fdmax = maxint(Event_Pipe[0], fdmax);
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fIn = CreateFile(szInFile, GENERIC_READ, 0,
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                       NULL,OPEN_EXISTING, 0, NULL);
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (INVALID_HANDLE_VALUE == fIn)
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	{
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error:  failed to open the file %s for " \
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	         "reading\n", szInFile);
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fIn = fopen(szInFile, "r");
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( fIn == NULL ) {
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("Error: failed to open the file <%s> for reading\n",
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	          szInFile);
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT(" File %s opened \n" , szInFile);
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_GetParameter(pHandle, OMX_IndexParamImageInit, pPortParamType);
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_ErrorBadParameter;
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nIndex1 = pPortParamType->nStartPortNumber;
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nIndex2 = nIndex1 + 1;
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nPortIndex = nIndex1;
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, pInPortDef);
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_ErrorBadParameter;
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pInPortDef->eDir == nIndex1 ) {
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pInPortDef->nPortIndex = nIndex1;
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pInPortDef->nPortIndex = nIndex2;
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set the component's OMX_PARAM_PORTDEFINITIONTYPE structure (input) */
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nVersion.s.nVersionMajor = 0x1;
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nVersion.s.nVersionMinor = 0x0;
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nVersion.s.nRevision = 0x0;
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nVersion.s.nStep = 0x0;
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nPortIndex = 0x0;
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->eDir = OMX_DirInput;
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nBufferCountActual = NUM_OF_BUFFERSJPEG;
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->nBufferCountMin = 1;
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->bEnabled = OMX_TRUE;
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->bPopulated = OMX_FALSE;
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->eDomain = OMX_PortDomainImage;
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* OMX_IMAGE_PORTDEFINITION values for input port */
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.cMIMEType = "JPEGENC";
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.pNativeRender = NULL;
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.nFrameWidth = nWidth;
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.nFrameHeight = nHeight;
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.nSliceHeight = -1;
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.bFlagErrorConcealment = OMX_FALSE;
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( inputformat == 2) {
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     pInPortDef->format.image.eColorFormat =  OMX_COLOR_FormatCbYCrY;
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if ( inputformat == 3) {
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     pInPortDef->format.image.eColorFormat = OMX_COLOR_Format32bitARGB8888;
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (inputformat == 4) {
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pInPortDef->format.image.eColorFormat = OMX_COLOR_Format16bitRGB565;
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if ( inputformat == 5) {
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     pInPortDef->format.image.eColorFormat = OMX_COLOR_FormatYCbYCr;
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pInPortDef->format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar;
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pInPortDef->format.image.eCompressionFormat = OMX_IMAGE_CodingUnused;
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nMultFactor = (nWidth + 16 - 1)/16;
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nWidthNew = (int)(nMultFactor) * 16;
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nMultFactor = (nHeight + 16 - 1)/16;
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	nHeightNew = (int)(nMultFactor) * 16;
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (inputformat == 1) {
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pInPortDef->nBufferSize = (nWidthNew * nHeightNew * 1.5);
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if (pInPortDef->nBufferSize < 1600) {
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pInPortDef->nBufferSize = 1600;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if(inputformat == 3) {
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pInPortDef->nBufferSize = (nWidthNew * nHeightNew * 4);
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pInPortDef->nBufferSize = (nWidthNew * nHeightNew * 2);
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if (pInPortDef->nBufferSize < 400) {
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pInPortDef->nBufferSize = 400;
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pInPortDef);
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_ErrorBadParameter;
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nPortIndex = nIndex2;
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_GetParameter(pHandle, OMX_IndexParamPortDefinition, pOutPortDef);
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_ErrorBadParameter;
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pOutPortDef->eDir == nIndex1 ) {
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->nPortIndex = nIndex1;
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->nPortIndex = nIndex2;
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Set the component's OMX_PARAM_PORTDEFINITIONTYPE structure (input) */
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nVersion.s.nVersionMajor = 0x1;
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nVersion.s.nVersionMinor = 0x0;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nVersion.s.nRevision = 0x0;
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nVersion.s.nStep = 0x0;
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nPortIndex = 0x1;
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->eDir = OMX_DirInput;
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nBufferCountActual = NUM_OF_BUFFERSJPEG;
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nBufferCountMin = 1;
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->bEnabled = OMX_TRUE;
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->bPopulated = OMX_FALSE;
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->eDomain = OMX_PortDomainImage;
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* OMX_IMAGE_PORTDEFINITION values for input port */
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.cMIMEType = "JPEGENC";
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.pNativeRender = NULL;
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.nFrameWidth = nWidth;
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.nFrameHeight = nHeight;
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.nStride = -1;
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.nSliceHeight = -1;
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->format.image.bFlagErrorConcealment = OMX_FALSE;
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/*Minimum buffer size requirement */
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nBufferSize = (nWidth*nHeight);
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if( qualityfactor < 10){
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->nBufferSize /=10;
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (qualityfactor <100){
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->nBufferSize /= (100/qualityfactor);
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/*Adding memory to include Thumbnail, comments & markers information and header (depends on the app)*/
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pOutPortDef->nBufferSize += 12288;
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( inputformat == 2 || inputformat == 3 || inputformat == 4 ) {
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     pOutPortDef->format.image.eColorFormat =  OMX_COLOR_FormatCbYCrY;
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1545b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	else if ( inputformat == 1 && bConvertion_420pTo422i ) {
1546b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    pOutPortDef->format.image.eColorFormat =  OMX_COLOR_FormatCbYCrY;
1547b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar;
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->bAPP1) {
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->format.image.eCompressionFormat = OMX_IMAGE_CodingEXIF;
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pOutPortDef->format.image.eCompressionFormat = OMX_IMAGE_CodingJPEG;
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pOutPortDef);
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_ErrorBadParameter;
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponent = (OMX_COMPONENTTYPE *)pHandle;
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SetConfig(pHandle, OMX_IndexConfigCommonInputCrop, &sCrop);
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	   error = OMX_ErrorBadParameter;
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	   goto EXIT;
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	error = OMX_SetConfig(pHandle, OMX_IndexCustomColorFormatConvertion_420pTo422i, &bConvertion_420pTo422i);
1576b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	if ( error != OMX_ErrorNone ) {
1577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	   error = OMX_ErrorBadParameter;
1579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	   goto EXIT;
1580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
1581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (bSetCustomQuatizationTable){
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pQuantizationTable->eQuantizationTable = OMX_IMAGE_QuantizationTableLuma;
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		error = OMX_GetParameter(pHandle, OMX_IndexParamQuantizationTable, pQuantizationTable);
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pTemp = (OMX_U8*)memcpy(pQuantizationTable->nQuantizationMatrix, CustomLumaQuantizationTable, sizeof(CustomLumaQuantizationTable));
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if(pTemp == NULL){
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call\n", __LINE__);
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_ErrorUndefined;
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        goto EXIT;
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_SetParameter(pHandle, OMX_IndexParamQuantizationTable, pQuantizationTable);
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pQuantizationTable->eQuantizationTable = OMX_IMAGE_QuantizationTableChroma;
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_GetParameter(pHandle, OMX_IndexParamQuantizationTable, pQuantizationTable);
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pTemp = (OMX_U8*)memcpy(pQuantizationTable->nQuantizationMatrix, CustomChromaQuantizationTable, sizeof(CustomChromaQuantizationTable));
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if(pTemp == NULL){
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_ErrorUndefined;
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        goto EXIT;
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_SetParameter(pHandle, OMX_IndexParamQuantizationTable, pQuantizationTable);
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (bSetCustomHuffmanTable){
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.HuffmanTable", (OMX_INDEXTYPE*)&nCustomIndex);
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		error = OMX_GetParameter(pHandle, nCustomIndex, pHuffmanTable);
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    pTemp = (OMX_U8*)memcpy(&(pHuffmanTable->sHuffmanTable), &CustomHuffmanTable, sizeof(CustomHuffmanTable));
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if(pTemp == NULL){
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_ErrorUndefined;
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        goto EXIT;
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_SetParameter(pHandle, nCustomIndex, pHuffmanTable);
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       error = OMX_ErrorBadParameter;
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	       goto EXIT;
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponent = (OMX_COMPONENTTYPE *)pHandle;
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle ,NULL);
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf (stderr,"Error from SendCommand-Idle(Init) State function\n");
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (buffertype == 1) {
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pTemp=(OMX_U8*)malloc(pInPortDef->nBufferSize+256);
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if(pTemp == NULL){
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            error = OMX_ErrorInsufficientResources;
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            goto EXIT;
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pTemp+= 128;
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pInBuffer[nCounter] = pTemp;
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pTemp = NULL;
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pTemp= (OMX_U8*)malloc(pOutPortDef->nBufferSize+256);
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if(pTemp == NULL){
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            error = OMX_ErrorInsufficientResources;
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            goto EXIT;
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pTemp+= 128;
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        pOutBuffer[nCounter] = pTemp;
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_UseBuffer(pHandle, &pInBuff[nCounter], nIndex1, (void*)&sJPEGEnc_CompID, pInPortDef->nBufferSize,pInBuffer[nCounter]);
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_UseBuffer(pHandle, &pOutBuff[nCounter], nIndex2, (void*)&sJPEGEnc_CompID, pOutPortDef->nBufferSize,pOutBuffer[nCounter]);
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (buffertype == 2) {
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_AllocateBuffer(pHandle, &pInBuff[nCounter], nIndex1, (void *)&sJPEGEnc_CompID, pInPortDef->nBufferSize);
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        error = OMX_AllocateBuffer(pHandle, &pOutBuff[nCounter], nIndex2, (void *)&sJPEGEnc_CompID, pOutPortDef->nBufferSize);
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* set markers */
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = SetMarkers(pHandle, imageinfo, sCrop, nWidth, nHeight);
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		fprintf (stderr,"Error from SetMarkers()  function\n");
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/**
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	* wait for initialization to complete (as indicated by the statechange
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	* callback saying that component has been loaded (and is therefore
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	* initialized.  Note that you should probably handle GUI events
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	* in the WaitForState method.
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	**/
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Waiting for state Idle\n");
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = WaitForState(pHandle, OMX_StateIdle);
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error: JpegEncoder->WaitForState has timed out or failed %X\n",
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	          error);
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nSize = sizeof(OMX_IMAGE_PARAM_QFACTORTYPE);
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nQFactor = (OMX_U32) qualityfactor;
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nVersion.s.nVersionMajor = 0x1;
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nVersion.s.nVersionMinor = 0x0;
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nVersion.s.nRevision = 0x0;
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nVersion.s.nStep = 0x0;
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pQfactorType->nPortIndex = 0x0;
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.QFactor", (OMX_INDEXTYPE*)&nCustomIndex);
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SetConfig (pHandle, nCustomIndex, pQfactorType);
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/**
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * Open the file of data to be rendered.  Since this is a just sample
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * application, the data is "rendered" to a test mixer.  So, the test
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * file better contain data that can be printed to the terminal w/o
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * problems or you will not be a happy camper.
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	**/
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Opening output jpg file\n");
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fOut = CreateFile(szOutFile, GENERIC_WRITE, 0,
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                       NULL,CREATE_ALWAYS, 0, NULL);
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (INVALID_HANDLE_VALUE == fOut){
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error: failed to open the file <%s> for writing\n",
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        szOutFile);
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fOut = fopen(szOutFile, "w");
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( fOut == NULL ) {
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error: failed to open the file <%s> for writing\n",
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	          szOutFile);
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateExecuting, NULL);
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    fprintf (stderr,"Error from SendCommand-Executing State function\n");
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponent = (OMX_COMPONENTTYPE *)pHandle;
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/**
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * wait for startup to complete (as indicated by the statechange
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * callback saying that component has been loaded (and is therefore
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * initialized.  Note that you should probably handle GUI events
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * in the WaitForState method.
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	**/
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Waiting for OMX_StateExcecuting\n");
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = WaitForState(pHandle, OMX_StateExecuting);
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    PRINT("Error:  JpegEncoder->WaitForState has timed out or failed %X\n", error);
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    goto EXIT;
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (imageinfo->nDRI) {
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_GetExtensionIndex(pHandle, "OMX.TI.JPEG.encoder.Config.DRI", (OMX_INDEXTYPE*)&nCustomIndex);
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        goto EXIT;
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    error = OMX_SetConfig(pHandle, nCustomIndex, &(imageinfo->nDRI));
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    if ( error != OMX_ErrorNone ) {
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        printf("%d::APP_Error at function call: %x\n", __LINE__, error);
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        goto EXIT;
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/** Handle the component's requests for data until we run out of data.  Do this
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * in a way that will allow the UI to continue to run (if there is a UI, which
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	 * this sample application does NOT have)
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	**/
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	done = 0;
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponent->GetState(pHandle, &state);
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Error is %d , cur state is %d ",error, state);
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (nCounter =0; nCounter<1 /*NUM_OF_BUFFERSJPEG*/; nCounter++) {
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		nRead = fill_data(pInBuff[nCounter], fIn,pInPortDef->nBufferSize);
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponent->FillThisBuffer(pHandle, pOutBuff[nCounter]);
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponent->EmptyThisBuffer(pHandle, pInBuff[nCounter]);
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		framesent++;
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		PRINT("Sent Frame # %d\n", framesent);
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pInBuff[nCounter]->nFlags == OMX_BUFFERFLAG_ENDOFFRAME)
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    break;
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	while ((error == OMX_ErrorNone) &&
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        (state != OMX_StateIdle)) {
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if (bPreempted)
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        {
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			PRINT("Preempted - Forced tp Idle State - Waiting for OMX_StateIdle\n");
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			error = WaitForState(pHandle, OMX_StateIdle);
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if ( error != OMX_ErrorNone ) {
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				PRINT("Error:  JpegEncoder->WaitForState has timed out or failed %X",  error);
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				goto EXIT;
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        fd_set rfds;
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sigemptyset(&set);
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		sigaddset(&set,SIGALRM);
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        FD_ZERO(&rfds);
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        FD_SET(IpBuf_Pipe[0], &rfds);
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        FD_SET(OpBuf_Pipe[0], &rfds);
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        FD_SET(Event_Pipe[0], &rfds);
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        retval = pselect(fdmax+1, &rfds, NULL, NULL, NULL,&set);
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if ( retval == -1 ) {
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			perror("select()");
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			fprintf (stderr, " : Error \n");
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        else if ( retval == 0 ) {
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			PRINT("App Timeout !!!!!!!!!!!\n");
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        	/**
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* If FD_ISSET for Event_Pipe, there is an event remaining on the pipe.  Read it
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* and get act accordingly to the event.
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		**/
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if ( FD_ISSET(Event_Pipe[0], &rfds)) {
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            JPEGE_EVENTPRIVATE EventPrivate;
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            read(Event_Pipe[0], &EventPrivate, sizeof(JPEGE_EVENTPRIVATE));
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            switch(EventPrivate.eEvent) {
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                case OMX_EventError:
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				if(bError) {
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					error = WaitForState(pHandle, OMX_StateInvalid);
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					if (error != OMX_ErrorNone) {
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						printf("APP:: Error:  JpegEncoder->WaitForState has timed out or failed %X\n", error);
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						goto EXIT;
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					}
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					printf("APP:: Component is in Invalid state now.\n");
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					goto EXIT;
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				break;
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                case OMX_EventBufferFlag:
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		                printf("APP:: EOS flag received\n");
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		                break;
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                default:
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		                printf("APP:: Non-error event rised. Event -> 0x%x\n", EventPrivate.eEvent);
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		                break;
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	            }
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/**
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* If FD_ISSET for IpBuf_Pipe, then there is an empty buffer available on the pipe.  Read it
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* from the pipe, then re-fill the buffer and send it back.
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		**/
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( FD_ISSET(IpBuf_Pipe[0], &rfds) && !DEINIT_FLAG ) {
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/*read buffer */
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/* re-fill this buffer with data from JPEG file */
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			nRead = fill_data(pBuffer, fIn,pInPortDef->nBufferSize);
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/* call EmptyThisBuffer (send buffer back to component */
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_EmptyThisBuffer(pHandle, pBuffer);
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/*increment count */
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			framesent++;
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			PRINT("Sent Frame # %d\n", framesent);
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/**
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* If FD_ISSET for OpBuf_Pipe, then there is a filled buffer available on the pipe.  Read it
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* and get the buffer data out, write it to a file and then re-empty the buffer and send
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		* the buffer back to the component.
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		**/
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if (FD_ISSET(OpBuf_Pipe[0], &rfds)) {
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/* read buffer */
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			read(OpBuf_Pipe[0], &pBuf, sizeof(pBuf));
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/* write data to a file, buffer is assumed to be emptied after this*/
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			WriteFile(fOut, pBuf->pBuffer, pBuf->nFilledLen, &dwWritten, NULL);
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			printf("APP:: Write into file %lu bytes (%d)\n",pBuf->nFilledLen, nframerecieved);
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			fwrite(pBuf->pBuffer, 1,  (int)pBuf->nFilledLen, fOut);
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			fflush(fOut);
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			/*increment count and validate for limits; call FillThisBuffer */
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			nframerecieved++;
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			nRepeated++;
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			PRINT("\n%d***************%d***************%d***************%d***************%d\n", nRepeated, nRepeated, nRepeated, nRepeated, nRepeated);
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (nRepeated >= maxRepeat) {
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				DEINIT_FLAG = 1;
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			else {
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				PRINT("Sending another output buffer\n");
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pComponent->FillThisBuffer(pHandle,pBuf);
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if (DEINIT_FLAG == 1) {
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    done = 1;
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle = (OMX_HANDLETYPE *) pComponent;
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if ( error != OMX_ErrorNone ) {
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fprintf (stderr,"APP:: Error from SendCommand-Idle(Stop) State function\n");
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PRINT("Waiting for OMX_StateIdle\n");
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = WaitForState(pHandle, OMX_StateIdle);
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if ( error != OMX_ErrorNone ) {
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PRINT("Error:  JpegEncoder->WaitForState has timed out %X", error);
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_SendCommand(pHandle, OMX_CommandPortDisable, 0, NULL);
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if ( error != OMX_ErrorNone ) {
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PRINT("Error from SendCommand-PortDisable function\n");
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        if (done == 1) {
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = pComponent->GetState(pHandle, &state);
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if ( error != OMX_ErrorNone ){
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fprintf(stderr, "Warning:  JpegEncoder->JPEGENC_GetState has returned status %X\n", error);
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PRINT("After GetState() in while loop.\n");
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        }
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef STRESS
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("\nTest Completed Successfully! Deinitializing ... \n\n");
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	printf("\nClosing application...\n");
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/**
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	*  Freeing memory
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	**/
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*close handles */
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	CloseHandle(fOut);
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	CloseHandle(fIn);
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fclose(fOut);
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	rewind (fIn);
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	fclose(fIn);
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	PRINT("Freeing memory from test app\n");
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pPortParamType);
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pQfactorType);
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pInPortDef);
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pOutPortDef);
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(imageinfo);
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pQuantizationTable);
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	FREE(pHuffmanTable);
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if( error != OMX_ErrorNone){
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (buffertype == 1) {
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pOutBuffer[nCounter]-=128;
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pInBuffer[nCounter]-=128;
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				FREE(pOutBuffer[nCounter]);
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				FREE(pInBuffer[nCounter]);
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		for (nCounter = 0; nCounter < NUM_OF_BUFFERSJPEG; nCounter++) {
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    error = OMX_FreeBuffer(pHandle, nIndex1, pInBuff[nCounter]);
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    if ( (error != OMX_ErrorNone) ) {
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		        printf ("Error in OMX_FreeBuffer: %d\n", __LINE__);
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    }
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    error = OMX_FreeBuffer(pHandle, nIndex2, pOutBuff[nCounter]);
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    if ( (error != OMX_ErrorNone) ) {
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		        printf ("Error in OMX_FreeBuffer: %d\n", __LINE__);
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    }
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = TIOMX_FreeHandle(pHandle);
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( (error != OMX_ErrorNone) ) {
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    printf ("Error in Free Handle function\n");
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(bError) {
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            LoadBaseImage();
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	error = TIOMX_Deinit();
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if ( error != OMX_ErrorNone ) {
2048b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    printf("Error returned by OMX_DeInit()\n");
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef STRESS
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} /* end of multiload loop */
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin//muntrace();
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PRINT ("Free Handle returned Successfully = %x\n",error);
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint LoadBaseImage() {
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int uProcId = 0;	/* default proc ID is 0. */
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int index = 0;
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct DSP_PROCESSORINFO dspInfo;
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DSP_HPROCESSOR hProc;
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DSP_STATUS status = DSP_SOK;
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int numProcs;
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* argv[2];
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    argv[0] = "/lib/dsp/baseimage.dof";
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    status = (DBAPI)DspManager_Open(0, NULL);
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (DSP_FAILED(status)) {
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("DSPManager_Open failed \n");
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return -1;
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (DSP_SUCCEEDED(DSPManager_EnumProcessorInfo(index,&dspInfo,
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (unsigned int)sizeof(struct DSP_PROCESSORINFO),&numProcs))) {
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((dspInfo.uProcessorType == DSPTYPE_55) ||
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (dspInfo.uProcessorType == DSPTYPE_64)) {
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            uProcId = index;
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            status = DSP_SOK;
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        index++;
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    status = DSPProcessor_Attach(uProcId, NULL, &hProc);
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (DSP_SUCCEEDED(status)) {
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = DSPProcessor_Stop(hProc);
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (DSP_SUCCEEDED(status)) {
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            status = DSPProcessor_Load(hProc,1,(const char **)argv,NULL);
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (DSP_SUCCEEDED(status)) {
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                status = DSPProcessor_Start(hProc);
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (DSP_SUCCEEDED(status)) {
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			else {
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            DSPProcessor_Detach(hProc);
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fprintf(stderr,"Baseimage Loaded\n");
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return 0;
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2119