AOMedia AV1 Codec
bitstream.h
1
/*
2
* Copyright (c) 2016, Alliance for Open Media. All rights reserved
3
*
4
* This source code is subject to the terms of the BSD 2 Clause License and
5
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6
* was not distributed with this source code in the LICENSE file, you can
7
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
8
* Media Patent License 1.0 was not distributed with this source code in the
9
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10
*/
11
12
#ifndef AOM_AV1_ENCODER_BITSTREAM_H_
13
#define AOM_AV1_ENCODER_BITSTREAM_H_
14
15
#ifdef __cplusplus
16
extern
"C"
{
17
#endif
18
19
#include "av1/common/av1_common_int.h"
20
#include "av1/common/blockd.h"
21
#include "
av1/common/enums.h
"
22
#include "av1/encoder/level.h"
23
#include "aom_dsp/bitwriter.h"
24
25
struct
aom_write_bit_buffer;
26
struct
AV1_COMP
;
27
struct
ThreadData;
28
31
// Stores the location and size of a tile's data in the bitstream. Used for
32
// later identifying identical tiles
33
typedef
struct
{
34
uint8_t *data;
35
size_t
size;
36
} TileBufferEnc;
37
38
typedef
struct
{
39
uint8_t *frame_header;
40
size_t
obu_header_byte_offset;
41
size_t
total_length;
42
} FrameHeaderInfo;
43
44
typedef
struct
{
45
struct
aom_write_bit_buffer *saved_wb;
// Bit stream buffer writer structure
46
TileBufferEnc buf;
// Structure to hold bitstream buffer and size
47
uint32_t *total_size;
// Size of the bitstream buffer for the tile in bytes
48
uint8_t *dst;
// Base address of tile bitstream buffer
49
uint8_t *tile_data_curr;
// Base address of tile-group bitstream buffer
50
size_t
tile_buf_size;
// Available bitstream buffer for the tile in bytes
51
uint8_t obu_extn_header;
// Presence of OBU extension header
52
uint32_t obu_header_size;
// Size of the OBU header
53
int
curr_tg_hdr_size;
// Size of the obu, tg, frame headers
54
int
tile_size_mi;
// Tile size in mi units
55
int
tile_row;
// Number of tile rows
56
int
tile_col;
// Number of tile columns
57
int
is_last_tile_in_tg;
// Flag to indicate last tile in a tile-group
58
int
new_tg;
// Flag to indicate starting of a new tile-group
59
} PackBSParams;
60
61
typedef
struct
{
62
uint64_t abs_sum_level;
63
uint16_t tile_idx;
64
} PackBSTileOrder;
65
66
// Pack bitstream data for pack bitstream multi-threading.
67
typedef
struct
{
68
#if CONFIG_MULTITHREAD
<