1 /*
2  * Copyright (C) 2010-2013 Bluecherry, LLC <http://www.bluecherrydvr.com>
3  *
4  * Original author:
5  * Ben Collins <bcollins@ubuntu.com>
6  *
7  * Additional work by:
8  * John Brooks <john.brooks@bluecherry.net>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20 
21 #ifndef __SOLO6X10_JPEG_H
22 #define __SOLO6X10_JPEG_H
23 
24 static const u8 jpeg_header[] = {
25 	0xff, 0xd8, 0xff, 0xfe, 0x00, 0x0d, 0x42, 0x6c,
26 	0x75, 0x65, 0x63, 0x68, 0x65, 0x72, 0x72, 0x79,
27 	0x20, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x20, 0x16,
28 	0x18, 0x1c, 0x18, 0x14, 0x20, 0x1c, 0x1a, 0x1c,
29 	0x24, 0x22, 0x20, 0x26, 0x30, 0x50, 0x34, 0x30,
30 	0x2c, 0x2c, 0x30, 0x62, 0x46, 0x4a, 0x3a, 0x50,
31 	0x74, 0x66, 0x7a, 0x78, 0x72, 0x66, 0x70, 0x6e,
32 	0x80, 0x90, 0xb8, 0x9c, 0x80, 0x88, 0xae, 0x8a,
33 	0x6e, 0x70, 0xa0, 0xda, 0xa2, 0xae, 0xbe, 0xc4,
34 	0xce, 0xd0, 0xce, 0x7c, 0x9a, 0xe2, 0xf2, 0xe0,
35 	0xc8, 0xf0, 0xb8, 0xca, 0xce, 0xc6, 0xff, 0xdb,
36 	0x00, 0x43, 0x01, 0x22, 0x24, 0x24, 0x30, 0x2a,
37 	0x30, 0x5e, 0x34, 0x34, 0x5e, 0xc6, 0x84, 0x70,
38 	0x84, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
39 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
40 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
41 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
42 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
43 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
44 	0xc6, 0xc6, 0xc6, 0xff, 0xc4, 0x01, 0xa2, 0x00,
45 	0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
46 	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
48 	0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01,
49 	0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04,
50 	0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03,
51 	0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41,
52 	0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14,
53 	0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1,
54 	0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62,
55 	0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19,
56 	0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34,
57 	0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44,
58 	0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54,
59 	0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64,
60 	0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74,
61 	0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84,
62 	0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93,
63 	0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2,
64 	0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
65 	0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
66 	0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
67 	0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
68 	0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
69 	0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3,
70 	0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x01,
71 	0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
72 	0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
73 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
74 	0x08, 0x09, 0x0a, 0x0b, 0x11, 0x00, 0x02, 0x01,
75 	0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04,
76 	0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02,
77 	0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12,
78 	0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32,
79 	0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1,
80 	0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72,
81 	0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1,
82 	0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29,
83 	0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43,
84 	0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53,
85 	0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63,
86 	0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73,
87 	0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82,
88 	0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a,
89 	0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
90 	0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
91 	0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
92 	0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
93 	0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5,
94 	0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4,
95 	0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3,
96 	0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff,
97 	0xc0, 0x00, 0x11, 0x08, 0x00, 0xf0, 0x02, 0xc0,
98 	0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03,
99 	0x11, 0x01, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01,
100 	0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
101 };
102 
103 /* This is the byte marker for the start of SOF0: 0xffc0 marker */
104 #define SOF0_START	575
105 
106 /* This is the byte marker for the start of the DQT */
107 #define DQT_START	17
108 #define DQT_LEN		138
109 static const u8 jpeg_dqt[4][DQT_LEN] = {
110 	{
111 		0xff, 0xdb, 0x00, 0x43, 0x00,
112 		0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07,
113 		0x07, 0x07, 0x09, 0x09, 0x08, 0x0a, 0x0c, 0x14,
114 		0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, 0x13,
115 		0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, 0x1a,
116 		0x1c, 0x1c, 0x20, 0x24, 0x2e, 0x27, 0x20, 0x22,
117 		0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, 0x2c,
118 		0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, 0x39,
119 		0x3d, 0x38, 0x32, 0x3c, 0x2e, 0x33, 0x34, 0x32,
120 		0xff, 0xdb, 0x00, 0x43, 0x01,
121 		0x09, 0x09, 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0d,
122 		0x0d, 0x18, 0x32, 0x21, 0x1c, 0x21, 0x32, 0x32,
123 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
124 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
125 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
126 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
127 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
128 		0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32
129 	}, {
130 		0xff, 0xdb, 0x00, 0x43, 0x00,
131 		0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
132 		0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
133 		0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
134 		0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
135 		0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
136 		0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
137 		0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
138 		0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
139 		0xff, 0xdb, 0x00, 0x43, 0x01,
140 		0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
141 		0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
142 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
143 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
144 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
145 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
146 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
147 		0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63
148 	}, {
149 		0xff, 0xdb, 0x00, 0x43, 0x00,
150 		0x20, 0x16, 0x18, 0x1c, 0x18, 0x14, 0x20, 0x1c,
151 		0x1a, 0x1c, 0x24, 0x22, 0x20, 0x26, 0x30, 0x50,
152 		0x34, 0x30, 0x2c, 0x2c, 0x30, 0x62, 0x46, 0x4a,
153 		0x3a, 0x50, 0x74, 0x66, 0x7a, 0x78, 0x72, 0x66,
154 		0x70, 0x6e, 0x80, 0x90, 0xb8, 0x9c, 0x80, 0x88,
155 		0xae, 0x8a, 0x6e, 0x70, 0xa0, 0xda, 0xa2, 0xae,
156 		0xbe, 0xc4, 0xce, 0xd0, 0xce, 0x7c, 0x9a, 0xe2,
157 		0xf2, 0xe0, 0xc8, 0xf0, 0xb8, 0xca, 0xce, 0xc6,
158 		0xff, 0xdb, 0x00, 0x43, 0x01,
159 		0x22, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
160 		0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
161 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
162 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
163 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
164 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
165 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
166 		0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6
167 	}, {
168 		0xff, 0xdb, 0x00, 0x43, 0x00,
169 		0x30, 0x21, 0x24, 0x2a, 0x24, 0x1e, 0x30, 0x2a,
170 		0x27, 0x2a, 0x36, 0x33, 0x30, 0x39, 0x48, 0x78,
171 		0x4e, 0x48, 0x42, 0x42, 0x48, 0x93, 0x69, 0x6f,
172 		0x57, 0x78, 0xae, 0x99, 0xb7, 0xb4, 0xab, 0x99,
173 		0xa8, 0xa5, 0xc0, 0xd8, 0xff, 0xea, 0xc0, 0xcc,
174 		0xff, 0xcf, 0xa5, 0xa8, 0xf0, 0xff, 0xf3, 0xff,
175 		0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0xe7, 0xff,
176 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
177 		0xff, 0xdb, 0x00, 0x43, 0x01,
178 		0x33, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
179 		0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
180 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
181 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
182 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
183 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
184 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
185 		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
186 	}
187 };
188 
189 #endif /* __SOLO6X10_JPEG_H */
190