annotate libmpcodecs/vd_ijpg.c @ 21460:62bd8e0d3a0f

Open embedded fonts directly from memory. FontConfig 2.4.2 (released yesterday) supports scanning fonts with FcFreeTypeQueryFace without writing them to disk. With earlier FontConfig versions, the old mechanism is used.
author eugeni
date Sun, 03 Dec 2006 18:24:11 +0000
parents 1767c271d710
children fa99b3d31d13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
1
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
2 #include <stdio.h>
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
3 #include <stdlib.h>
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
4
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
5 #include "config.h"
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
6 #include "mp_msg.h"
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
7
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
8 #include <jpeglib.h>
5048
2f53b53385e2 libjpeg and loader conflict workaround
pontscho
parents: 5042
diff changeset
9 #define UINT16 IJPG_UINT16
2f53b53385e2 libjpeg and loader conflict workaround
pontscho
parents: 5042
diff changeset
10 #define INT16 IJPG_INT16
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
11
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
12 #include <setjmp.h>
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
13
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 18746
diff changeset
14 #include "libavutil/common.h"
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 18746
diff changeset
15 #include "libavutil/bswap.h"
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
16 #include "libvo/fastmemcpy.h"
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
17
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
18 #include "vd_internal.h"
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
19
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
20 static vd_info_t info = {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
21 "JPEG Images decoder",
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
22 "ijpg",
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
23 "Pontscho",
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
24 "based on vd_mpng.c",
18604
0b6b5f2f8c9a Spelling fix
pacman
parents: 18167
diff changeset
25 "uses Independent JPEG Group's jpeglib"
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
26 };
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
27
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
28 LIBVD_EXTERN(ijpg)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
29
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
30 static int last_w=-1;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
31 static int last_h=-1;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
32
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
33 // to set/get/query special features/parameters
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
34 static int control(sh_video_t *sh,int cmd,void* arg,...){
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
35 return CONTROL_UNKNOWN;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
36 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
37
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
38 // init driver
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
39 static int init(sh_video_t *sh){
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
40 last_w=-1;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
41 return 1;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
42 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
43
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
44 // uninit driver
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
45 static void uninit(sh_video_t *sh){
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
46 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
47
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
48 //mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
49
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
50 typedef struct
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
51 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
52 struct jpeg_source_mgr pub;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
53 unsigned char * inbuf;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
54 int bufsize;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
55 } my_source_mgr;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
56
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
57 typedef my_source_mgr * my_src_ptr;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
58
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
59 METHODDEF(void) init_source (j_decompress_ptr cinfo)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
60 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
61 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
62
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
63 METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
64 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
65 my_src_ptr src = (my_src_ptr) cinfo->src;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
66 src->pub.next_input_byte = src->inbuf;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
67 src->pub.bytes_in_buffer = src->bufsize;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
68 return TRUE;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
69 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
70
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
71 METHODDEF(void) skip_input_data (j_decompress_ptr cinfo, long num_bytes)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
72 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
73 my_src_ptr src = (my_src_ptr) cinfo->src;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
74
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
75 if (num_bytes > 0)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
76 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
77 while (num_bytes > (long) src->pub.bytes_in_buffer)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
78 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
79 num_bytes -= (long) src->pub.bytes_in_buffer;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
80 (void) fill_input_buffer(cinfo);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
81 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
82 src->pub.next_input_byte += (size_t) num_bytes;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
83 src->pub.bytes_in_buffer -= (size_t) num_bytes;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
84 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
85 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
86
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
87 METHODDEF(void) term_source (j_decompress_ptr cinfo) { }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
88
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
89 GLOBAL(void) jpeg_buf_src ( j_decompress_ptr cinfo, char * inbuf,int bufsize )
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
90 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
91 my_src_ptr src;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
92 if (cinfo->src == NULL) cinfo->src=malloc( sizeof( my_source_mgr ) );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
93 src = (my_src_ptr) cinfo->src;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
94 src->pub.init_source = init_source;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
95 src->pub.fill_input_buffer = fill_input_buffer;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
96 src->pub.skip_input_data = skip_input_data;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
97 src->pub.resync_to_restart = jpeg_resync_to_restart;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
98 src->pub.term_source = term_source;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
99 src->inbuf = inbuf;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
100 src->bufsize=bufsize;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
101 src->pub.bytes_in_buffer = 0;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
102 src->pub.next_input_byte = NULL;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
103 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
104
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
105 struct my_error_mgr
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
106 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
107 struct jpeg_error_mgr pub;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
108 jmp_buf setjmp_buffer;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
109 };
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
110
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
111 typedef struct my_error_mgr * my_error_ptr;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
112
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
113 METHODDEF(void) my_error_exit (j_common_ptr cinfo)
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
114 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
115 my_error_ptr myerr=(my_error_ptr) cinfo->err;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
116 (*cinfo->err->output_message) (cinfo);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
117 longjmp(myerr->setjmp_buffer, 1);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
118 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
119
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
120 static struct jpeg_decompress_struct cinfo;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
121 static struct my_error_mgr jerr;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
122 static int row_stride;
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
123 static unsigned char *temp_row=NULL;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
124
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
125 // decode a frame
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
126 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
127 mp_image_t * mpi = NULL;
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
128 int width,height,depth,i;
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
129
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
130 if ( len <= 0 ) return NULL; // skipped frame
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
131
5366
f46873b05f82 eeh 10l removed too much lines :(
atmos4
parents: 5365
diff changeset
132 cinfo.err=jpeg_std_error( &jerr.pub );
f46873b05f82 eeh 10l removed too much lines :(
atmos4
parents: 5365
diff changeset
133 jerr.pub.error_exit=my_error_exit;
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
134 if( setjmp( jerr.setjmp_buffer ) )
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
135 {
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
136 mp_msg( MSGT_DECVIDEO,MSGL_ERR,"[ijpg] setjmp error ...\n" );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
137 return NULL;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
138 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
139
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
140 jpeg_create_decompress( &cinfo );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
141 jpeg_buf_src( &cinfo,data,len );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
142 jpeg_read_header( &cinfo,TRUE );
5365
b87743434e1f Issue a warning in VDec if disp_w and disp_h weren't set by codec and try workaround.
atmos4
parents: 5124
diff changeset
143 sh->disp_w=width=cinfo.image_width;
b87743434e1f Issue a warning in VDec if disp_w and disp_h weren't set by codec and try workaround.
atmos4
parents: 5124
diff changeset
144 sh->disp_h=height=cinfo.image_height;
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
145 jpeg_start_decompress( &cinfo );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
146 depth=cinfo.output_components * 8;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
147
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
148 switch( depth ) {
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
149 case 8:
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
150 case 24: break;
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
151 default: mp_msg( MSGT_DECVIDEO,MSGL_ERR,"Sorry, unsupported JPEG colorspace: %d.\n",depth ); return NULL;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
152 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
153
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
154 if ( last_w!=width || last_h!=height )
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
155 {
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
156 if(!mpcodecs_config_vo( sh,width,height, IMGFMT_RGB24 )) return NULL;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
157 if(temp_row) free(temp_row);
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
158 temp_row=malloc(3*width+16);
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
159 last_w=width; last_h=height;
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
160 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
161
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
162 mpi=mpcodecs_get_image( sh,MP_IMGTYPE_TEMP,MP_IMGFLAG_ACCEPT_STRIDE,width,height );
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
163 if ( !mpi ) return NULL;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
164
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
165 row_stride=cinfo.output_width * cinfo.output_components;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
166
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
167 for ( i=0;i < height;i++ )
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
168 {
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
169 unsigned char * drow = mpi->planes[0] + mpi->stride[0] * i;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
170 unsigned char * row = (mpi->imgfmt==IMGFMT_RGB24 && depth==24) ? drow : temp_row;
5042
75e4f695f204 kill few warning
pontscho
parents: 5033
diff changeset
171 jpeg_read_scanlines( &cinfo,(JSAMPLE**)&row,1 );
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
172 if(depth==8){
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
173 // grayscale -> rgb/bgr 24/32
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
174 int x;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
175 if(mpi->bpp==32)
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
176 for(x=0;x<width;x++) drow[4*x]=0x010101*row[x];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
177 else
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
178 for(x=0;x<width;x++) drow[3*x+0]=drow[3*x+1]=drow[3*x+2]=row[x];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
179 } else {
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
180 int x;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
181 switch(mpi->imgfmt){
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
182 // rgb24 -> bgr24
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
183 case IMGFMT_BGR24:
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
184 for(x=0;x<3*width;x+=3){
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
185 drow[x+0]=row[x+2];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
186 drow[x+1]=row[x+1];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
187 drow[x+2]=row[x+0];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
188 }
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
189 break;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
190 // rgb24 -> bgr32
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
191 case IMGFMT_BGR32:
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
192 for(x=0;x<width;x++){
18167
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
193 #ifdef WORDS_BIGENDIAN
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
194 drow[4*x+1]=row[3*x+0];
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
195 drow[4*x+2]=row[3*x+1];
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
196 drow[4*x+3]=row[3*x+2];
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
197 #else
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
198 drow[4*x+0]=row[3*x+2];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
199 drow[4*x+1]=row[3*x+1];
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
200 drow[4*x+2]=row[3*x+0];
18167
f167814411d4 Fix BGR32 big-endian output
pacman
parents: 7472
diff changeset
201 #endif
6097
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
202 }
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
203 break;
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
204 }
3e4936b52df4 rgb24, bgr 24/32 support even for grayscale
arpi
parents: 5366
diff changeset
205 }
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
206 }
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
207
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
208 jpeg_finish_decompress(&cinfo);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
209 jpeg_destroy_decompress(&cinfo);
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
210
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
211 return mpi;
ef8a43b74075 Add IJPG decoder.
pontscho
parents:
diff changeset
212 }