Commit | Line | Data |
---|---|---|
18f1706f MT |
1 | /* |
2 | * This file is part of Libav. | |
3 | * | |
4 | * Libav is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU Lesser General Public | |
6 | * License as published by the Free Software Foundation; either | |
7 | * version 2.1 of the License, or (at your option) any later version. | |
8 | * | |
9 | * Libav is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * Lesser General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU Lesser General Public | |
15 | * License along with Libav; if not, write to the Free Software | |
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
17 | */ | |
18 | ||
19 | #ifndef AVCODEC_CBS_INTERNAL_H | |
20 | #define AVCODEC_CBS_INTERNAL_H | |
21 | ||
22 | #include "avcodec.h" | |
23 | #include "bitstream.h" | |
24 | #include "cbs.h" | |
25 | #include "put_bits.h" | |
26 | ||
27 | ||
28 | typedef struct CodedBitstreamType { | |
29 | enum AVCodecID codec_id; | |
30 | ||
31 | size_t priv_data_size; | |
32 | ||
33 | // Split frag->data into coded bitstream units, creating the | |
34 | // frag->units array. Fill data but not content on each unit. | |
35 | int (*split_fragment)(CodedBitstreamContext *ctx, | |
36 | CodedBitstreamFragment *frag, | |
37 | int header); | |
38 | ||
39 | // Read the unit->data bitstream and decompose it, creating | |
40 | // unit->content. | |
41 | int (*read_unit)(CodedBitstreamContext *ctx, | |
42 | CodedBitstreamUnit *unit); | |
43 | ||
44 | // Write the unit->data bitstream from unit->content. | |
45 | int (*write_unit)(CodedBitstreamContext *ctx, | |
46 | CodedBitstreamUnit *unit); | |
47 | ||
48 | // Read the data from all of frag->units and assemble it into | |
49 | // a bitstream for the whole fragment. | |
50 | int (*assemble_fragment)(CodedBitstreamContext *ctx, | |
51 | CodedBitstreamFragment *frag); | |
52 | ||
53 | // Free the content and data of a single unit. | |
54 | void (*free_unit)(CodedBitstreamUnit *unit); | |
55 | ||
56 | // Free the codec internal state. | |
57 | void (*close)(CodedBitstreamContext *ctx); | |
58 | } CodedBitstreamType; | |
59 | ||
60 | ||
61 | // Helper functions for trace output. | |
62 | ||
63 | void ff_cbs_trace_header(CodedBitstreamContext *ctx, | |
64 | const char *name); | |
65 | ||
66 | void ff_cbs_trace_syntax_element(CodedBitstreamContext *ctx, | |
67 | int position, const char *name, | |
68 | const char *bitstring, int64_t value); | |
69 | ||
70 | ||
71 | // Helper functions for read/write of common bitstream elements, including | |
72 | // generation of trace output. | |
73 | ||
74 | int ff_cbs_read_unsigned(CodedBitstreamContext *ctx, BitstreamContext *bc, | |
75 | int width, const char *name, uint32_t *write_to, | |
76 | uint32_t range_min, uint32_t range_max); | |
77 | ||
78 | int ff_cbs_write_unsigned(CodedBitstreamContext *ctx, PutBitContext *pbc, | |
79 | int width, const char *name, uint32_t value, | |
80 | uint32_t range_min, uint32_t range_max); | |
81 | ||
82 | ||
acf06f45 | 83 | extern const CodedBitstreamType ff_cbs_type_h264; |
867381b8 | 84 | extern const CodedBitstreamType ff_cbs_type_h265; |
acf06f45 MT |
85 | |
86 | ||
18f1706f | 87 | #endif /* AVCODEC_CBS_INTERNAL_H */ |