xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v1/api/jpeg/cmodel/src/jpeg_cmodel_io.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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