0001
0002 #ifndef JPEG_H
0003 #define JPEG_H 1
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 static const u8 jpeg_head[] = {
0020 0xff, 0xd8,
0021
0022
0023 0xff, 0xdb, 0x00, 0x84,
0024 0,
0025 #define JPEG_QT0_OFFSET 7
0026 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
0027 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
0028 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
0029 0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
0030 0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
0031 0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
0032 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
0033 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
0034 1,
0035 #define JPEG_QT1_OFFSET 72
0036 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
0037 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
0038 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0039 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0040 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0041 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0042 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0043 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0044
0045
0046 0xff, 0xc4, 0x01, 0xa2,
0047 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01,
0048 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0049 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0050 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03,
0051 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0052 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0053 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
0054 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03,
0055 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
0056 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04,
0057 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13,
0058 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
0059 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15,
0060 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82,
0061 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
0062 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36,
0063 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46,
0064 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
0065 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66,
0066 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76,
0067 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
0068 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95,
0069 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4,
0070 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
0071 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2,
0072 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca,
0073 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
0074 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0075 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
0076 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02,
0077 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
0078 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01,
0079 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06,
0080 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22,
0081 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1,
0082 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62,
0083 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25,
0084 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28,
0085 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
0086 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
0087 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
0088 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
0089 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
0090 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
0091 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
0092 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0093 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
0094 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
0095 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
0096 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3,
0097 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2,
0098 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
0099 #ifdef CONEX_CAM
0100
0101 #define JPEG_HDR_SZ 556
0102 #else
0103 0xff, 0xc0, 0x00, 0x11,
0104 0x08,
0105 #define JPEG_HEIGHT_OFFSET 561
0106 0x01, 0xe0,
0107 0x02, 0x80,
0108 0x03,
0109 0x01,
0110 0x21,
0111 0x00,
0112 0x02, 0x11, 0x01,
0113 0x03, 0x11, 0x01,
0114
0115 0xff, 0xda, 0x00, 0x0c,
0116 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
0117 #define JPEG_HDR_SZ 589
0118 #endif
0119 };
0120
0121
0122 static void jpeg_define(u8 *jpeg_hdr,
0123 int height,
0124 int width,
0125 int samplesY)
0126 {
0127 memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
0128 #ifndef CONEX_CAM
0129 jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
0130 jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
0131 jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
0132 jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
0133 jpeg_hdr[JPEG_HEIGHT_OFFSET + 6] = samplesY;
0134 #endif
0135 }
0136
0137
0138 static void jpeg_set_qual(u8 *jpeg_hdr,
0139 int quality)
0140 {
0141 int i, sc;
0142
0143 if (quality <= 0)
0144 sc = 5000;
0145 else if (quality < 50)
0146 sc = 5000 / quality;
0147 else
0148 sc = 200 - quality * 2;
0149 for (i = 0; i < 64; i++) {
0150 jpeg_hdr[JPEG_QT0_OFFSET + i] =
0151 (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
0152 jpeg_hdr[JPEG_QT1_OFFSET + i] =
0153 (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
0154 }
0155 }
0156 #endif