Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
VideoLAN
x264
Commits
d46a5a46
Commit
d46a5a46
authored
May 31, 2017
by
Anton Mitrofanov
Browse files
Fix CABAC+8x8dct in 4:4:4
Use the correct ctxIdxInc calculation for coded_block_flag.
parent
79b36f27
Changes
5
Hide whitespace changes
Inline
Side-by-side
common/common.h
View file @
d46a5a46
...
...
@@ -729,7 +729,7 @@ struct x264_t
int8_t
*
type
;
/* mb type */
uint8_t
*
partition
;
/* mb partition */
int8_t
*
qp
;
/* mb qp */
int16_t
*
cbp
;
/* mb cbp: 0x0?: luma, 0x?0: chroma, 0x100: luma dc, 0x
0
200 and 0x
0
400: chroma dc
(all set for PCM)*/
int16_t
*
cbp
;
/* mb cbp: 0x0?: luma, 0x?0: chroma, 0x100: luma dc, 0x200 and 0x400: chroma dc
, 0x1000 PCM
(all set for PCM)
*/
int8_t
(
*
intra4x4_pred_mode
)[
8
];
/* intra4x4 pred mode. for non I4x4 set to I_PRED_4x4_DC(2) */
/* actually has only 7 entries; set to 8 for write-combining optimizations */
uint8_t
(
*
non_zero_count
)[
16
*
3
];
/* nzc. for I_PCM set to 16 */
...
...
common/macroblock.c
View file @
d46a5a46
...
...
@@ -1739,7 +1739,7 @@ void x264_macroblock_cache_save( x264_t *h )
h
->
mb
.
i_last_dqp
=
0
;
h
->
mb
.
i_cbp_chroma
=
CHROMA444
?
0
:
2
;
h
->
mb
.
i_cbp_luma
=
0xf
;
h
->
mb
.
cbp
[
i_mb_xy
]
=
(
h
->
mb
.
i_cbp_chroma
<<
4
)
|
h
->
mb
.
i_cbp_luma
|
0x700
;
h
->
mb
.
cbp
[
i_mb_xy
]
=
(
h
->
mb
.
i_cbp_chroma
<<
4
)
|
h
->
mb
.
i_cbp_luma
|
0x
1
700
;
h
->
mb
.
b_transform_8x8
=
0
;
for
(
int
i
=
0
;
i
<
48
;
i
++
)
h
->
mb
.
cache
.
non_zero_count
[
x264_scan8
[
i
]]
=
h
->
param
.
b_cabac
?
1
:
16
;
...
...
encoder/cabac.c
View file @
d46a5a46
...
...
@@ -1057,29 +1057,29 @@ static ALWAYS_INLINE void x264_macroblock_write_cabac_internal( x264_t *h, x264_
src = dst;
#define MUNGE_8x8_NNZ( MUNGE )\
if( (h->mb.i_neighbour & MB_LEFT) && !h->mb.mb_transform_size[h->mb.i_mb_left_xy[0]] )\
if( (h->mb.i_neighbour & MB_LEFT) && !h->mb.mb_transform_size[h->mb.i_mb_left_xy[0]]
&& !(h->mb.cbp[h->mb.i_mb_left_xy[0]] & 0x1000)
)\
{\
MUNGE( nnzbak[0][0], h->mb.cache.non_zero_count[x264_scan8[16*0+ 0] - 1], 0x
8
0 )\
MUNGE( nnzbak[0][1], h->mb.cache.non_zero_count[x264_scan8[16*0+ 2] - 1], 0x
8
0 )\
MUNGE( nnzbak[1][0], h->mb.cache.non_zero_count[x264_scan8[16*1+ 0] - 1], 0x
8
0 )\
MUNGE( nnzbak[1][1], h->mb.cache.non_zero_count[x264_scan8[16*1+ 2] - 1], 0x
8
0 )\
MUNGE( nnzbak[2][0], h->mb.cache.non_zero_count[x264_scan8[16*2+ 0] - 1], 0x
8
0 )\
MUNGE( nnzbak[2][1], h->mb.cache.non_zero_count[x264_scan8[16*2+ 2] - 1], 0x
8
0 )\
MUNGE( nnzbak[0][0], h->mb.cache.non_zero_count[x264_scan8[16*0+ 0] - 1], 0x
0
0 )\
MUNGE( nnzbak[0][1], h->mb.cache.non_zero_count[x264_scan8[16*0+ 2] - 1], 0x
0
0 )\
MUNGE( nnzbak[1][0], h->mb.cache.non_zero_count[x264_scan8[16*1+ 0] - 1], 0x
0
0 )\
MUNGE( nnzbak[1][1], h->mb.cache.non_zero_count[x264_scan8[16*1+ 2] - 1], 0x
0
0 )\
MUNGE( nnzbak[2][0], h->mb.cache.non_zero_count[x264_scan8[16*2+ 0] - 1], 0x
0
0 )\
MUNGE( nnzbak[2][1], h->mb.cache.non_zero_count[x264_scan8[16*2+ 2] - 1], 0x
0
0 )\
}\
if( (h->mb.i_neighbour & MB_LEFT) && !h->mb.mb_transform_size[h->mb.i_mb_left_xy[1]] )\
if( (h->mb.i_neighbour & MB_LEFT) && !h->mb.mb_transform_size[h->mb.i_mb_left_xy[1]]
&& !(h->mb.cbp[h->mb.i_mb_left_xy[1]] & 0x1000)
)\
{\
MUNGE( nnzbak[0][2], h->mb.cache.non_zero_count[x264_scan8[16*0+ 8] - 1], 0x
8
0 )\
MUNGE( nnzbak[0][3], h->mb.cache.non_zero_count[x264_scan8[16*0+10] - 1], 0x
8
0 )\
MUNGE( nnzbak[1][2], h->mb.cache.non_zero_count[x264_scan8[16*1+ 8] - 1], 0x
8
0 )\
MUNGE( nnzbak[1][3], h->mb.cache.non_zero_count[x264_scan8[16*1+10] - 1], 0x
8
0 )\
MUNGE( nnzbak[2][2], h->mb.cache.non_zero_count[x264_scan8[16*2+ 8] - 1], 0x
8
0 )\
MUNGE( nnzbak[2][3], h->mb.cache.non_zero_count[x264_scan8[16*2+10] - 1], 0x
8
0 )\
MUNGE( nnzbak[0][2], h->mb.cache.non_zero_count[x264_scan8[16*0+ 8] - 1], 0x
0
0 )\
MUNGE( nnzbak[0][3], h->mb.cache.non_zero_count[x264_scan8[16*0+10] - 1], 0x
0
0 )\
MUNGE( nnzbak[1][2], h->mb.cache.non_zero_count[x264_scan8[16*1+ 8] - 1], 0x
0
0 )\
MUNGE( nnzbak[1][3], h->mb.cache.non_zero_count[x264_scan8[16*1+10] - 1], 0x
0
0 )\
MUNGE( nnzbak[2][2], h->mb.cache.non_zero_count[x264_scan8[16*2+ 8] - 1], 0x
0
0 )\
MUNGE( nnzbak[2][3], h->mb.cache.non_zero_count[x264_scan8[16*2+10] - 1], 0x
0
0 )\
}\
if( (h->mb.i_neighbour & MB_TOP) && !h->mb.mb_transform_size[h->mb.i_mb_top_xy] )\
if( (h->mb.i_neighbour & MB_TOP) && !h->mb.mb_transform_size[h->mb.i_mb_top_xy]
&& !(h->mb.cbp[h->mb.i_mb_top_xy] & 0x1000)
)\
{\
MUNGE( M32( &nnzbak[0][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*0] - 8] ), 0x
8080808
0U )\
MUNGE( M32( &nnzbak[1][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*1] - 8] ), 0x
8080808
0U )\
MUNGE( M32( &nnzbak[2][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*2] - 8] ), 0x
8080808
0U )\
MUNGE( M32( &nnzbak[0][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*0] - 8] ), 0x
0000000
0U )\
MUNGE( M32( &nnzbak[1][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*1] - 8] ), 0x
0000000
0U )\
MUNGE( M32( &nnzbak[2][4] ), M32( &h->mb.cache.non_zero_count[x264_scan8[16*2] - 8] ), 0x
0000000
0U )\
}
MUNGE_8x8_NNZ
(
BACKUP
)
...
...
encoder/encoder.c
View file @
d46a5a46
...
...
@@ -855,6 +855,11 @@ static int x264_validate_parameters( x264_t *h, int b_open )
h
->
param
.
analyse
.
inter
&=
~
X264_ANALYSE_I8x8
;
h
->
param
.
analyse
.
intra
&=
~
X264_ANALYSE_I8x8
;
}
if
(
i_csp
>=
X264_CSP_I444
&&
h
->
param
.
b_cabac
)
{
/* Disable 8x8dct during 4:4:4+CABAC encoding for compatibility with libavcodec */
h
->
param
.
analyse
.
b_transform_8x8
=
0
;
}
if
(
h
->
param
.
rc
.
i_rc_method
==
X264_RC_CQP
)
{
float
qp_p
=
h
->
param
.
rc
.
i_qp_constant
;
...
...
x264.h
View file @
d46a5a46
...
...
@@ -45,7 +45,7 @@ extern "C" {
#include
"x264_config.h"
#define X264_BUILD 15
0
#define X264_BUILD 15
1
/* Application developers planning to link against a shared library version of
* libx264 from a Microsoft Visual Studio or similar development environment
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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