From ad6fc12b769fa0f6bdbde60e0a887d076a4efc69 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 23 May 2018 01:11:32 +0200 Subject: [PATCH] validate: media-descriptor: Add a way to specify when a field value is unknown And this way is to set the attribute to... `unknown` --- validate/gst/validate/media-descriptor-parser.c | 34 ++++++++++++++----------- validate/gst/validate/media-descriptor.c | 16 +++++++----- validate/gst/validate/media-descriptor.h | 6 ++++- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/validate/gst/validate/media-descriptor-parser.c b/validate/gst/validate/media-descriptor-parser.c index c9b208a5..ed2c1b5 100644 --- a/validate/gst/validate/media-descriptor-parser.c +++ b/validate/gst/validate/media-descriptor-parser.c @@ -128,7 +128,6 @@ deserialize_segmentnode (const gchar ** names, const gchar ** values) node->segment.duration = g_ascii_strtoull (values[i], NULL, 0); } - return node; } @@ -162,30 +161,35 @@ deserialize_framenode (const gchar ** names, const gchar ** values) GstValidateMediaFrameNode *framenode = g_slice_new0 (GstValidateMediaFrameNode); +/* *INDENT-OFF* */ +#define IF_SET_UINT64_FIELD(name,fieldname) \ + if (g_strcmp0 (names[i], name) == 0) { \ + if (g_strcmp0 (values[i], "unknown") == 0) \ + framenode->fieldname = GST_VALIDATE_UKNOWN_UINT64; \ + else\ + framenode->fieldname = g_ascii_strtoull (values[i], NULL, 0); \ + } + for (i = 0; names[i] != NULL; i++) { - if (g_strcmp0 (names[i], "id") == 0) - framenode->id = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "offset") == 0) - framenode->offset = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "offset-end") == 0) - framenode->offset_end = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "duration") == 0) - framenode->duration = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "pts") == 0) - framenode->pts = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "dts") == 0) - framenode->dts = g_ascii_strtoull (values[i], NULL, 0); - else if (g_strcmp0 (names[i], "running-time") == 0) - framenode->running_time = g_ascii_strtoull (values[i], NULL, 0); + IF_SET_UINT64_FIELD ("id", id) + else IF_SET_UINT64_FIELD ("offset", offset) + else IF_SET_UINT64_FIELD ("offset-end", offset_end) + else IF_SET_UINT64_FIELD ("duration", duration) + else IF_SET_UINT64_FIELD ("pts", pts) + else IF_SET_UINT64_FIELD ("dts", dts) + else IF_SET_UINT64_FIELD ("running-time", running_time) else if (g_strcmp0 (names[i], "checksum") == 0) framenode->checksum = g_strdup (values[i]); else if (g_strcmp0 (names[i], "is-keyframe") == 0) { if (!g_ascii_strcasecmp (values[i], "true")) framenode->is_keyframe = TRUE; + else if (!g_ascii_strcasecmp (values[i], "unknown")) + framenode->is_keyframe = GST_VALIDATE_UKNOWN_BOOL; else framenode->is_keyframe = FALSE; } } +/* *INDENT-ON* */ framenode->buf = gst_buffer_new_wrapped (framenode->checksum, strlen (framenode->checksum) + 1); diff --git a/validate/gst/validate/media-descriptor.c b/validate/gst/validate/media-descriptor.c index 831812a..8d6e365 100644 --- a/validate/gst/validate/media-descriptor.c +++ b/validate/gst/validate/media-descriptor.c @@ -456,8 +456,8 @@ compare_frames (GstValidateMediaDescriptor * ref, G_GUINT64_FORMAT, rstream->id, rframe->id, cframe->id); return FALSE; } -#define CHECK_FRAME_FIELD(fieldname, format) \ - if (rframe->fieldname != cframe->fieldname) { \ +#define CHECK_FRAME_FIELD(fieldname, format, unknown_value) \ + if (rframe->fieldname != unknown_value && rframe->fieldname != cframe->fieldname) { \ GST_VALIDATE_REPORT (ref, FILE_FRAMES_INCORRECT, \ "Stream %s frames with id %" G_GUINT64_FORMAT " have " #fieldname \ " mismatch. Expected " format ", got " format, rstream->id, \ @@ -465,11 +465,13 @@ compare_frames (GstValidateMediaDescriptor * ref, return FALSE; \ } - CHECK_FRAME_FIELD (pts, "%" G_GUINT64_FORMAT); - CHECK_FRAME_FIELD (dts, "%" G_GUINT64_FORMAT); - CHECK_FRAME_FIELD (duration, "%" G_GUINT64_FORMAT); - CHECK_FRAME_FIELD (running_time, "%" G_GUINT64_FORMAT); - CHECK_FRAME_FIELD (is_keyframe, "%d"); + CHECK_FRAME_FIELD (pts, "%" G_GUINT64_FORMAT, GST_VALIDATE_UKNOWN_UINT64); + CHECK_FRAME_FIELD (dts, "%" G_GUINT64_FORMAT, GST_VALIDATE_UKNOWN_UINT64); + CHECK_FRAME_FIELD (duration, "%" G_GUINT64_FORMAT, + GST_VALIDATE_UKNOWN_UINT64); + CHECK_FRAME_FIELD (running_time, "%" G_GUINT64_FORMAT, + GST_VALIDATE_UKNOWN_UINT64); + CHECK_FRAME_FIELD (is_keyframe, "%d", GST_VALIDATE_UKNOWN_BOOL); return TRUE; } diff --git a/validate/gst/validate/media-descriptor.h b/validate/gst/validate/media-descriptor.h index 25c7c9a..45ccb37 100644 --- a/validate/gst/validate/media-descriptor.h +++ b/validate/gst/validate/media-descriptor.h @@ -27,7 +27,11 @@ #include #include "gst-validate-report.h" -G_BEGIN_DECLS typedef struct +G_BEGIN_DECLS + +#define GST_VALIDATE_UKNOWN_UINT64 (G_MAXUINT64 - 2) +#define GST_VALIDATE_UKNOWN_BOOL (G_MAXUINT32 - 2) +typedef struct { /* Children */ /* GstValidateMediaTagNode */ -- 2.7.4