00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef LIBMJPEG_H
00019 #define LIBMJPEG_H
00020
00021
00022
00023
00024
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030
00031
00032 #include <stdio.h>
00033 #include <jpeglib.h>
00034 #include <png.h>
00035 #include "pthread.h"
00036
00037 #define MAXFIELDS 2
00038 #define QUICKTIME_MJPA_MARKSIZE 40
00039 #define QUICKTIME_JPEG_TAG 0x6d6a7067
00040
00041
00042 struct mjpeg_error_mgr {
00043 struct jpeg_error_mgr pub;
00044 jmp_buf setjmp_buffer;
00045 };
00046
00047 typedef struct mjpeg_error_mgr* mjpeg_error_ptr;
00048
00049 #ifndef __alpha__
00050 typedef struct
00051 {
00052 } mjpeg_lml_hdr;
00053
00054 typedef struct
00055 {
00056 } mjpeg_dc10_hdr;
00057 #endif
00058
00059
00060
00061 typedef struct
00062 {
00063 void *mjpeg;
00064 int instance;
00065 unsigned char *output_buffer;
00066 long output_size;
00067 long output_allocated;
00068 struct jpeg_decompress_struct jpeg_decompress;
00069 struct jpeg_compress_struct jpeg_compress;
00070 struct mjpeg_error_mgr jpeg_error;
00071 pthread_t tid;
00072 pthread_mutex_t input_lock, output_lock;
00073 int done;
00074 int error;
00075
00076
00077 unsigned char **rows[3];
00078
00079 unsigned char **mcu_rows[3];
00080
00081 int field_h;
00082 int coded_field_h;
00083 } mjpeg_compressor;
00084
00085 typedef struct
00086 {
00087
00088 int output_w;
00089 int output_h;
00090
00091 int coded_w, coded_h;
00092 int fields;
00093 int quality;
00094 int use_float;
00095 int kludge;
00096 int cpus;
00097
00098 int color_model;
00099
00100 int jpeg_color_model;
00101
00102
00103 int greyscale;
00104
00105 int error;
00106
00107 mjpeg_compressor *compressors[MAXFIELDS];
00108 mjpeg_compressor *decompressors[MAXFIELDS];
00109
00110
00111
00112 unsigned char *temp_data;
00113 unsigned char **temp_rows[3];
00114 unsigned char **row_argument, *y_argument, *u_argument, *v_argument;
00115
00116
00117
00118 unsigned char *output_data;
00119 long output_size;
00120 long output_allocated;
00121
00122 long output_field2;
00123
00124 unsigned char *input_data;
00125 long input_size;
00126
00127 long input_field2;
00128 int deinterlace;
00129 int rowspan;
00130
00131
00132 pthread_mutex_t decompress_init;
00133 int decompress_initialized;
00134 } mjpeg_t;
00135
00136
00137
00138
00139
00140
00141 mjpeg_t* mjpeg_new(int w,
00142 int h,
00143 int fields);
00144 void mjpeg_delete(mjpeg_t *mjpeg);
00145
00146 void mjpeg_set_quality(mjpeg_t *mjpeg, int quality);
00147 void mjpeg_set_float(mjpeg_t *mjpeg, int use_float);
00148
00149 void mjpeg_set_deinterlace(mjpeg_t *mjpeg, int value);
00150 void mjpeg_set_cpus(mjpeg_t *mjpeg, int cpus);
00151 void mjpeg_set_rowspan(mjpeg_t *mjpeg, int rowspan);
00152
00153
00154 int mjpeg_get_fields(mjpeg_t *mjpeg);
00155
00156 int mjpeg_decompress(mjpeg_t *mjpeg,
00157 unsigned char *buffer,
00158 long buffer_len,
00159 long input_field2,
00160 unsigned char **row_pointers,
00161 unsigned char *y_plane,
00162 unsigned char *u_plane,
00163 unsigned char *v_plane,
00164 int color_model,
00165 int cpus);
00166
00167 int mjpeg_compress(mjpeg_t *mjpeg,
00168 unsigned char **row_pointers,
00169 unsigned char *y_plane,
00170 unsigned char *u_plane,
00171 unsigned char *v_plane,
00172 int color_model,
00173 int cpus);
00174
00175
00176 unsigned char* mjpeg_output_buffer(mjpeg_t *mjpeg);
00177
00178 long mjpeg_output_field2(mjpeg_t *mjpeg);
00179
00180 long mjpeg_output_size(mjpeg_t *mjpeg);
00181
00182 long mjpeg_output_allocated(mjpeg_t *mjpeg);
00183
00184 void mjpeg_set_output_size(mjpeg_t *mjpeg, long output_size);
00185
00186
00187 void mjpeg_video_size(unsigned char *data, long data_size, int *w, int *h);
00188
00189
00190
00191
00192
00193
00194
00195
00196 void mjpeg_insert_quicktime_markers(unsigned char **buffer,
00197 long *buffer_size,
00198 long *buffer_allocated,
00199 int fields,
00200 long *field2_offset);
00201 void mjpeg_insert_avi_markers(unsigned char **buffer,
00202 long *buffer_size,
00203 long *buffer_allocated,
00204 int fields,
00205 long *field2_offset);
00206
00207
00208 long mjpeg_get_buz_field2(unsigned char *buffer, long buffer_size);
00209 long mjpeg_get_lml33_field2(unsigned char *buffer, long buffer_size);
00210 long mjpeg_get_quicktime_field2(unsigned char *buffer, long buffer_size);
00211
00212
00213 long mjpeg_get_avi_field2(unsigned char *buffer,
00214 long buffer_size,
00215 int *field_dominance);
00216 long mjpeg_get_field2(unsigned char *buffer, long buffer_size);
00217
00218 #ifdef __cplusplus
00219 }
00220 #endif
00221
00222 #endif