Browse code

avfilter/f_metadata: add starts_with string function

Signed-off-by: Tobias Rapp <t.rapp@noa-archive.com>

Tobias Rapp authored on 2016/02/11 21:35:20
Showing 2 changed files
... ...
@@ -8500,6 +8500,10 @@ Can be one of following:
8500 8500
 Values are interpreted as strings, returns true if @code{value} is same as metadata value up
8501 8501
 to N chars as set in @code{length} option.
8502 8502
 
8503
+@item starts_with
8504
+Values are interpreted as strings, returns true if metadata value starts with
8505
+the @code{value} option string.
8506
+
8503 8507
 @item less
8504 8508
 Values are interpreted as floats, returns true if metadata value is less than @code{value}.
8505 8509
 
... ...
@@ -49,6 +49,7 @@ enum MetadataMode {
49 49
 
50 50
 enum MetadataFunction {
51 51
     METADATAF_STRING,
52
+    METADATAF_STARTS_WITH,
52 53
     METADATAF_LESS,
53 54
     METADATAF_EQUAL,
54 55
     METADATAF_GREATER,
... ...
@@ -102,6 +103,7 @@ static const AVOption filt_name##_options[] = {                     \
102 102
     { "value", "set metadata value",     OFFSET(value),  AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \
103 103
     { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \
104 104
     {   "string",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING  }, 0, 3, FLAGS, "function" }, \
105
+    {   "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \
105 106
     {   "less",    NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS    }, 0, 3, FLAGS, "function" }, \
106 107
     {   "equal",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL   }, 0, 3, FLAGS, "function" }, \
107 108
     {   "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \
... ...
@@ -117,6 +119,11 @@ static int string(MetadataContext *s, const char *value1, const char *value2, si
117 117
     return !strncmp(value1, value2, length);
118 118
 }
119 119
 
120
+static int starts_with(MetadataContext *s, const char *value1, const char *value2, size_t length)
121
+{
122
+    return !strncmp(value1, value2, strlen(value2));
123
+}
124
+
120 125
 static int equal(MetadataContext *s, const char *value1, const char *value2, size_t length)
121 126
 {
122 127
     float f1, f2;
... ...
@@ -201,6 +208,9 @@ static av_cold int init(AVFilterContext *ctx)
201 201
     case METADATAF_STRING:
202 202
         s->compare = string;
203 203
         break;
204
+    case METADATAF_STARTS_WITH:
205
+        s->compare = starts_with;
206
+        break;
204 207
     case METADATAF_LESS:
205 208
         s->compare = less;
206 209
         break;