1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file jpeg_file.c
98 /// @brief JPEG decoder file system
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101
102
103 //-------------------------------------------------------------------------------------------------
104 // Include Files
105 //-------------------------------------------------------------------------------------------------
106 #include "jpegmain.h"
107 #include "jpeg_cmodel_io.h"
108
109
110 //-------------------------------------------------------------------------------------------------
111 // Local Compiler Options
112 //-------------------------------------------------------------------------------------------------
113
114
115 //-------------------------------------------------------------------------------------------------
116 // Local Defines
117 //-------------------------------------------------------------------------------------------------
118
119
120 //-------------------------------------------------------------------------------------------------
121 // Local Structures
122 //-------------------------------------------------------------------------------------------------
123
124
125 //-------------------------------------------------------------------------------------------------
126 // Global Variables
127 //-------------------------------------------------------------------------------------------------
128
129
130 //-------------------------------------------------------------------------------------------------
131 // Local Variables
132 //-------------------------------------------------------------------------------------------------
133
134
135 //-------------------------------------------------------------------------------------------------
136 // Debug Functions
137 //-------------------------------------------------------------------------------------------------
138
139
140 //-------------------------------------------------------------------------------------------------
141 // Local Functions
142 //-------------------------------------------------------------------------------------------------
143
144
145 //-------------------------------------------------------------------------------------------------
146 // Global Functions
147 //-------------------------------------------------------------------------------------------------
JPEG_FILE_constructor(JPEG_FILE_FileSystem_t * thisPtr)148 VOID JPEG_FILE_constructor( JPEG_FILE_FileSystem_t *thisPtr )
149 {
150 thisPtr->Pfile = NULL;
151 thisPtr->eof_flag = FALSE;
152 thisPtr->error_flag = FALSE;
153 }
154
JPEG_FILE_destructor(JPEG_FILE_FileSystem_t * thisPtr)155 VOID JPEG_FILE_destructor( JPEG_FILE_FileSystem_t *thisPtr )
156 {
157 thisPtr->close( thisPtr );
158 }
159
JPEG_FILE_open(const char * Pfilename,JPEG_FILE_FileSystem_t * thisPtr)160 MS_BOOL JPEG_FILE_open( const char *Pfilename, JPEG_FILE_FileSystem_t *thisPtr )
161 {
162 thisPtr->close( thisPtr );
163
164 thisPtr->eof_flag = FALSE;
165 thisPtr->error_flag = FALSE;
166 thisPtr->Pfile = fopen( Pfilename, "rb" );
167 if ( !thisPtr->Pfile )
168 {
169 return ( TRUE );
170 }
171
172 return ( FALSE );
173 }
174
JPEG_FILE_close(JPEG_FILE_FileSystem_t * thisPtr)175 VOID JPEG_FILE_close( JPEG_FILE_FileSystem_t *thisPtr )
176 {
177 if ( thisPtr->Pfile )
178 {
179 fclose( thisPtr->Pfile );
180 thisPtr->Pfile = NULL;
181 }
182
183 thisPtr->eof_flag = FALSE;
184 thisPtr->error_flag = FALSE;
185 }
186
JPEG_FILE_read(MS_U8 * Pbuf,MS_U32 max_bytes_to_read,MS_BOOL * Peof_flag,JPEG_FILE_FileSystem_t * thisPtr)187 MS_S32 JPEG_FILE_read( MS_U8 *Pbuf, MS_U32 max_bytes_to_read, MS_BOOL *Peof_flag, JPEG_FILE_FileSystem_t *thisPtr)
188 {
189 MS_U32 bytes_read;
190
191 if ( !thisPtr->Pfile )
192 {
193 return ( -1 );
194 }
195
196 if ( thisPtr->eof_flag )
197 {
198 *Peof_flag = TRUE;
199 return ( 0 );
200 }
201
202 if ( thisPtr->error_flag )
203 {
204 return ( -1 );
205 }
206
207
208 bytes_read = fread( Pbuf, 1, max_bytes_to_read, thisPtr->Pfile );
209
210 if ( bytes_read < max_bytes_to_read )
211 {
212 if ( ferror( thisPtr->Pfile ) )
213 {
214 thisPtr->error_flag = TRUE;
215 return ( -1 );
216 }
217
218 thisPtr->eof_flag = TRUE;
219 *Peof_flag = TRUE;
220 }
221
222 return ( bytes_read );
223 }
224
JPEG_FILE_get_error_status(JPEG_FILE_FileSystem_t * thisPtr)225 MS_BOOL JPEG_FILE_get_error_status( JPEG_FILE_FileSystem_t *thisPtr ) //not used
226 {
227 return ( thisPtr->error_flag );
228 }
229
JPEG_FILE_reset(JPEG_FILE_FileSystem_t * thisPtr)230 MS_BOOL JPEG_FILE_reset( JPEG_FILE_FileSystem_t *thisPtr ) //not used
231 {
232 if ( thisPtr->error_flag )
233 {
234 return ( TRUE );
235 }
236
237 fseek( thisPtr->Pfile, 0, SEEK_SET );
238
239 thisPtr->eof_flag = FALSE;
240
241 return ( FALSE );
242 }
243
JPEG_FILE_get_size(JPEG_FILE_FileSystem_t * thisPtr)244 MS_S32 JPEG_FILE_get_size( JPEG_FILE_FileSystem_t *thisPtr ) //not necessary
245 {
246 MS_U32 size;
247 MS_U32 loc;
248
249 if ( !thisPtr->Pfile )
250 {
251 return ( -1 );
252 }
253
254 loc = ftell( thisPtr->Pfile );
255
256 fseek( thisPtr->Pfile, 0, SEEK_END );
257
258 size = ftell( thisPtr->Pfile );
259
260 fseek( thisPtr->Pfile, loc, SEEK_SET );
261
262 return ( size );
263 }
264
JPEG_FILE_tga_constructor(JPEG_FILE_TGAFileSystem_t * thisPtr)265 VOID JPEG_FILE_tga_constructor( JPEG_FILE_TGAFileSystem_t *thisPtr )
266 {
267 thisPtr->Pfile = NULL;
268 thisPtr->width = thisPtr->height = thisPtr->bytes_per_pixel = thisPtr->bytes_per_line = 0;
269 thisPtr->image_type = E_TGA_IMAGE_TYPE_NULL;
270 }
271
JPEG_FILE_tga_destructor(JPEG_FILE_TGAFileSystem_t * thisPtr)272 VOID JPEG_FILE_tga_destructor( JPEG_FILE_TGAFileSystem_t *thisPtr )
273 {
274 thisPtr->close( thisPtr );
275 }
276
JPEG_FILE_tga_open(const char * Pfilename,MS_U16 _width,MS_U16 _height,JPEG_FILE_TGAImageType_e _image_type,JPEG_FILE_TGAFileSystem_t * thisPtr)277 MS_BOOL JPEG_FILE_tga_open( const char *Pfilename, MS_U16 _width, MS_U16 _height, JPEG_FILE_TGAImageType_e _image_type, JPEG_FILE_TGAFileSystem_t *thisPtr )
278 {
279 MS_U8 tga_header[18];
280 MS_BOOL backwards_flag = FALSE;
281
282 MS_ASSERT( Pfilename );
283
284 thisPtr->close( thisPtr );
285
286 thisPtr->Pfile = fopen( Pfilename, "wb" );
287 if ( !thisPtr->Pfile )
288 {
289 return ( TRUE );
290 }
291
292 thisPtr->width = _width;
293 thisPtr->height = _height;
294 thisPtr->image_type = _image_type;
295
296 memset( tga_header, 0, sizeof( tga_header ) );
297
298 tga_header[12] = ( MS_U8 )( _width & 0xFF );
299 tga_header[13] = ( MS_U8 )( ( _width >> 8 ) & 0xFF );
300 tga_header[14] = ( MS_U8 )( _height & 0xFF );
301 tga_header[15] = ( MS_U8 )( ( _height >> 8 ) & 0xFF );
302 tga_header[17] = backwards_flag ? 0x00 : 0x20;
303
304 switch ( _image_type )
305 {
306 case E_TGA_IMAGE_TYPE_BGR:
307 {
308 tga_header[2] = 2;
309 tga_header[16] = 24;
310 thisPtr->bytes_per_pixel = 3;
311 break;
312 }
313 case E_TGA_IMAGE_TYPE_GREY:
314 {
315 tga_header[2] = 3;
316 tga_header[16] = 8;
317 thisPtr->bytes_per_pixel = 1;
318 break;
319 }
320 default:
321 MS_ASSERT( FALSE );
322 }
323
324 thisPtr->bytes_per_line = _width * thisPtr->bytes_per_pixel;
325
326 if ( fwrite( tga_header, sizeof( tga_header ), 1, thisPtr->Pfile ) != 1 )
327 {
328 return ( TRUE );
329 }
330
331 return ( FALSE );
332 }
333
JPEG_FILE_tga_close(JPEG_FILE_TGAFileSystem_t * thisPtr)334 MS_BOOL JPEG_FILE_tga_close( JPEG_FILE_TGAFileSystem_t *thisPtr )
335 {
336 thisPtr->width = thisPtr->height = thisPtr->bytes_per_pixel = thisPtr->bytes_per_line = 0;
337 thisPtr->image_type = E_TGA_IMAGE_TYPE_NULL;
338
339 if ( thisPtr->Pfile )
340 {
341 MS_BOOL failed = ( fclose( thisPtr->Pfile ) == EOF );
342
343 thisPtr->Pfile = NULL;
344
345 return ( failed );
346 }
347
348 return ( FALSE );
349 }
350
JPEG_FILE_tga_writeline(MS_U8 * Pscan_line,JPEG_FILE_TGAFileSystem_t * thisPtr)351 MS_U32 JPEG_FILE_tga_writeline( MS_U8 *Pscan_line, JPEG_FILE_TGAFileSystem_t *thisPtr )
352 {
353 if ( !thisPtr->Pfile )
354 {
355 return ( TRUE );
356 }
357
358 if ( fwrite( Pscan_line, thisPtr->bytes_per_line, 1, thisPtr->Pfile ) != 1 )
359 {
360 return ( TRUE );
361 }
362
363 return ( FALSE );
364 }
365
366