mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-14 22:22:59 +02:00
libavcodec/hevc_filter: support for all skip_loop_filter levels.
Continues where commit 52c75d486ed5f75cbb79e5dbd07b7aef24f3071f left off. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
d67c1dda40
commit
942eafcf08
@ -25,13 +25,6 @@ enabled decoders.
|
|||||||
A description of some of the currently available video decoders
|
A description of some of the currently available video decoders
|
||||||
follows.
|
follows.
|
||||||
|
|
||||||
@section hevc
|
|
||||||
|
|
||||||
HEVC / H.265 decoder.
|
|
||||||
|
|
||||||
Note: the @option{skip_loop_filter} option has effect only at level
|
|
||||||
@code{all}.
|
|
||||||
|
|
||||||
@section rawvideo
|
@section rawvideo
|
||||||
|
|
||||||
Raw video decoder.
|
Raw video decoder.
|
||||||
|
@ -842,9 +842,34 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
|
|||||||
void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
|
void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
|
||||||
{
|
{
|
||||||
int x_end = x >= s->ps.sps->width - ctb_size;
|
int x_end = x >= s->ps.sps->width - ctb_size;
|
||||||
if (s->avctx->skip_loop_filter < AVDISCARD_ALL)
|
int skip = 0, is_n = 0;
|
||||||
|
switch (s->nal_unit_type) {
|
||||||
|
case HEVC_NAL_TRAIL_N:
|
||||||
|
case HEVC_NAL_TSA_N:
|
||||||
|
case HEVC_NAL_STSA_N:
|
||||||
|
case HEVC_NAL_RADL_N:
|
||||||
|
case HEVC_NAL_RASL_N:
|
||||||
|
case HEVC_NAL_VCL_N10:
|
||||||
|
case HEVC_NAL_VCL_N12:
|
||||||
|
case HEVC_NAL_VCL_N14:
|
||||||
|
case HEVC_NAL_BLA_N_LP:
|
||||||
|
case HEVC_NAL_IDR_N_LP:
|
||||||
|
is_n = 1;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (s->avctx->skip_loop_filter >= AVDISCARD_ALL ||
|
||||||
|
(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY && !IS_IDR(s)) ||
|
||||||
|
(s->avctx->skip_loop_filter >= AVDISCARD_NONINTRA &&
|
||||||
|
s->sh.slice_type != HEVC_SLICE_I) ||
|
||||||
|
(s->avctx->skip_loop_filter >= AVDISCARD_BIDIR &&
|
||||||
|
s->sh.slice_type == HEVC_SLICE_B) ||
|
||||||
|
(s->avctx->skip_loop_filter >= AVDISCARD_NONREF && is_n))
|
||||||
|
skip = 1;
|
||||||
|
|
||||||
|
if (!skip)
|
||||||
deblocking_filter_CTB(s, x, y);
|
deblocking_filter_CTB(s, x, y);
|
||||||
if (s->ps.sps->sao_enabled) {
|
if (s->ps.sps->sao_enabled && !skip) {
|
||||||
int y_end = y >= s->ps.sps->height - ctb_size;
|
int y_end = y >= s->ps.sps->height - ctb_size;
|
||||||
if (y && x)
|
if (y && x)
|
||||||
sao_filter_CTB(s, x - ctb_size, y - ctb_size);
|
sao_filter_CTB(s, x - ctb_size, y - ctb_size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user