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
00e2c6bf
Commit
00e2c6bf
authored
Nov 28, 2012
by
John Koleszar
Committed by
Gerrit Code Review
Nov 28, 2012
Browse files
Merge "Clamp decoded feature data" into experimental
parents
b07fcf5f
a1f15814
Changes
8
Hide whitespace changes
Inline
Side-by-side
vp9/common/vp9_seg_common.c
View file @
00e2c6bf
...
...
@@ -8,11 +8,13 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include
<assert.h>
#include
"vp9/common/vp9_blockd.h"
#include
"vp9/common/vp9_seg_common.h"
static
const
int
segfeaturedata_signed
[
SEG_LVL_MAX
]
=
{
1
,
1
,
0
,
0
,
0
,
0
};
static
const
int
seg_feature_data_
bits
[
SEG_LVL_MAX
]
=
{
QINDEX_BITS
,
6
,
4
,
5
,
8
,
2
};
static
const
int
seg_feature_data_
max
[
SEG_LVL_MAX
]
=
{
MAXQ
,
63
,
0xf
,
MB_MODE_COUNT
-
1
,
255
,
TX_SIZE_MAX
-
1
};
// These functions provide access to new segment level features.
// Eventually these function may be "optimized out" but for the moment,
...
...
@@ -45,8 +47,8 @@ void vp9_disable_segfeature(MACROBLOCKD *xd,
xd
->
segment_feature_mask
[
segment_id
]
&=
~
(
1
<<
feature_id
);
}
int
vp9_seg_feature_data_
bits
(
SEG_LVL_FEATURES
feature_id
)
{
return
seg_feature_data_
bits
[
feature_id
];
int
vp9_seg_feature_data_
max
(
SEG_LVL_FEATURES
feature_id
)
{
return
seg_feature_data_
max
[
feature_id
];
}
int
vp9_is_segfeature_signed
(
SEG_LVL_FEATURES
feature_id
)
{
...
...
@@ -63,6 +65,12 @@ void vp9_set_segdata(MACROBLOCKD *xd,
int
segment_id
,
SEG_LVL_FEATURES
feature_id
,
int
seg_data
)
{
assert
(
seg_data
<=
seg_feature_data_max
[
feature_id
]);
if
(
seg_data
<
0
)
{
assert
(
segfeaturedata_signed
[
feature_id
]);
assert
(
-
seg_data
<=
seg_feature_data_max
[
feature_id
]);
}
xd
->
segment_feature_data
[
segment_id
][
feature_id
]
=
seg_data
;
}
...
...
vp9/common/vp9_seg_common.h
View file @
00e2c6bf
...
...
@@ -29,7 +29,7 @@ void vp9_disable_segfeature(MACROBLOCKD *xd,
int
segment_id
,
SEG_LVL_FEATURES
feature_id
);
int
vp9_seg_feature_data_
bits
(
SEG_LVL_FEATURES
feature_id
);
int
vp9_seg_feature_data_
max
(
SEG_LVL_FEATURES
feature_id
);
int
vp9_is_segfeature_signed
(
SEG_LVL_FEATURES
feature_id
);
...
...
vp9/decoder/vp9_dboolhuff.c
View file @
00e2c6bf
...
...
@@ -98,3 +98,15 @@ int vp9_decode_term_subexp(BOOL_DECODER *br, int k, int num_syms) {
}
return
word
;
}
int
vp9_decode_unsigned_max
(
BOOL_DECODER
*
br
,
int
max
)
{
int
data
=
0
,
bit
=
0
,
lmax
=
max
;
while
(
lmax
)
{
data
|=
decode_bool
(
br
,
128
)
<<
bit
++
;
lmax
>>=
1
;
}
if
(
data
>
max
)
return
max
;
return
data
;
}
vp9/decoder/vp9_dboolhuff.h
View file @
00e2c6bf
...
...
@@ -150,4 +150,6 @@ static int bool_error(BOOL_DECODER *br) {
return
0
;
}
extern
int
vp9_decode_unsigned_max
(
BOOL_DECODER
*
br
,
int
max
);
#endif
vp9/decoder/vp9_decodframe.c
View file @
00e2c6bf
...
...
@@ -1141,13 +1141,13 @@ int vp9_decode_frame(VP9D_COMP *pbi, const unsigned char **p_data_end) {
// Update the feature data and mask
vp9_enable_segfeature
(
xd
,
i
,
j
);
data
=
(
signed
char
)
vp9_read_literal
(
&
header_bc
,
vp9_seg_feature_data_
bits
(
j
));
data
=
vp9_decode_unsigned_max
(
&
header_bc
,
vp9_seg_feature_data_
max
(
j
));
// Is the segment data signed..
if
(
vp9_is_segfeature_signed
(
j
))
{
if
(
vp9_read_bit
(
&
header_bc
))
data
=
-
data
;
data
=
-
data
;
}
}
else
data
=
0
;
...
...
vp9/encoder/vp9_bitstream.c
View file @
00e2c6bf
...
...
@@ -1911,19 +1911,19 @@ void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
// Encode the relevant feature data
if
(
Data
<
0
)
{
Data
=
-
Data
;
vp9_
write_literal
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
bits
(
j
));
vp9_
encode_unsigned_max
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
max
(
j
));
vp9_write_bit
(
&
header_bc
,
1
);
}
else
{
vp9_
write_literal
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
bits
(
j
));
vp9_
encode_unsigned_max
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
max
(
j
));
vp9_write_bit
(
&
header_bc
,
0
);
}
}
// Unsigned data element so no sign bit needed
else
vp9_
write_literal
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
bits
(
j
));
vp9_
encode_unsigned_max
(
&
header_bc
,
Data
,
vp9_seg_feature_data_
max
(
j
));
}
else
vp9_write_bit
(
&
header_bc
,
0
);
}
...
...
vp9/encoder/vp9_boolhuff.c
View file @
00e2c6bf
...
...
@@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include
<assert.h>
#include
"vp9_boolhuff.h"
#if defined(SECTIONBITS_OUTPUT)
...
...
@@ -64,6 +64,15 @@ void vp9_encode_value(BOOL_CODER *br, int data, int bits) {
encode_bool
(
br
,
(
1
&
(
data
>>
bit
)),
0x80
);
}
void
vp9_encode_unsigned_max
(
BOOL_CODER
*
br
,
int
data
,
int
max
)
{
assert
(
data
<=
max
);
while
(
max
)
{
encode_bool
(
br
,
data
&
1
,
128
);
data
>>=
1
;
max
>>=
1
;
}
}
int
vp9_recenter_nonneg
(
int
v
,
int
m
)
{
if
(
v
>
(
m
<<
1
))
return
v
;
else
if
(
v
>=
m
)
return
((
v
-
m
)
<<
1
);
...
...
vp9/encoder/vp9_boolhuff.h
View file @
00e2c6bf
...
...
@@ -37,6 +37,7 @@ typedef struct {
extern
void
vp9_start_encode
(
BOOL_CODER
*
bc
,
unsigned
char
*
buffer
);
extern
void
vp9_encode_value
(
BOOL_CODER
*
br
,
int
data
,
int
bits
);
extern
void
vp9_encode_unsigned_max
(
BOOL_CODER
*
br
,
int
data
,
int
max
);
extern
void
vp9_stop_encode
(
BOOL_CODER
*
bc
);
extern
const
unsigned
int
vp9_prob_cost
[
256
];
...
...
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