Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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