mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
Revert "avfilter/yadif: simplify the code for better readability"
This reverts commit 2a9b934675
.
This commit is contained in:
parent
ca8e5dedc7
commit
71ec3e4583
@ -219,8 +219,8 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
|
|||||||
YADIFContext *yadif = &s->yadif;
|
YADIFContext *yadif = &s->yadif;
|
||||||
ThreadData *td = arg;
|
ThreadData *td = arg;
|
||||||
int linesize = yadif->cur->linesize[td->plane];
|
int linesize = yadif->cur->linesize[td->plane];
|
||||||
int clip_max = (1 << (yadif->depth)) - 1;
|
int clip_max = (1 << (yadif->csp->comp[td->plane].depth)) - 1;
|
||||||
int df = (yadif->depth + 7) / 8;
|
int df = (yadif->csp->comp[td->plane].depth + 7) / 8;
|
||||||
int refs = linesize / df;
|
int refs = linesize / df;
|
||||||
int slice_start = (td->h * jobnr ) / nb_jobs;
|
int slice_start = (td->h * jobnr ) / nb_jobs;
|
||||||
int slice_end = (td->h * (jobnr+1)) / nb_jobs;
|
int slice_end = (td->h * (jobnr+1)) / nb_jobs;
|
||||||
@ -267,13 +267,13 @@ static void filter(AVFilterContext *ctx, AVFrame *dstpic,
|
|||||||
ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff };
|
ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff };
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < yadif->nb_components; i++) {
|
for (i = 0; i < yadif->csp->nb_components; i++) {
|
||||||
int w = dstpic->width;
|
int w = dstpic->width;
|
||||||
int h = dstpic->height;
|
int h = dstpic->height;
|
||||||
|
|
||||||
if (i == 1 || i == 2) {
|
if (i == 1 || i == 2) {
|
||||||
w = AV_CEIL_RSHIFT(w, yadif->hsub);
|
w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w);
|
||||||
h = AV_CEIL_RSHIFT(h, yadif->vsub);
|
h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
td.w = w;
|
td.w = w;
|
||||||
@ -348,8 +348,9 @@ static int config_props(AVFilterLink *link)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yadif->csp = av_pix_fmt_desc_get(link->format);
|
||||||
yadif->filter = filter;
|
yadif->filter = filter;
|
||||||
if (yadif->depth > 8) {
|
if (yadif->csp->comp[0].depth > 8) {
|
||||||
s->filter_intra = filter_intra_16bit;
|
s->filter_intra = filter_intra_16bit;
|
||||||
s->filter_line = filter_line_c_16bit;
|
s->filter_line = filter_line_c_16bit;
|
||||||
s->filter_edge = filter_edge_16bit;
|
s->filter_edge = filter_edge_16bit;
|
||||||
|
@ -192,7 +192,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
|
|||||||
YADIFContext *s = ctx->priv;
|
YADIFContext *s = ctx->priv;
|
||||||
ThreadData *td = arg;
|
ThreadData *td = arg;
|
||||||
int refs = s->cur->linesize[td->plane];
|
int refs = s->cur->linesize[td->plane];
|
||||||
int df = (s->depth + 7) / 8;
|
int df = (s->csp->comp[td->plane].depth + 7) / 8;
|
||||||
int pix_3 = 3 * df;
|
int pix_3 = 3 * df;
|
||||||
int slice_start = (td->h * jobnr ) / nb_jobs;
|
int slice_start = (td->h * jobnr ) / nb_jobs;
|
||||||
int slice_end = (td->h * (jobnr+1)) / nb_jobs;
|
int slice_end = (td->h * (jobnr+1)) / nb_jobs;
|
||||||
@ -233,13 +233,13 @@ static void filter(AVFilterContext *ctx, AVFrame *dstpic,
|
|||||||
ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff };
|
ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff };
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < yadif->nb_components; i++) {
|
for (i = 0; i < yadif->csp->nb_components; i++) {
|
||||||
int w = dstpic->width;
|
int w = dstpic->width;
|
||||||
int h = dstpic->height;
|
int h = dstpic->height;
|
||||||
|
|
||||||
if (i == 1 || i == 2) {
|
if (i == 1 || i == 2) {
|
||||||
w = AV_CEIL_RSHIFT(w, yadif->hsub);
|
w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w);
|
||||||
h = AV_CEIL_RSHIFT(h, yadif->vsub);
|
h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -292,7 +292,6 @@ static int config_output(AVFilterLink *outlink)
|
|||||||
{
|
{
|
||||||
AVFilterContext *ctx = outlink->src;
|
AVFilterContext *ctx = outlink->src;
|
||||||
YADIFContext *s = ctx->priv;
|
YADIFContext *s = ctx->priv;
|
||||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(outlink->format);
|
|
||||||
|
|
||||||
outlink->time_base.num = ctx->inputs[0]->time_base.num;
|
outlink->time_base.num = ctx->inputs[0]->time_base.num;
|
||||||
outlink->time_base.den = ctx->inputs[0]->time_base.den * 2;
|
outlink->time_base.den = ctx->inputs[0]->time_base.den * 2;
|
||||||
@ -308,12 +307,9 @@ static int config_output(AVFilterLink *outlink)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->csp = av_pix_fmt_desc_get(outlink->format);
|
||||||
s->filter = filter;
|
s->filter = filter;
|
||||||
s->depth = desc->comp[0].depth;
|
if (s->csp->comp[0].depth > 8) {
|
||||||
s->nb_components = desc->nb_components;
|
|
||||||
s->hsub = desc->log2_chroma_w;
|
|
||||||
s->vsub = desc->log2_chroma_h;
|
|
||||||
if (s->depth > 8) {
|
|
||||||
s->filter_line = filter_line_c_16bit;
|
s->filter_line = filter_line_c_16bit;
|
||||||
s->filter_edges = filter_edges_16bit;
|
s->filter_edges = filter_edges_16bit;
|
||||||
} else {
|
} else {
|
||||||
|
@ -55,7 +55,7 @@ av_cold void ff_bwdif_init_x86(BWDIFContext *bwdif)
|
|||||||
{
|
{
|
||||||
YADIFContext *yadif = &bwdif->yadif;
|
YADIFContext *yadif = &bwdif->yadif;
|
||||||
int cpu_flags = av_get_cpu_flags();
|
int cpu_flags = av_get_cpu_flags();
|
||||||
int bit_depth = yadif->depth;
|
int bit_depth = (!yadif->csp) ? 8 : yadif->csp->comp[0].depth;
|
||||||
|
|
||||||
if (bit_depth <= 8) {
|
if (bit_depth <= 8) {
|
||||||
#if ARCH_X86_32
|
#if ARCH_X86_32
|
||||||
|
@ -60,7 +60,8 @@ void ff_yadif_filter_line_10bit_ssse3(void *dst, void *prev, void *cur,
|
|||||||
av_cold void ff_yadif_init_x86(YADIFContext *yadif)
|
av_cold void ff_yadif_init_x86(YADIFContext *yadif)
|
||||||
{
|
{
|
||||||
int cpu_flags = av_get_cpu_flags();
|
int cpu_flags = av_get_cpu_flags();
|
||||||
int bit_depth = yadif->depth;
|
int bit_depth = (!yadif->csp) ? 8
|
||||||
|
: yadif->csp->comp[0].depth;
|
||||||
|
|
||||||
if (bit_depth >= 15) {
|
if (bit_depth >= 15) {
|
||||||
#if ARCH_X86_32
|
#if ARCH_X86_32
|
||||||
|
@ -72,10 +72,7 @@ typedef struct YADIFContext {
|
|||||||
void (*filter_edges)(void *dst, void *prev, void *cur, void *next,
|
void (*filter_edges)(void *dst, void *prev, void *cur, void *next,
|
||||||
int w, int prefs, int mrefs, int parity, int mode);
|
int w, int prefs, int mrefs, int parity, int mode);
|
||||||
|
|
||||||
int nb_components;
|
const AVPixFmtDescriptor *csp;
|
||||||
int depth;
|
|
||||||
int hsub;
|
|
||||||
int vsub;
|
|
||||||
int eof;
|
int eof;
|
||||||
uint8_t *temp_line;
|
uint8_t *temp_line;
|
||||||
int temp_line_size;
|
int temp_line_size;
|
||||||
|
@ -69,7 +69,7 @@ static int return_frame(AVFilterContext *ctx, int is_second)
|
|||||||
static int checkstride(YADIFContext *yadif, const AVFrame *a, const AVFrame *b)
|
static int checkstride(YADIFContext *yadif, const AVFrame *a, const AVFrame *b)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < yadif->nb_components; i++)
|
for (i = 0; i < yadif->csp->nb_components; i++)
|
||||||
if (a->linesize[i] != b->linesize[i])
|
if (a->linesize[i] != b->linesize[i])
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user