1 /*
2 * MJPEG A dump header bitstream filter
3 * Copyright (c) 2006 Baptiste Coudurier
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * MJPEG A dump header bitstream filter
25 * modifies bitstream to be decoded by quicktime
26 */
27
32
33
35 {
37 uint8_t *out_buf;
38 unsigned dqt = 0,
dht = 0, sof0 = 0;
40
44
48
52
54 bytestream_put_byte(&out_buf, 0xff);
55 bytestream_put_byte(&out_buf,
SOI);
56 bytestream_put_byte(&out_buf, 0xff);
57 bytestream_put_byte(&out_buf,
APP1);
58 bytestream_put_be16(&out_buf, 42); /* size */
59 bytestream_put_be32(&out_buf, 0);
61 bytestream_put_be32(&out_buf, in->
size + 44);
/* field size */
62 bytestream_put_be32(&out_buf, in->
size + 44);
/* pad field size */
63 bytestream_put_be32(&out_buf, 0); /* next ptr */
64
65 for (
i = 0;
i < in->
size - 1;
i++) {
66 if (in->
data[
i] == 0xff) {
67 switch (in->
data[
i + 1]) {
70 case SOF0: sof0 =
i + 46;
break;
72 bytestream_put_be32(&out_buf,
dqt);
/* quant off */
73 bytestream_put_be32(&out_buf,
dht);
/* huff off */
74 bytestream_put_be32(&out_buf, sof0); /* image off */
75 bytestream_put_be32(&out_buf,
i + 46);
/* scan off */
76 bytestream_put_be32(&out_buf,
i + 46 +
AV_RB16(in->
data +
i + 2));
/* data off */
78
79 out->size = out_buf -
out->data;
81 return 0;
88 return 0;
89 }
90 }
91 }
92 }
98 }
99
102 };
103
105 .
p.
name =
"mjpegadump",
108 };