On Sat, Jul 20, 2019 at 09:36:37PM +0200, Marton Balint wrote: > > > On Sat, 20 Jul 2019, Limin Wang wrote: > > >On Fri, Jul 19, 2019 at 09:26:06PM +0200, Marton Balint wrote: > >> > >> > >>On Fri, 19 Jul 2019, lance.lmw...@gmail.com wrote: > >> > >>>From: Limin Wang <lance.lmw...@gmail.com> > >>> > >>>This patch haven't make other pixel format usable yet to make sure the test > >>>result is same with rgb32 format. > >>> > >>>Signed-off-by: Limin Wang <lance.lmw...@gmail.com> > >>>--- > >>>libavfilter/f_select.c | 34 ++++++++++++++++++++++++++++++---- > >>>1 file changed, 30 insertions(+), 4 deletions(-) > >>> > >>>diff --git a/libavfilter/f_select.c b/libavfilter/f_select.c > >>>index 1132375758..eed8df34cb 100644 > >>>--- a/libavfilter/f_select.c > >>>+++ b/libavfilter/f_select.c > >>>@@ -28,6 +28,8 @@ > >>>#include "libavutil/fifo.h" > >>>#include "libavutil/internal.h" > >>>#include "libavutil/opt.h" > >>>+#include "libavutil/imgutils.h" > >>>+#include "libavutil/pixdesc.h" > >>>#include "avfilter.h" > >>>#include "audio.h" > >>>#include "formats.h" > >>>@@ -144,6 +146,10 @@ typedef struct SelectContext { > >>> char *expr_str; > >>> AVExpr *expr; > >>> double var_values[VAR_VARS_NB]; > >>>+ int bitdepth; > >>>+ int nb_planes; > >>>+ ptrdiff_t width[4]; > >>>+ ptrdiff_t height[4]; > >>> int do_scene_detect; ///< 1 if the expression requires > >>> scene detection variables, 0 otherwise > >>> ff_scene_sad_fn sad; ///< Sum of the absolute difference > >>> function (scene detect only) > >>> double prev_mafd; ///< previous MAFD > >>> (scene detect only) > >>>@@ -202,6 +208,17 @@ static av_cold int init(AVFilterContext *ctx) > >>>static int config_input(AVFilterLink *inlink) > >>>{ > >>> SelectContext *select = inlink->dst->priv; > >>>+ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format); > >>>+ > >>>+ select->bitdepth = desc->comp[0].depth; > >>>+ select->nb_planes = av_pix_fmt_count_planes(inlink->format); > >>>+ for (int plane = 0; plane < select->nb_planes; plane++) { > >>>+ ptrdiff_t line_size = av_image_get_linesize(inlink->format, > >>>inlink->w, plane); > >>>+ int vsub = desc->log2_chroma_h; > >>>+ > >>>+ select->width[plane] = line_size >> (select->bitdepth > 8); > >>>+ select->height[plane] = plane == 1 || plane == 2 ? > >>>AV_CEIL_RSHIFT(inlink->h, vsub) : inlink->h; > >>>+ } > >>> > >>> select->var_values[VAR_N] = 0.0; > >>> select->var_values[VAR_SELECTED_N] = 0.0; > >>>@@ -242,7 +259,7 @@ static int config_input(AVFilterLink *inlink) > >>> inlink->type == AVMEDIA_TYPE_AUDIO ? inlink->sample_rate : NAN; > >>> > >>> if (CONFIG_SELECT_FILTER && select->do_scene_detect) { > >>>- select->sad = ff_scene_sad_get_fn(8); > >>>+ select->sad = ff_scene_sad_get_fn(select->bitdepth == 8 ? 8 : 16); > >>> if (!select->sad) > >>> return AVERROR(EINVAL); > >>> } > >>>@@ -258,12 +275,21 @@ static double get_scene_score(AVFilterContext *ctx, > >>>AVFrame *frame) > >>> if (prev_picref && > >>> frame->height == prev_picref->height && > >>> frame->width == prev_picref->width) { > >>>- uint64_t sad; > >>>+ uint64_t sad = 0; > >>> double mafd, diff; > >>>+ int count = 0; > >>>+ > >>>+ for (int plane = 0; plane < select->nb_planes; plane++) { > >>>+ uint64_t plane_sad; > >>>+ select->sad(prev_picref->data[plane], > >>>prev_picref->linesize[plane], > >>>+ frame->data[plane], frame->linesize[plane], > >>>+ select->width[plane], select->height[plane], > >>>&plane_sad); > >>>+ sad += plane_sad; > >>>+ count += select->width[plane] * select->height[plane]; > >>>+ } > >>> > >>>- select->sad(prev_picref->data[0], prev_picref->linesize[0], > >>>frame->data[0], frame->linesize[0], frame->width * 3, frame->height, &sad); > >>> emms_c(); > >>>- mafd = (double)sad / (frame->width * 3 * frame->height); > >>>+ mafd = (double)sad / count; > >> > >>Still missing normalization to [0..255] here for >8 bitdepth. > >By the testing, Passengers_Breakfast_4K.mkv is 10bits sample, it can't > >detect the scenecut if using 1<<bitdepth, > > You should divide by (1 << (bitdepth - 8)), since you should be > normalizing to 0..255 here. > Yes, Now I have check the result, it's expected. I have updated the patch.
> >Or just remove yuv420p10 support, it's the only 10bit enable pixel format in > >the 3/3 patch? > >After get more sample for testing it's OK, then change for bitdepth > 8 > > You should get the same scores for 10bit and 8bit. (e.g. YUV420P and > YUV420P10). > > Regards, > Marton > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".