]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_bwdif.c
avcodec: Move all AVCodecParser.split functions to remove_extradata_bsf
[ffmpeg] / libavfilter / vf_bwdif.c
index 583a96570ebfeb73cbb633203d38ed8312483e69..b6aed7a450359a6185b3badadcbefb3802d3fea2 100644 (file)
@@ -219,8 +219,8 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
     YADIFContext *yadif = &s->yadif;
     ThreadData *td  = arg;
     int linesize = yadif->cur->linesize[td->plane];
-    int clip_max = (1 << (yadif->depth)) - 1;
-    int df = (yadif->depth + 7) / 8;
+    int clip_max = (1 << (yadif->csp->comp[td->plane].depth)) - 1;
+    int df = (yadif->csp->comp[td->plane].depth + 7) / 8;
     int refs = linesize / df;
     int slice_start = (td->h *  jobnr   ) / 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 };
     int i;
 
-    for (i = 0; i < yadif->nb_components; i++) {
+    for (i = 0; i < yadif->csp->nb_components; i++) {
         int w = dstpic->width;
         int h = dstpic->height;
 
         if (i == 1 || i == 2) {
-            w = AV_CEIL_RSHIFT(w, yadif->hsub);
-            h = AV_CEIL_RSHIFT(h, yadif->vsub);
+            w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w);
+            h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h);
         }
 
         td.w     = w;
@@ -348,8 +348,9 @@ static int config_props(AVFilterLink *link)
         return AVERROR(EINVAL);
     }
 
+    yadif->csp = av_pix_fmt_desc_get(link->format);
     yadif->filter = filter;
-    if (yadif->depth > 8) {
+    if (yadif->csp->comp[0].depth > 8) {
         s->filter_intra = filter_intra_16bit;
         s->filter_line  = filter_line_c_16bit;
         s->filter_edge  = filter_edge_16bit;