]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_showinfo.c
avutil/buffer: Switch AVBuffer API to size_t
[ffmpeg] / libavfilter / vf_showinfo.c
index f9ed54a70c937f0b356d2fd2f33aa7fc2436807b..2529cb28511baa9229857df50fce974bb22279df 100644 (file)
 
 #include <inttypes.h>
 
-#include "libavcodec/dynamic_hdr10_plus.h"
 #include "libavutil/bswap.h"
 #include "libavutil/adler32.h"
 #include "libavutil/display.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/internal.h"
+#include "libavutil/hdr_dynamic_metadata.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/spherical.h"
@@ -38,6 +38,7 @@
 #include "libavutil/timecode.h"
 #include "libavutil/mastering_display_metadata.h"
 #include "libavutil/video_enc_params.h"
+#include "libavutil/detection_bbox.h"
 
 #include "avfilter.h"
 #include "internal.h"
@@ -153,6 +154,31 @@ static void dump_roi(AVFilterContext *ctx, const AVFrameSideData *sd)
     }
 }
 
+static void dump_detection_bbox(AVFilterContext *ctx, const AVFrameSideData *sd)
+{
+    int nb_bboxes;
+    const AVDetectionBBoxHeader *header;
+    const AVDetectionBBox *bbox;
+
+    header = (const AVDetectionBBoxHeader *)sd->data;
+    nb_bboxes = header->nb_bboxes;
+    av_log(ctx, AV_LOG_INFO, "detection bounding boxes:\n");
+    av_log(ctx, AV_LOG_INFO, "source: %s\n", header->source);
+
+    for (int i = 0; i < nb_bboxes; i++) {
+        bbox = av_get_detection_bbox(header, i);
+        av_log(ctx, AV_LOG_INFO, "index: %d,\tregion: (%d, %d) -> (%d, %d), label: %s, confidence: %d/%d.\n",
+                                 i, bbox->x, bbox->y, bbox->x + bbox->w, bbox->y + bbox->h,
+                                 bbox->detect_label, bbox->detect_confidence.num, bbox->detect_confidence.den);
+        if (bbox->classify_count > 0) {
+            for (int j = 0; j < bbox->classify_count; j++) {
+                av_log(ctx, AV_LOG_INFO, "\t\tclassify:  label: %s, confidence: %d/%d.\n",
+                       bbox->classify_labels[j], bbox->classify_confidences[j].num, bbox->classify_confidences[j].den);
+            }
+        }
+    }
+}
+
 static void dump_mastering_display(AVFilterContext *ctx, const AVFrameSideData *sd)
 {
     const AVMasteringDisplayMetadata *mastering_display;
@@ -314,7 +340,8 @@ static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSi
     int i;
 
     if (sd->size < uuid_size) {
-        av_log(ctx, AV_LOG_ERROR, "invalid data(%d < UUID(%d-bytes))\n", sd->size, uuid_size);
+        av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < "
+               "UUID(%d-bytes))\n", sd->size, uuid_size);
         return;
     }
 
@@ -472,7 +499,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
             av_log(ctx, AV_LOG_INFO, "pan/scan");
             break;
         case AV_FRAME_DATA_A53_CC:
-            av_log(ctx, AV_LOG_INFO, "A/53 closed captions (%d bytes)", sd->size);
+            av_log(ctx, AV_LOG_INFO, "A/53 closed captions "
+                   "(%"SIZE_SPECIFIER" bytes)", sd->size);
             break;
         case AV_FRAME_DATA_SPHERICAL:
             dump_spherical(ctx, frame, sd);
@@ -494,6 +522,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
         case AV_FRAME_DATA_REGIONS_OF_INTEREST:
             dump_roi(ctx, sd);
             break;
+        case AV_FRAME_DATA_DETECTION_BBOXES:
+            dump_detection_bbox(ctx, sd);
+            break;
         case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA:
             dump_mastering_display(ctx, sd);
             break;
@@ -516,8 +547,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
             dump_sei_unregistered_metadata(ctx, sd);
             break;
         default:
-            av_log(ctx, AV_LOG_WARNING, "unknown side data type %d (%d bytes)\n",
-                   sd->type, sd->size);
+            av_log(ctx, AV_LOG_WARNING, "unknown side data type %d "
+                   "(%"SIZE_SPECIFIER" bytes)\n", sd->type, sd->size);
             break;
         }