xref: /third_party/ffmpeg/libavcodec/mjpeg.h (revision cabdff1a)
1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * MJPEG encoder and decoder
3cabdff1aSopenharmony_ci * Copyright (c) 2000, 2001 Fabrice Bellard
4cabdff1aSopenharmony_ci * Copyright (c) 2003 Alex Beregszaszi
5cabdff1aSopenharmony_ci * Copyright (c) 2003-2004 Michael Niedermayer
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * Support for external huffman table, various fixes (AVID workaround),
8cabdff1aSopenharmony_ci * aspecting, new decode_frame mechanism and apple mjpeg-b support
9cabdff1aSopenharmony_ci *                                  by Alex Beregszaszi
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * This file is part of FFmpeg.
12cabdff1aSopenharmony_ci *
13cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
14cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
15cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
16cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
17cabdff1aSopenharmony_ci *
18cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
19cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
20cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21cabdff1aSopenharmony_ci * Lesser General Public License for more details.
22cabdff1aSopenharmony_ci *
23cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
24cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
25cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26cabdff1aSopenharmony_ci */
27cabdff1aSopenharmony_ci
28cabdff1aSopenharmony_ci/**
29cabdff1aSopenharmony_ci * @file
30cabdff1aSopenharmony_ci * MJPEG encoder and decoder.
31cabdff1aSopenharmony_ci */
32cabdff1aSopenharmony_ci
33cabdff1aSopenharmony_ci#ifndef AVCODEC_MJPEG_H
34cabdff1aSopenharmony_ci#define AVCODEC_MJPEG_H
35cabdff1aSopenharmony_ci
36cabdff1aSopenharmony_ci/* JPEG marker codes */
37cabdff1aSopenharmony_cienum JpegMarker {
38cabdff1aSopenharmony_ci    /* start of frame */
39cabdff1aSopenharmony_ci    SOF0  = 0xc0,       /* baseline */
40cabdff1aSopenharmony_ci    SOF1  = 0xc1,       /* extended sequential, huffman */
41cabdff1aSopenharmony_ci    SOF2  = 0xc2,       /* progressive, huffman */
42cabdff1aSopenharmony_ci    SOF3  = 0xc3,       /* lossless, huffman */
43cabdff1aSopenharmony_ci
44cabdff1aSopenharmony_ci    SOF5  = 0xc5,       /* differential sequential, huffman */
45cabdff1aSopenharmony_ci    SOF6  = 0xc6,       /* differential progressive, huffman */
46cabdff1aSopenharmony_ci    SOF7  = 0xc7,       /* differential lossless, huffman */
47cabdff1aSopenharmony_ci    JPG   = 0xc8,       /* reserved for JPEG extension */
48cabdff1aSopenharmony_ci    SOF9  = 0xc9,       /* extended sequential, arithmetic */
49cabdff1aSopenharmony_ci    SOF10 = 0xca,       /* progressive, arithmetic */
50cabdff1aSopenharmony_ci    SOF11 = 0xcb,       /* lossless, arithmetic */
51cabdff1aSopenharmony_ci
52cabdff1aSopenharmony_ci    SOF13 = 0xcd,       /* differential sequential, arithmetic */
53cabdff1aSopenharmony_ci    SOF14 = 0xce,       /* differential progressive, arithmetic */
54cabdff1aSopenharmony_ci    SOF15 = 0xcf,       /* differential lossless, arithmetic */
55cabdff1aSopenharmony_ci
56cabdff1aSopenharmony_ci    DHT   = 0xc4,       /* define huffman tables */
57cabdff1aSopenharmony_ci
58cabdff1aSopenharmony_ci    DAC   = 0xcc,       /* define arithmetic-coding conditioning */
59cabdff1aSopenharmony_ci
60cabdff1aSopenharmony_ci    /* restart with modulo 8 count "m" */
61cabdff1aSopenharmony_ci    RST0  = 0xd0,
62cabdff1aSopenharmony_ci    RST1  = 0xd1,
63cabdff1aSopenharmony_ci    RST2  = 0xd2,
64cabdff1aSopenharmony_ci    RST3  = 0xd3,
65cabdff1aSopenharmony_ci    RST4  = 0xd4,
66cabdff1aSopenharmony_ci    RST5  = 0xd5,
67cabdff1aSopenharmony_ci    RST6  = 0xd6,
68cabdff1aSopenharmony_ci    RST7  = 0xd7,
69cabdff1aSopenharmony_ci
70cabdff1aSopenharmony_ci    SOI   = 0xd8,       /* start of image */
71cabdff1aSopenharmony_ci    EOI   = 0xd9,       /* end of image */
72cabdff1aSopenharmony_ci    SOS   = 0xda,       /* start of scan */
73cabdff1aSopenharmony_ci    DQT   = 0xdb,       /* define quantization tables */
74cabdff1aSopenharmony_ci    DNL   = 0xdc,       /* define number of lines */
75cabdff1aSopenharmony_ci    DRI   = 0xdd,       /* define restart interval */
76cabdff1aSopenharmony_ci    DHP   = 0xde,       /* define hierarchical progression */
77cabdff1aSopenharmony_ci    EXP   = 0xdf,       /* expand reference components */
78cabdff1aSopenharmony_ci
79cabdff1aSopenharmony_ci    APP0  = 0xe0,
80cabdff1aSopenharmony_ci    APP1  = 0xe1,
81cabdff1aSopenharmony_ci    APP2  = 0xe2,
82cabdff1aSopenharmony_ci    APP3  = 0xe3,
83cabdff1aSopenharmony_ci    APP4  = 0xe4,
84cabdff1aSopenharmony_ci    APP5  = 0xe5,
85cabdff1aSopenharmony_ci    APP6  = 0xe6,
86cabdff1aSopenharmony_ci    APP7  = 0xe7,
87cabdff1aSopenharmony_ci    APP8  = 0xe8,
88cabdff1aSopenharmony_ci    APP9  = 0xe9,
89cabdff1aSopenharmony_ci    APP10 = 0xea,
90cabdff1aSopenharmony_ci    APP11 = 0xeb,
91cabdff1aSopenharmony_ci    APP12 = 0xec,
92cabdff1aSopenharmony_ci    APP13 = 0xed,
93cabdff1aSopenharmony_ci    APP14 = 0xee,
94cabdff1aSopenharmony_ci    APP15 = 0xef,
95cabdff1aSopenharmony_ci
96cabdff1aSopenharmony_ci    JPG0  = 0xf0,
97cabdff1aSopenharmony_ci    JPG1  = 0xf1,
98cabdff1aSopenharmony_ci    JPG2  = 0xf2,
99cabdff1aSopenharmony_ci    JPG3  = 0xf3,
100cabdff1aSopenharmony_ci    JPG4  = 0xf4,
101cabdff1aSopenharmony_ci    JPG5  = 0xf5,
102cabdff1aSopenharmony_ci    JPG6  = 0xf6,
103cabdff1aSopenharmony_ci    SOF48 = 0xf7,       ///< JPEG-LS
104cabdff1aSopenharmony_ci    LSE   = 0xf8,       ///< JPEG-LS extension parameters
105cabdff1aSopenharmony_ci    JPG9  = 0xf9,
106cabdff1aSopenharmony_ci    JPG10 = 0xfa,
107cabdff1aSopenharmony_ci    JPG11 = 0xfb,
108cabdff1aSopenharmony_ci    JPG12 = 0xfc,
109cabdff1aSopenharmony_ci    JPG13 = 0xfd,
110cabdff1aSopenharmony_ci
111cabdff1aSopenharmony_ci    COM   = 0xfe,       /* comment */
112cabdff1aSopenharmony_ci
113cabdff1aSopenharmony_ci    TEM   = 0x01,       /* temporary private use for arithmetic coding */
114cabdff1aSopenharmony_ci
115cabdff1aSopenharmony_ci    /* 0x02 -> 0xbf reserved */
116cabdff1aSopenharmony_ci};
117cabdff1aSopenharmony_ci
118cabdff1aSopenharmony_ci#define PREDICT(ret, topleft, top, left, predictor)\
119cabdff1aSopenharmony_ci    switch(predictor){\
120cabdff1aSopenharmony_ci        case 0: ret= 0; break;\
121cabdff1aSopenharmony_ci        case 1: ret= left; break;\
122cabdff1aSopenharmony_ci        case 2: ret= top; break;\
123cabdff1aSopenharmony_ci        case 3: ret= topleft; break;\
124cabdff1aSopenharmony_ci        case 4: ret= left   +   top - topleft; break;\
125cabdff1aSopenharmony_ci        case 5: ret= left   + ((top - topleft)>>1); break;\
126cabdff1aSopenharmony_ci        case 6: ret= top + ((left   - topleft)>>1); break;\
127cabdff1aSopenharmony_ci        default:\
128cabdff1aSopenharmony_ci        case 7: ret= (left + top)>>1; break;\
129cabdff1aSopenharmony_ci    }
130cabdff1aSopenharmony_ci
131cabdff1aSopenharmony_ci#endif /* AVCODEC_MJPEG_H */
132