Commit ae6118de authored by Kevin Mitchell's avatar Kevin Mitchell Committed by Michael Niedermayer

avfilter/idet: add current frame classification to metadata

Fixes ticket 3832
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 28478438
......@@ -5577,9 +5577,17 @@ Detect video interlacing type.
This filter tries to detect if the input is interlaced or progressive,
top or bottom field first.
Single frame detection considers only immediately adjacent frames when classifying each frame.
Multiple frame detection incorporates the classification history of previous frames.
The filter will log these metadata values:
@table @option
@item single.current_frame
Detected type of current frame using single-frame detection. One of:
``tff'' (top field first), ``bff'' (bottom field first),
``progressive'', or ``undetermined''
@item single.tff
Cumulative number of frames detected as top field first using single-frame detection.
......@@ -5589,6 +5597,11 @@ Cumulative number of frames detected as top field first using multiple-frame det
@item single.bff
Cumulative number of frames detected as bottom field first using single-frame detection.
@item multiple.current_frame
Detected type of current frame using multiple-frame detection. One of:
``tff'' (top field first), ``bff'' (bottom field first),
``progressive'', or ``undetermined''
@item multiple.bff
Cumulative number of frames detected as bottom field first using multiple-frame detection.
......
......@@ -40,10 +40,10 @@ AVFILTER_DEFINE_CLASS(idet);
static const char *type2str(Type type)
{
switch(type) {
case TFF : return "Top Field First ";
case BFF : return "Bottom Field First";
case PROGRESSIVE : return "Progressive ";
case UNDETERMINED : return "Undetermined ";
case TFF : return "tff";
case BFF : return "bff";
case PROGRESSIVE : return "progressive";
case UNDETERMINED : return "undetermined";
}
return NULL;
}
......@@ -149,13 +149,15 @@ static void filter(AVFilterContext *ctx)
idet->prestat [ type] ++;
idet->poststat[idet->last_type] ++;
av_log(ctx, AV_LOG_DEBUG, "Single frame:%s, Multi frame:%s\n", type2str(type), type2str(idet->last_type));
av_log(ctx, AV_LOG_DEBUG, "Single frame:%12s, Multi frame:%12s\n", type2str(type), type2str(idet->last_type));
av_dict_set (metadata, "lavfi.idet.single.current_frame", type2str(type), 0);
av_dict_set_int(metadata, "lavfi.idet.single.tff", idet->prestat[TFF], 0);
av_dict_set_int(metadata, "lavfi.idet.single.bff", idet->prestat[BFF], 0);
av_dict_set_int(metadata, "lavfi.idet.single.progressive", idet->prestat[PROGRESSIVE], 0);
av_dict_set_int(metadata, "lavfi.idet.single.undetermined", idet->prestat[UNDETERMINED], 0);
av_dict_set (metadata, "lavfi.idet.multiple.current_frame", type2str(idet->last_type), 0);
av_dict_set_int(metadata, "lavfi.idet.multiple.tff", idet->poststat[TFF], 0);
av_dict_set_int(metadata, "lavfi.idet.multiple.bff", idet->poststat[BFF], 0);
av_dict_set_int(metadata, "lavfi.idet.multiple.progressive", idet->poststat[PROGRESSIVE], 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment