X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_extractplanes.c;h=65bba33d90c694ef05153955e2274fce0fcef65a;hb=e2d336cf6499923691baf53b10d193aefa77fa89;hp=a23f838ac6dbf92e38900842cdf19c9c7df7cb76;hpb=5e78126bbdd58ae4dd97e2b604cbbec336f8bc32;p=ffmpeg diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c index a23f838ac6d..65bba33d90c 100644 --- a/libavfilter/vf_extractplanes.c +++ b/libavfilter/vf_extractplanes.c @@ -22,6 +22,10 @@ #include "libavutil/imgutils.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" + +#define FF_INTERNAL_FIELDS 1 +#include "libavfilter/framequeue.h" + #include "avfilter.h" #include "drawutils.h" #include "internal.h" @@ -86,6 +90,19 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_RGBA64LE, AV_PIX_FMT_BGRA64LE, AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP16LE, AV_PIX_FMT_GBRAP16LE, + AV_PIX_FMT_YUV420P10LE, + AV_PIX_FMT_YUV422P10LE, + AV_PIX_FMT_YUV444P10LE, + AV_PIX_FMT_YUV440P10LE, + AV_PIX_FMT_YUVA420P10LE, + AV_PIX_FMT_YUVA422P10LE, + AV_PIX_FMT_YUVA444P10LE, + AV_PIX_FMT_YUV420P12LE, + AV_PIX_FMT_YUV422P12LE, + AV_PIX_FMT_YUV444P12LE, + AV_PIX_FMT_YUV440P12LE, + AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRAP10LE, + AV_PIX_FMT_GBRP12LE, AV_PIX_FMT_GBRAP12LE, AV_PIX_FMT_NONE, }; static const enum AVPixelFormat in_pixfmts_be[] = { @@ -112,9 +129,26 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_RGBA64BE, AV_PIX_FMT_BGRA64BE, AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP16BE, AV_PIX_FMT_GBRAP16BE, + AV_PIX_FMT_YUV420P10BE, + AV_PIX_FMT_YUV422P10BE, + AV_PIX_FMT_YUV444P10BE, + AV_PIX_FMT_YUV440P10BE, + AV_PIX_FMT_YUVA420P10BE, + AV_PIX_FMT_YUVA422P10BE, + AV_PIX_FMT_YUVA444P10BE, + AV_PIX_FMT_YUV420P12BE, + AV_PIX_FMT_YUV422P12BE, + AV_PIX_FMT_YUV444P12BE, + AV_PIX_FMT_YUV440P12BE, + AV_PIX_FMT_GBRP10BE, AV_PIX_FMT_GBRAP10BE, + AV_PIX_FMT_GBRP12BE, AV_PIX_FMT_GBRAP12BE, AV_PIX_FMT_NONE, }; static const enum AVPixelFormat out8_pixfmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; + static const enum AVPixelFormat out10le_pixfmts[] = { AV_PIX_FMT_GRAY10LE, AV_PIX_FMT_NONE }; + static const enum AVPixelFormat out10be_pixfmts[] = { AV_PIX_FMT_GRAY10BE, AV_PIX_FMT_NONE }; + static const enum AVPixelFormat out12le_pixfmts[] = { AV_PIX_FMT_GRAY12LE, AV_PIX_FMT_NONE }; + static const enum AVPixelFormat out12be_pixfmts[] = { AV_PIX_FMT_GRAY12BE, AV_PIX_FMT_NONE }; static const enum AVPixelFormat out16le_pixfmts[] = { AV_PIX_FMT_GRAY16LE, AV_PIX_FMT_NONE }; static const enum AVPixelFormat out16be_pixfmts[] = { AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_NONE }; const enum AVPixelFormat *out_pixfmts, *in_pixfmts; @@ -150,6 +184,14 @@ static int query_formats(AVFilterContext *ctx) if (depth == 8) out_pixfmts = out8_pixfmts; + else if (!be && depth == 10) + out_pixfmts = out10le_pixfmts; + else if (be && depth == 10) + out_pixfmts = out10be_pixfmts; + else if (!be && depth == 12) + out_pixfmts = out12le_pixfmts; + else if (be && depth == 12) + out_pixfmts = out12be_pixfmts; else if (be) out_pixfmts = out16be_pixfmts; else @@ -245,7 +287,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) const int idx = s->map[i]; AVFrame *out; - if (outlink->status) + if (outlink->status_in) continue; out = ff_get_video_buffer(outlink, outlink->w, outlink->h);