Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
9b30f8dd
Commit
9b30f8dd
authored
Mar 22, 2016
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264: remove the svq3-specific code
parent
e42ca48a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
86 additions
and
127 deletions
+86
-127
h264.c
libavcodec/h264.c
+0
-1
h264_mb.c
libavcodec/h264_mb.c
+65
-85
h264_mb_template.c
libavcodec/h264_mb_template.c
+21
-41
No files found.
libavcodec/h264.c
View file @
9b30f8dd
...
...
@@ -46,7 +46,6 @@
#include "mpegutils.h"
#include "profiles.h"
#include "rectangle.h"
#include "svq3.h"
#include "thread.h"
#include <assert.h>
...
...
libavcodec/h264_mb.c
View file @
9b30f8dd
...
...
@@ -33,7 +33,6 @@
#include "avcodec.h"
#include "h264.h"
#include "qpeldsp.h"
#include "svq3.h"
#include "thread.h"
static
inline
int
get_lowest_part_list_y
(
H264SliceContext
*
sl
,
...
...
@@ -611,8 +610,7 @@ static av_always_inline void dctcoef_set(int16_t *mb, int high_bit_depth,
static
av_always_inline
void
hl_decode_mb_predict_luma
(
const
H264Context
*
h
,
H264SliceContext
*
sl
,
int
mb_type
,
int
is_h264
,
int
simple
,
int
mb_type
,
int
simple
,
int
transform_bypass
,
int
pixel_shift
,
const
int
*
block_offset
,
...
...
@@ -687,48 +685,40 @@ static av_always_inline void hl_decode_mb_predict_luma(const H264Context *h,
h
->
hpc
.
pred4x4
[
dir
](
ptr
,
topright
,
linesize
);
nnz
=
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]];
if
(
nnz
)
{
if
(
is_h264
)
{
if
(
nnz
==
1
&&
dctcoef_get
(
sl
->
mb
,
pixel_shift
,
i
*
16
+
p
*
256
))
idct_dc_add
(
ptr
,
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
else
idct_add
(
ptr
,
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
}
else
if
(
CONFIG_SVQ3_DECODER
)
ff_svq3_add_idct_c
(
ptr
,
sl
->
mb
+
i
*
16
+
p
*
256
,
linesize
,
qscale
,
0
);
if
(
nnz
==
1
&&
dctcoef_get
(
sl
->
mb
,
pixel_shift
,
i
*
16
+
p
*
256
))
idct_dc_add
(
ptr
,
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
else
idct_add
(
ptr
,
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
}
}
}
}
}
else
{
h
->
hpc
.
pred16x16
[
sl
->
intra16x16_pred_mode
](
dest_y
,
linesize
);
if
(
is_h264
)
{
if
(
sl
->
non_zero_count_cache
[
scan8
[
LUMA_DC_BLOCK_INDEX
+
p
]])
{
if
(
!
transform_bypass
)
h
->
h264dsp
.
h264_luma_dc_dequant_idct
(
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
sl
->
mb_luma_dc
[
p
],
h
->
dequant4_coeff
[
p
][
qscale
][
0
]);
else
{
static
const
uint8_t
dc_mapping
[
16
]
=
{
0
*
16
,
1
*
16
,
4
*
16
,
5
*
16
,
2
*
16
,
3
*
16
,
6
*
16
,
7
*
16
,
8
*
16
,
9
*
16
,
12
*
16
,
13
*
16
,
10
*
16
,
11
*
16
,
14
*
16
,
15
*
16
};
for
(
i
=
0
;
i
<
16
;
i
++
)
dctcoef_set
(
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
pixel_shift
,
dc_mapping
[
i
],
dctcoef_get
(
sl
->
mb_luma_dc
[
p
],
pixel_shift
,
i
));
}
if
(
sl
->
non_zero_count_cache
[
scan8
[
LUMA_DC_BLOCK_INDEX
+
p
]])
{
if
(
!
transform_bypass
)
h
->
h264dsp
.
h264_luma_dc_dequant_idct
(
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
sl
->
mb_luma_dc
[
p
],
h
->
dequant4_coeff
[
p
][
qscale
][
0
]);
else
{
static
const
uint8_t
dc_mapping
[
16
]
=
{
0
*
16
,
1
*
16
,
4
*
16
,
5
*
16
,
2
*
16
,
3
*
16
,
6
*
16
,
7
*
16
,
8
*
16
,
9
*
16
,
12
*
16
,
13
*
16
,
10
*
16
,
11
*
16
,
14
*
16
,
15
*
16
};
for
(
i
=
0
;
i
<
16
;
i
++
)
dctcoef_set
(
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
pixel_shift
,
dc_mapping
[
i
],
dctcoef_get
(
sl
->
mb_luma_dc
[
p
],
pixel_shift
,
i
));
}
}
else
if
(
CONFIG_SVQ3_DECODER
)
ff_svq3_luma_dc_dequant_idct_c
(
sl
->
mb
+
p
*
256
,
sl
->
mb_luma_dc
[
p
],
qscale
);
}
}
}
static
av_always_inline
void
hl_decode_mb_idct_luma
(
const
H264Context
*
h
,
H264SliceContext
*
sl
,
int
mb_type
,
int
is_h264
,
int
simple
,
int
mb_type
,
int
simple
,
int
transform_bypass
,
int
pixel_shift
,
const
int
*
block_offset
,
...
...
@@ -739,60 +729,50 @@ static av_always_inline void hl_decode_mb_idct_luma(const H264Context *h, H264Sl
int
i
;
block_offset
+=
16
*
p
;
if
(
!
IS_INTRA4x4
(
mb_type
))
{
if
(
is_h264
)
{
if
(
IS_INTRA16x16
(
mb_type
))
{
if
(
transform_bypass
)
{
if
(
h
->
sps
.
profile_idc
==
244
&&
(
sl
->
intra16x16_pred_mode
==
VERT_PRED8x8
||
sl
->
intra16x16_pred_mode
==
HOR_PRED8x8
))
{
h
->
hpc
.
pred16x16_add
[
sl
->
intra16x16_pred_mode
](
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
);
}
else
{
for
(
i
=
0
;
i
<
16
;
i
++
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]]
||
dctcoef_get
(
sl
->
mb
,
pixel_shift
,
i
*
16
+
p
*
256
))
h
->
h264dsp
.
h264_add_pixels4_clear
(
dest_y
+
block_offset
[
i
],
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
}
}
else
{
h
->
h264dsp
.
h264_idct_add16intra
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
}
}
else
if
(
sl
->
cbp
&
15
)
{
if
(
transform_bypass
)
{
const
int
di
=
IS_8x8DCT
(
mb_type
)
?
4
:
1
;
idct_add
=
IS_8x8DCT
(
mb_type
)
?
h
->
h264dsp
.
h264_add_pixels8_clear
:
h
->
h264dsp
.
h264_add_pixels4_clear
;
for
(
i
=
0
;
i
<
16
;
i
+=
di
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]])
idct_add
(
dest_y
+
block_offset
[
i
],
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
if
(
IS_INTRA16x16
(
mb_type
))
{
if
(
transform_bypass
)
{
if
(
h
->
sps
.
profile_idc
==
244
&&
(
sl
->
intra16x16_pred_mode
==
VERT_PRED8x8
||
sl
->
intra16x16_pred_mode
==
HOR_PRED8x8
))
{
h
->
hpc
.
pred16x16_add
[
sl
->
intra16x16_pred_mode
](
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
);
}
else
{
if
(
IS_8x8DCT
(
mb_type
))
h
->
h264dsp
.
h264_idct8_add4
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
else
h
->
h264dsp
.
h264_idct_add16
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
for
(
i
=
0
;
i
<
16
;
i
++
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]]
||
dctcoef_get
(
sl
->
mb
,
pixel_shift
,
i
*
16
+
p
*
256
))
h
->
h264dsp
.
h264_add_pixels4_clear
(
dest_y
+
block_offset
[
i
],
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
}
}
else
{
h
->
h264dsp
.
h264_idct_add16intra
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
}
}
else
if
(
sl
->
cbp
&
15
)
{
if
(
transform_bypass
)
{
const
int
di
=
IS_8x8DCT
(
mb_type
)
?
4
:
1
;
idct_add
=
IS_8x8DCT
(
mb_type
)
?
h
->
h264dsp
.
h264_add_pixels8_clear
:
h
->
h264dsp
.
h264_add_pixels4_clear
;
for
(
i
=
0
;
i
<
16
;
i
+=
di
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]])
idct_add
(
dest_y
+
block_offset
[
i
],
sl
->
mb
+
(
i
*
16
+
p
*
256
<<
pixel_shift
),
linesize
);
}
else
{
if
(
IS_8x8DCT
(
mb_type
))
h
->
h264dsp
.
h264_idct8_add4
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
else
h
->
h264dsp
.
h264_idct_add16
(
dest_y
,
block_offset
,
sl
->
mb
+
(
p
*
256
<<
pixel_shift
),
linesize
,
sl
->
non_zero_count_cache
+
p
*
5
*
8
);
}
}
else
if
(
CONFIG_SVQ3_DECODER
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
+
p
*
16
]]
||
sl
->
mb
[
i
*
16
+
p
*
256
])
{
// FIXME benchmark weird rule, & below
uint8_t
*
const
ptr
=
dest_y
+
block_offset
[
i
];
ff_svq3_add_idct_c
(
ptr
,
sl
->
mb
+
i
*
16
+
p
*
256
,
linesize
,
sl
->
qscale
,
IS_INTRA
(
mb_type
)
?
1
:
0
);
}
}
}
}
...
...
libavcodec/h264_mb_template.c
View file @
9b30f8dd
...
...
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "svq3.h"
#undef FUNC
#undef PIXEL_SHIFT
...
...
@@ -51,8 +49,6 @@ static av_noinline void FUNC(hl_decode_mb)(const H264Context *h, H264SliceContex
int
i
,
j
;
const
int
*
block_offset
=
&
h
->
block_offset
[
0
];
const
int
transform_bypass
=
!
SIMPLE
&&
(
sl
->
qscale
==
0
&&
h
->
sps
.
transform_bypass
);
/* is_h264 should always be true if SVQ3 is disabled. */
const
int
is_h264
=
!
CONFIG_SVQ3_DECODER
||
SIMPLE
||
h
->
avctx
->
codec_id
==
AV_CODEC_ID_H264
;
void
(
*
idct_add
)(
uint8_t
*
dst
,
int16_t
*
block
,
int
stride
);
const
int
block_h
=
16
>>
h
->
chroma_y_shift
;
const
int
chroma422
=
CHROMA422
(
h
);
...
...
@@ -167,14 +163,14 @@ static av_noinline void FUNC(hl_decode_mb)(const H264Context *h, H264SliceContex
h
->
hpc
.
pred8x8
[
sl
->
chroma_pred_mode
](
dest_cr
,
uvlinesize
);
}
hl_decode_mb_predict_luma
(
h
,
sl
,
mb_type
,
is_h264
,
SIMPLE
,
hl_decode_mb_predict_luma
(
h
,
sl
,
mb_type
,
SIMPLE
,
transform_bypass
,
PIXEL_SHIFT
,
block_offset
,
linesize
,
dest_y
,
0
);
if
(
sl
->
deblocking_filter
)
xchg_mb_border
(
h
,
sl
,
dest_y
,
dest_cb
,
dest_cr
,
linesize
,
uvlinesize
,
0
,
0
,
SIMPLE
,
PIXEL_SHIFT
);
}
else
if
(
is_h264
)
{
}
else
{
if
(
chroma422
)
{
FUNC
(
hl_motion_422
)(
h
,
sl
,
dest_y
,
dest_cb
,
dest_cr
,
h
->
qpel_put
,
h
->
h264chroma
.
put_h264_chroma_pixels_tab
,
...
...
@@ -190,7 +186,7 @@ static av_noinline void FUNC(hl_decode_mb)(const H264Context *h, H264SliceContex
}
}
hl_decode_mb_idct_luma
(
h
,
sl
,
mb_type
,
is_h264
,
SIMPLE
,
transform_bypass
,
hl_decode_mb_idct_luma
(
h
,
sl
,
mb_type
,
SIMPLE
,
transform_bypass
,
PIXEL_SHIFT
,
block_offset
,
linesize
,
dest_y
,
0
);
if
((
SIMPLE
||
!
CONFIG_GRAY
||
!
(
h
->
flags
&
AV_CODEC_FLAG_GRAY
))
&&
...
...
@@ -228,39 +224,23 @@ static av_noinline void FUNC(hl_decode_mb)(const H264Context *h, H264SliceContex
}
}
}
else
{
if
(
is_h264
)
{
int
qp
[
2
];
if
(
chroma422
)
{
qp
[
0
]
=
sl
->
chroma_qp
[
0
]
+
3
;
qp
[
1
]
=
sl
->
chroma_qp
[
1
]
+
3
;
}
else
{
qp
[
0
]
=
sl
->
chroma_qp
[
0
];
qp
[
1
]
=
sl
->
chroma_qp
[
1
];
}
if
(
sl
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
0
]])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
(
16
*
16
*
1
<<
PIXEL_SHIFT
),
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
qp
[
0
]][
0
]);
if
(
sl
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
1
]])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
(
16
*
16
*
2
<<
PIXEL_SHIFT
),
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
qp
[
1
]][
0
]);
h
->
h264dsp
.
h264_idct_add8
(
dest
,
block_offset
,
sl
->
mb
,
uvlinesize
,
sl
->
non_zero_count_cache
);
}
else
if
(
CONFIG_SVQ3_DECODER
)
{
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
16
*
16
*
1
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
sl
->
chroma_qp
[
0
]][
0
]);
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
16
*
16
*
2
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
sl
->
chroma_qp
[
1
]][
0
]);
for
(
j
=
1
;
j
<
3
;
j
++
)
{
for
(
i
=
j
*
16
;
i
<
j
*
16
+
4
;
i
++
)
if
(
sl
->
non_zero_count_cache
[
scan8
[
i
]]
||
sl
->
mb
[
i
*
16
])
{
uint8_t
*
const
ptr
=
dest
[
j
-
1
]
+
block_offset
[
i
];
ff_svq3_add_idct_c
(
ptr
,
sl
->
mb
+
i
*
16
,
uvlinesize
,
ff_h264_chroma_qp
[
0
][
sl
->
qscale
+
12
]
-
12
,
2
);
}
}
int
qp
[
2
];
if
(
chroma422
)
{
qp
[
0
]
=
sl
->
chroma_qp
[
0
]
+
3
;
qp
[
1
]
=
sl
->
chroma_qp
[
1
]
+
3
;
}
else
{
qp
[
0
]
=
sl
->
chroma_qp
[
0
];
qp
[
1
]
=
sl
->
chroma_qp
[
1
];
}
if
(
sl
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
0
]])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
(
16
*
16
*
1
<<
PIXEL_SHIFT
),
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
qp
[
0
]][
0
]);
if
(
sl
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
1
]])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
sl
->
mb
+
(
16
*
16
*
2
<<
PIXEL_SHIFT
),
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
qp
[
1
]][
0
]);
h
->
h264dsp
.
h264_idct_add8
(
dest
,
block_offset
,
sl
->
mb
,
uvlinesize
,
sl
->
non_zero_count_cache
);
}
}
}
...
...
@@ -347,7 +327,7 @@ static av_noinline void FUNC(hl_decode_mb_444)(const H264Context *h, H264SliceCo
linesize
,
1
,
1
,
SIMPLE
,
PIXEL_SHIFT
);
for
(
p
=
0
;
p
<
plane_count
;
p
++
)
hl_decode_mb_predict_luma
(
h
,
sl
,
mb_type
,
1
,
SIMPLE
,
hl_decode_mb_predict_luma
(
h
,
sl
,
mb_type
,
SIMPLE
,
transform_bypass
,
PIXEL_SHIFT
,
block_offset
,
linesize
,
dest
[
p
],
p
);
...
...
@@ -363,7 +343,7 @@ static av_noinline void FUNC(hl_decode_mb_444)(const H264Context *h, H264SliceCo
}
for
(
p
=
0
;
p
<
plane_count
;
p
++
)
hl_decode_mb_idct_luma
(
h
,
sl
,
mb_type
,
1
,
SIMPLE
,
transform_bypass
,
hl_decode_mb_idct_luma
(
h
,
sl
,
mb_type
,
SIMPLE
,
transform_bypass
,
PIXEL_SHIFT
,
block_offset
,
linesize
,
dest
[
p
],
p
);
}
...
...
Write
Preview
Markdown
is supported
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