summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorGuo, Yejun <yejun.guo@intel.com>2020-02-21 19:29:12 +0800
committerGuo, Yejun <yejun.guo@intel.com>2020-03-03 15:28:59 +0800
commitf9cb7cf424054ea098cb0e329ba49efb41d02b7c (patch)
tree6faf9103c803a5034e16c2696b747d54317acfdf /libavfilter
parentac73879f1bb27aa979a69bda24d1ca790e69f341 (diff)
downloadffmpeg-f9cb7cf424054ea098cb0e329ba49efb41d02b7c.tar.gz
avfilter/vf_sr.c: refine code to use AVPixFmtDescriptor.log2_chroma_h/w
Signed-off-by: Guo, Yejun <yejun.guo@intel.com> Reviewed-by: Pedro Arthur <bygrandao@gmail.com>
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_sr.c40
1 files changed, 6 insertions, 34 deletions
diff --git a/libavfilter/vf_sr.c b/libavfilter/vf_sr.c
index 562b03069b..f000eda186 100644
--- a/libavfilter/vf_sr.c
+++ b/libavfilter/vf_sr.c
@@ -176,40 +176,12 @@ static int config_props(AVFilterLink *inlink)
sr_context->sws_slice_h = inlink->h;
} else {
if (inlink->format != AV_PIX_FMT_GRAY8){
- sws_src_h = sr_context->input.height;
- sws_src_w = sr_context->input.width;
- sws_dst_h = sr_context->output.height;
- sws_dst_w = sr_context->output.width;
-
- switch (inlink->format){
- case AV_PIX_FMT_YUV420P:
- sws_src_h = AV_CEIL_RSHIFT(sws_src_h, 1);
- sws_src_w = AV_CEIL_RSHIFT(sws_src_w, 1);
- sws_dst_h = AV_CEIL_RSHIFT(sws_dst_h, 1);
- sws_dst_w = AV_CEIL_RSHIFT(sws_dst_w, 1);
- break;
- case AV_PIX_FMT_YUV422P:
- sws_src_w = AV_CEIL_RSHIFT(sws_src_w, 1);
- sws_dst_w = AV_CEIL_RSHIFT(sws_dst_w, 1);
- break;
- case AV_PIX_FMT_YUV444P:
- break;
- case AV_PIX_FMT_YUV410P:
- sws_src_h = AV_CEIL_RSHIFT(sws_src_h, 2);
- sws_src_w = AV_CEIL_RSHIFT(sws_src_w, 2);
- sws_dst_h = AV_CEIL_RSHIFT(sws_dst_h, 2);
- sws_dst_w = AV_CEIL_RSHIFT(sws_dst_w, 2);
- break;
- case AV_PIX_FMT_YUV411P:
- sws_src_w = AV_CEIL_RSHIFT(sws_src_w, 2);
- sws_dst_w = AV_CEIL_RSHIFT(sws_dst_w, 2);
- break;
- default:
- av_log(context, AV_LOG_ERROR,
- "could not create SwsContext for scaling for given input pixel format: %s\n",
- av_get_pix_fmt_name(inlink->format));
- return AVERROR(EIO);
- }
+ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
+ sws_src_h = AV_CEIL_RSHIFT(sr_context->input.height, desc->log2_chroma_h);
+ sws_src_w = AV_CEIL_RSHIFT(sr_context->input.width, desc->log2_chroma_w);
+ sws_dst_h = AV_CEIL_RSHIFT(sr_context->output.height, desc->log2_chroma_h);
+ sws_dst_w = AV_CEIL_RSHIFT(sr_context->output.width, desc->log2_chroma_w);
+
sr_context->sws_contexts[0] = sws_getContext(sws_src_w, sws_src_h, AV_PIX_FMT_GRAY8,
sws_dst_w, sws_dst_h, AV_PIX_FMT_GRAY8,
SWS_BICUBIC, NULL, NULL, NULL);