Mercurial > mplayer.hg
annotate libvo/vo_jpeg.c @ 10662:5cf84c487446
Reworked the CPU optimization detection code, now it works nice for non-x86 platforms aswell (tested on Alpha, PPC, x86)
author | alex |
---|---|
date | Mon, 18 Aug 2003 14:24:29 +0000 |
parents | 98791b90215a |
children | db49cdedb88d |
rev | line source |
---|---|
5648 | 1 /* |
2 * vo_jpeg.c, JPEG Renderer for Mplayer | |
3 * | |
5649 | 4 * Copyright 2002 by Pontscho (pontscho@makacs.poliod.hu) |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
5 * 25/04/2003: Spring cleanup -- alex |
5648 | 6 * |
7 */ | |
8 | |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
11 #include <string.h> | |
12 #include <errno.h> | |
13 | |
14 #include <jpeglib.h> | |
15 | |
16 #include "config.h" | |
17 #include "video_out.h" | |
18 #include "video_out_internal.h" | |
19 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7487
diff
changeset
|
20 static vo_info_t info= |
5648 | 21 { |
22 "JPEG file", | |
23 "jpeg", | |
24 "Zoltan Ponekker (pontscho@makacs.poliod.hu)", | |
25 "" | |
26 }; | |
27 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7487
diff
changeset
|
28 LIBVO_EXTERN (jpeg) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7487
diff
changeset
|
29 |
5648 | 30 static int image_width; |
31 static int image_height; | |
32 | |
33 int jpeg_baseline = 1; | |
34 int jpeg_progressive_mode = 0; | |
35 int jpeg_optimize = 100; | |
36 int jpeg_smooth = 0; | |
37 int jpeg_quality = 75; | |
5659 | 38 char * jpeg_outdir = "."; |
5648 | 39 |
40 static int framenum=0; | |
41 | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6751
diff
changeset
|
42 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) |
5648 | 43 { |
44 image_height=height; | |
45 image_width=width; | |
46 | |
47 return 0; | |
48 } | |
49 | |
50 static uint32_t jpeg_write( uint8_t * name,uint8_t * buffer ) | |
51 { | |
52 FILE * o; | |
53 struct jpeg_compress_struct cinfo; | |
54 struct jpeg_error_mgr jerr; | |
55 JSAMPROW row_pointer[1]; | |
56 int row_stride; | |
57 | |
58 if ( !buffer ) return 1; | |
59 if ( (o=fopen( name,"wb" )) == NULL ) return 1; | |
60 | |
61 cinfo.err=jpeg_std_error(&jerr); | |
62 jpeg_create_compress(&cinfo); | |
63 jpeg_stdio_dest( &cinfo,o ); | |
64 | |
65 cinfo.image_width=image_width; | |
66 cinfo.image_height=image_height; | |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
67 cinfo.input_components=3; |
5648 | 68 cinfo.in_color_space=JCS_RGB; |
8267 | 69 |
70 jpeg_set_defaults( &cinfo ); | |
71 jpeg_set_quality( &cinfo,jpeg_quality,jpeg_baseline ); | |
5648 | 72 cinfo.optimize_coding=jpeg_optimize; |
73 cinfo.smoothing_factor=jpeg_smooth; | |
8267 | 74 |
5648 | 75 if ( jpeg_progressive_mode ) jpeg_simple_progression( &cinfo ); |
76 jpeg_start_compress( &cinfo,TRUE ); | |
77 | |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
78 row_stride = image_width * 3; |
5648 | 79 while ( cinfo.next_scanline < cinfo.image_height ) |
80 { | |
81 row_pointer[0]=&buffer[ cinfo.next_scanline * row_stride ]; | |
82 (void)jpeg_write_scanlines( &cinfo,row_pointer,1 ); | |
83 } | |
84 | |
85 jpeg_finish_compress( &cinfo ); | |
86 fclose( o ); | |
87 jpeg_destroy_compress( &cinfo ); | |
88 | |
89 return 0; | |
90 } | |
91 | |
92 static uint32_t draw_frame(uint8_t * src[]) | |
93 { | |
94 char buf[256]; | |
6751 | 95 uint8_t *dst= src[0]; |
5648 | 96 |
97 snprintf (buf, 256, "%s/%08d.jpg", jpeg_outdir, ++framenum); | |
98 | |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
99 return jpeg_write( buf,src[0] ); |
5648 | 100 } |
101 | |
102 static void draw_osd(void) | |
103 { | |
104 } | |
105 | |
106 static void flip_page (void) | |
107 { | |
108 } | |
109 | |
110 static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) | |
111 { | |
112 return 0; | |
113 } | |
114 | |
115 static uint32_t query_format(uint32_t format) | |
116 { | |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
117 if (format == IMGFMT_RGB24) |
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
118 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW; |
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
119 |
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
120 return 0; |
5648 | 121 } |
122 | |
123 static void uninit(void) | |
124 { | |
125 } | |
126 | |
127 static void check_events(void) | |
128 { | |
129 } | |
130 | |
131 static uint32_t preinit(const char *arg) | |
132 { | |
133 return 0; | |
134 } | |
135 | |
136 static uint32_t control(uint32_t request, void *data, ...) | |
137 { | |
138 switch (request) | |
139 { | |
140 case VOCTRL_QUERY_FORMAT: | |
141 return query_format(*((uint32_t*)data)); | |
142 } | |
143 return VO_NOTIMPL; | |
144 } |