Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
2a1b3af3
Commit
2a1b3af3
authored
Oct 26, 2016
by
Alex Converse
Browse files
ans: Give buf_ans ownership of the AnsCoder
Change-Id: I509bbba0d84c1d378044e2c612dd48cd8f99848d
parent
7833d2bf
Changes
2
Hide whitespace changes
Inline
Side-by-side
aom_dsp/buf_ans.h
View file @
2a1b3af3
...
...
@@ -39,8 +39,10 @@ struct buffered_ans_symbol {
struct
BufAnsCoder
{
struct
aom_internal_error_info
*
error
;
struct
buffered_ans_symbol
*
buf
;
struct
AnsCoder
ans
;
int
size
;
int
offset
;
int
output_bytes
;
};
void
aom_buf_ans_alloc
(
struct
BufAnsCoder
*
c
,
...
...
@@ -50,8 +52,11 @@ void aom_buf_ans_free(struct BufAnsCoder *c);
void
aom_buf_ans_grow
(
struct
BufAnsCoder
*
c
);
static
INLINE
void
buf_ans_write_reset
(
struct
BufAnsCoder
*
const
c
)
{
static
INLINE
void
buf_ans_write_init
(
struct
BufAnsCoder
*
const
c
,
uint8_t
*
const
output_buffer
)
{
c
->
offset
=
0
;
c
->
output_bytes
=
0
;
ans_write_init
(
&
c
->
ans
,
output_buffer
);
}
static
INLINE
void
buf_uabs_write
(
struct
BufAnsCoder
*
const
c
,
uint8_t
val
,
...
...
@@ -78,20 +83,21 @@ static INLINE void buf_rans_write(struct BufAnsCoder *const c,
++
c
->
offset
;
}
static
INLINE
void
buf_ans_flush
(
const
struct
BufAnsCoder
*
const
c
,
struct
AnsCoder
*
ans
)
{
static
INLINE
void
buf_ans_flush
(
struct
BufAnsCoder
*
const
c
)
{
int
offset
;
for
(
offset
=
c
->
offset
-
1
;
offset
>=
0
;
--
offset
)
{
if
(
c
->
buf
[
offset
].
method
==
ANS_METHOD_RANS
)
{
struct
rans_sym
sym
;
sym
.
prob
=
c
->
buf
[
offset
].
prob
;
sym
.
cum_prob
=
c
->
buf
[
offset
].
val_start
;
rans_write
(
ans
,
&
sym
);
rans_write
(
&
c
->
ans
,
&
sym
);
}
else
{
uabs_write
(
ans
,
(
uint8_t
)
c
->
buf
[
offset
].
val_start
,
uabs_write
(
&
c
->
ans
,
(
uint8_t
)
c
->
buf
[
offset
].
val_start
,
(
AnsP8
)
c
->
buf
[
offset
].
prob
);
}
}
c
->
offset
=
0
;
c
->
output_bytes
+=
ans_write_end
(
&
c
->
ans
);
}
static
INLINE
void
buf_uabs_write_bit
(
struct
BufAnsCoder
*
c
,
int
bit
)
{
...
...
@@ -106,6 +112,11 @@ static INLINE void buf_uabs_write_literal(struct BufAnsCoder *c, int literal,
for
(
bit
=
bits
-
1
;
bit
>=
0
;
bit
--
)
buf_uabs_write_bit
(
c
,
1
&
(
literal
>>
bit
));
}
static
INLINE
int
buf_ans_write_end
(
struct
BufAnsCoder
*
const
c
)
{
assert
(
c
->
offset
==
0
);
return
c
->
output_bytes
;
}
#ifdef __cplusplus
}
// extern "C"
#endif // __cplusplus
...
...
av1/encoder/bitstream.c
View file @
2a1b3af3
...
...
@@ -3464,7 +3464,7 @@ static uint32_t write_tiles(AV1_COMP *const cpi, uint8_t *const dst,
#endif
const
AV1_COMMON
*
const
cm
=
&
cpi
->
common
;
#if CONFIG_ANS
struct
AnsCoder
token
_ans
;
struct
Buf
AnsCoder
*
buf_ans
=
&
cpi
->
buf
_ans
;
#else
aom_writer
mode_bc
;
#endif // CONFIG_ANS
...
...
@@ -3495,9 +3495,6 @@ static uint32_t write_tiles(AV1_COMP *const cpi, uint8_t *const dst,
#if CONFIG_EXT_TILE
const
int
have_tiles
=
tile_cols
*
tile_rows
>
1
;
#endif // CONFIG_EXT_TILE
#if CONFIG_ANS
struct
BufAnsCoder
*
buf_ans
=
&
cpi
->
buf_ans
;
#endif // CONFIG_ANS
*
max_tile_size
=
0
;
*
max_tile_col_size
=
0
;
...
...
@@ -3536,12 +3533,11 @@ static uint32_t write_tiles(AV1_COMP *const cpi, uint8_t *const dst,
aom_stop_encode
(
&
mode_bc
);
tile_size
=
mode_bc
.
pos
;
#else
buf_ans_write_
rese
t
(
buf_ans
);
buf_ans_write_
ini
t
(
buf_ans
,
buf
->
data
+
data_offset
);
write_modes
(
cpi
,
&
tile_info
,
buf_ans
,
&
tok
,
tok_end
);
assert
(
tok
==
tok_end
);
ans_write_init
(
&
token_ans
,
buf
->
data
+
data_offset
);
buf_ans_flush
(
buf_ans
,
&
token_ans
);
tile_size
=
ans_write_end
(
&
token_ans
);
buf_ans_flush
(
buf_ans
);
tile_size
=
buf_ans_write_end
(
buf_ans
);
#endif // !CONFIG_ANS
buf
->
size
=
tile_size
;
...
...
@@ -3686,12 +3682,11 @@ static uint32_t write_tiles(AV1_COMP *const cpi, uint8_t *const dst,
if
(
!
is_last_tile
)
total_size
+=
4
;
#if CONFIG_ANS
buf_ans_write_
rese
t
(
buf_ans
);
buf_ans_write_
ini
t
(
buf_ans
,
dst
+
total_size
);
write_modes
(
cpi
,
&
tile_info
,
buf_ans
,
&
tok
,
tok_end
);
assert
(
tok
==
tok_end
);
ans_write_init
(
&
token_ans
,
dst
+
total_size
);
buf_ans_flush
(
buf_ans
,
&
token_ans
);
tile_size
=
ans_write_end
(
&
token_ans
);
buf_ans_flush
(
buf_ans
);
tile_size
=
buf_ans_write_end
(
buf_ans
);
#else
aom_start_encode
(
&
mode_bc
,
dst
+
total_size
);
#if CONFIG_PVQ
...
...
@@ -3703,10 +3698,10 @@ static uint32_t write_tiles(AV1_COMP *const cpi, uint8_t *const dst,
assert
(
tok
==
tok_end
);
aom_stop_encode
(
&
mode_bc
);
tile_size
=
mode_bc
.
pos
;
#endif
#endif
// CONFIG_ANS
#if CONFIG_PVQ
cpi
->
td
.
mb
.
pvq_q
=
NULL
;
#endif
// !CONFIG_ANS
#endif
assert
(
tile_size
>
0
);
...
...
@@ -4132,10 +4127,9 @@ static uint32_t write_compressed_header(AV1_COMP *cpi, uint8_t *data) {
#endif
#if CONFIG_ANS
struct
AnsCoder
header_ans
;
int
header_size
;
header_bc
=
&
cpi
->
buf_ans
;
buf_ans_write_
rese
t
(
header_bc
);
buf_ans_write_
ini
t
(
header_bc
,
data
);
#else
aom_writer
real_header_bc
;
header_bc
=
&
real_header_bc
;
...
...
@@ -4333,9 +4327,8 @@ static uint32_t write_compressed_header(AV1_COMP *cpi, uint8_t *data) {
#endif
#endif
#if CONFIG_ANS
ans_write_init
(
&
header_ans
,
data
);
buf_ans_flush
(
header_bc
,
&
header_ans
);
header_size
=
ans_write_end
(
&
header_ans
);
buf_ans_flush
(
header_bc
);
header_size
=
buf_ans_write_end
(
header_bc
);
assert
(
header_size
<=
0xffff
);
return
header_size
;
#else
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment