lavfi: show side data of detection bounding boxes
This commit is contained in:
@@ -71,6 +71,7 @@ static const AVOption filt_name##_options[] = { \
|
|||||||
{ "S12M_TIMECOD", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_S12M_TIMECODE }, 0, 0, FLAGS, "type" }, \
|
{ "S12M_TIMECOD", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_S12M_TIMECODE }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "DYNAMIC_HDR_PLUS", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, 0, 0, FLAGS, "type" }, \
|
{ "DYNAMIC_HDR_PLUS", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "REGIONS_OF_INTEREST", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_REGIONS_OF_INTEREST }, 0, 0, FLAGS, "type" }, \
|
{ "REGIONS_OF_INTEREST", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_REGIONS_OF_INTEREST }, 0, 0, FLAGS, "type" }, \
|
||||||
|
{ "DETECTION_BOUNDING_BOXES", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DETECTION_BBOXES }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "SEI_UNREGISTERED", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_SEI_UNREGISTERED }, 0, 0, FLAGS, "type" }, \
|
{ "SEI_UNREGISTERED", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_SEI_UNREGISTERED }, 0, 0, FLAGS, "type" }, \
|
||||||
{ NULL } \
|
{ NULL } \
|
||||||
}
|
}
|
||||||
@@ -100,6 +101,7 @@ static const AVOption filt_name##_options[] = { \
|
|||||||
{ "S12M_TIMECOD", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_S12M_TIMECODE }, 0, 0, FLAGS, "type" }, \
|
{ "S12M_TIMECOD", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_S12M_TIMECODE }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "DYNAMIC_HDR_PLUS", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, 0, 0, FLAGS, "type" }, \
|
{ "DYNAMIC_HDR_PLUS", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "REGIONS_OF_INTEREST", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_REGIONS_OF_INTEREST }, 0, 0, FLAGS, "type" }, \
|
{ "REGIONS_OF_INTEREST", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_REGIONS_OF_INTEREST }, 0, 0, FLAGS, "type" }, \
|
||||||
|
{ "DETECTION_BOUNDING_BOXES", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_DETECTION_BBOXES }, 0, 0, FLAGS, "type" }, \
|
||||||
{ "SEI_UNREGISTERED", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_SEI_UNREGISTERED }, 0, 0, FLAGS, "type" }, \
|
{ "SEI_UNREGISTERED", "", 0, AV_OPT_TYPE_CONST, {.i64 = AV_FRAME_DATA_SEI_UNREGISTERED }, 0, 0, FLAGS, "type" }, \
|
||||||
{ NULL } \
|
{ NULL } \
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,7 @@
|
|||||||
#include "libavutil/timecode.h"
|
#include "libavutil/timecode.h"
|
||||||
#include "libavutil/mastering_display_metadata.h"
|
#include "libavutil/mastering_display_metadata.h"
|
||||||
#include "libavutil/video_enc_params.h"
|
#include "libavutil/video_enc_params.h"
|
||||||
|
#include "libavutil/detection_bbox.h"
|
||||||
|
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
#include "internal.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)
|
static void dump_mastering_display(AVFilterContext *ctx, const AVFrameSideData *sd)
|
||||||
{
|
{
|
||||||
const AVMasteringDisplayMetadata *mastering_display;
|
const AVMasteringDisplayMetadata *mastering_display;
|
||||||
@@ -494,6 +520,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|||||||
case AV_FRAME_DATA_REGIONS_OF_INTEREST:
|
case AV_FRAME_DATA_REGIONS_OF_INTEREST:
|
||||||
dump_roi(ctx, sd);
|
dump_roi(ctx, sd);
|
||||||
break;
|
break;
|
||||||
|
case AV_FRAME_DATA_DETECTION_BBOXES:
|
||||||
|
dump_detection_bbox(ctx, sd);
|
||||||
|
break;
|
||||||
case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA:
|
case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA:
|
||||||
dump_mastering_display(ctx, sd);
|
dump_mastering_display(ctx, sd);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user