blob: 1d708658f54700fba2d20763b4e60a7982615d5e
1 | /* |
2 | * Common Ut Video header |
3 | * Copyright (c) 2011 Konstantin Shishkov |
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 | #ifndef AVCODEC_UTVIDEO_H |
23 | #define AVCODEC_UTVIDEO_H |
24 | |
25 | /** |
26 | * @file |
27 | * Common Ut Video header |
28 | */ |
29 | |
30 | #include "libavutil/common.h" |
31 | #include "avcodec.h" |
32 | #include "bswapdsp.h" |
33 | #include "lossless_videodsp.h" |
34 | #include "lossless_videoencdsp.h" |
35 | |
36 | enum { |
37 | PRED_NONE = 0, |
38 | PRED_LEFT, |
39 | PRED_GRADIENT, |
40 | PRED_MEDIAN, |
41 | }; |
42 | |
43 | enum { |
44 | COMP_NONE = 0, |
45 | COMP_HUFF, |
46 | }; |
47 | |
48 | /* |
49 | * "Original format" markers. |
50 | * Based on values gotten from the official VFW encoder. |
51 | * They are not used during decoding, but they do have |
52 | * an informative role on seeing what was input |
53 | * to the encoder. |
54 | */ |
55 | enum { |
56 | UTVIDEO_RGB = MKTAG(0x00, 0x00, 0x01, 0x18), |
57 | UTVIDEO_RGBA = MKTAG(0x00, 0x00, 0x02, 0x18), |
58 | UTVIDEO_420 = MKTAG('Y', 'V', '1', '2'), |
59 | UTVIDEO_422 = MKTAG('Y', 'U', 'Y', '2'), |
60 | UTVIDEO_444 = MKTAG('Y', 'V', '2', '4'), |
61 | }; |
62 | |
63 | /* Mapping of libavcodec prediction modes to Ut Video's */ |
64 | extern const int ff_ut_pred_order[5]; |
65 | |
66 | /* Order of RGB(A) planes in Ut Video */ |
67 | extern const int ff_ut_rgb_order[4]; |
68 | |
69 | typedef struct UtvideoContext { |
70 | const AVClass *class; |
71 | AVCodecContext *avctx; |
72 | BswapDSPContext bdsp; |
73 | LLVidDSPContext llviddsp; |
74 | LLVidEncDSPContext llvidencdsp; |
75 | |
76 | uint32_t frame_info_size, flags, frame_info; |
77 | int planes; |
78 | int slices; |
79 | int compression; |
80 | int interlaced; |
81 | int frame_pred; |
82 | int pro; |
83 | |
84 | ptrdiff_t slice_stride; |
85 | uint8_t *slice_bits, *slice_buffer[4]; |
86 | int slice_bits_size; |
87 | } UtvideoContext; |
88 | |
89 | typedef struct HuffEntry { |
90 | uint16_t sym; |
91 | uint8_t len; |
92 | uint32_t code; |
93 | } HuffEntry; |
94 | |
95 | /* Compare huffman tree nodes */ |
96 | int ff_ut_huff_cmp_len(const void *a, const void *b); |
97 | int ff_ut10_huff_cmp_len(const void *a, const void *b); |
98 | |
99 | #endif /* AVCODEC_UTVIDEO_H */ |
100 |