[FFmpeg-devel] [PATCH 1/1] Change signature to avfilter_open(), from AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name); to int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);

Stefano Sabatini stefano.sabatini-lala
Wed Jul 28 15:21:16 CEST 2010


This way it is possible to propagate an error code telling the reason
of the failure.
---
 ffmpeg.c                    |    8 ++++----
 ffplay.c                    |    4 ++--
 libavfilter/avfilter.c      |    8 +++++---
 libavfilter/avfilter.h      |    7 +++++--
 libavfilter/avfiltergraph.c |    3 +--
 libavfilter/graphparser.c   |    2 +-
 tools/lavfi-showfiltfmts.c  |    2 +-
 7 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 6f70516..932ade3 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -410,9 +410,9 @@ static int configure_filters(AVInputStream *ist, AVOutputStream *ost)
 
     graph = av_mallocz(sizeof(AVFilterGraph));
 
-    if (!(ist->input_video_filter = avfilter_open(avfilter_get_by_name("buffer"), "src")))
+    if (avfilter_open(&ist->input_video_filter, avfilter_get_by_name("buffer"), "src") < 0)
         return -1;
-    if (!(ist->out_video_filter = avfilter_open(&output_filter, "out")))
+    if (avfilter_open(&ist->out_video_filter, &output_filter, "out") < 0)
         return -1;
 
     snprintf(args, 255, "%d:%d:%d", ist->st->codec->width,
@@ -432,7 +432,7 @@ static int configure_filters(AVInputStream *ist, AVOutputStream *ost)
         snprintf(args, 255, "%d:%d:%d:%d", ost->leftBand, ost->topBand,
                  codec->width,
                  codec->height);
-        filter = avfilter_open(avfilter_get_by_name("crop"), NULL);
+        avfilter_open(&filter, avfilter_get_by_name("crop"), NULL);
         if (!filter)
             return -1;
         if (avfilter_init_filter(filter, args, NULL))
@@ -450,7 +450,7 @@ static int configure_filters(AVInputStream *ist, AVOutputStream *ost)
                  codec->width,
                  codec->height,
                  (int)av_get_int(sws_opts, "sws_flags", NULL));
-        filter = avfilter_open(avfilter_get_by_name("scale"), NULL);
+        avfilter_open(&filter, avfilter_get_by_name("scale"), NULL);
         if (!filter)
             return -1;
         if (avfilter_init_filter(filter, args, NULL))
diff --git a/ffplay.c b/ffplay.c
index c200119..f8fa825 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1790,8 +1790,8 @@ static int video_thread(void *arg)
     snprintf(sws_flags_str, sizeof(sws_flags_str), "flags=%d", sws_flags);
     graph->scale_sws_opts = av_strdup(sws_flags_str);
 
-    if(!(filt_src = avfilter_open(&input_filter,  "src")))   goto the_end;
-    if(!(filt_out = avfilter_open(&output_filter, "out")))   goto the_end;
+    if (avfilter_open(&filt_src, &input_filter,  "src") < 0) goto the_end;
+    if (avfilter_open(&filt_out, &output_filter, "out") < 0) goto the_end;
 
     if(avfilter_init_filter(filt_src, NULL, is))             goto the_end;
     if(avfilter_init_filter(filt_out, NULL, frame))          goto the_end;
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index c040a9c..64d9fac 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -389,12 +389,13 @@ static const AVClass avfilter_class = {
     LIBAVUTIL_VERSION_INT,
 };
 
-AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name)
+int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
 {
     AVFilterContext *ret;
+    *filter_ctx = NULL;
 
     if (!filter)
-        return 0;
+        return AVERROR(EINVAL);
 
     ret = av_mallocz(sizeof(AVFilterContext));
 
@@ -417,7 +418,8 @@ AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name)
         ret->outputs      = av_mallocz(sizeof(AVFilterLink*) * ret->output_count);
     }
 
-    return ret;
+    *filter_ctx = ret;
+    return 0;
 }
 
 void avfilter_destroy(AVFilterContext *filter)
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index e945a07..c88e72b 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -648,11 +648,14 @@ AVFilter **av_filter_next(AVFilter **filter);
 
 /**
  * Create a filter instance.
+ *
+ * @param filter_ctx put here a pointer to the new instance on
+ * success, NULL on failure
  * @param filter    the filter to create an instance of
  * @param inst_name Name to give to the new instance. Can be NULL for none.
- * @return          Pointer to the new instance on success. NULL on failure.
+ * @return >= 0 in case of success, a negative error code otherwise
  */
-AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name);
+int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);
 
 /**
  * Initialize a filter.
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index 6f219a6..2123c28 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -133,8 +133,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
                     /* couldn't merge format lists. auto-insert scale filter */
                     snprintf(inst_name, sizeof(inst_name), "auto-inserted scaler %d",
                              scaler_count++);
-                    scale =
-                        avfilter_open(avfilter_get_by_name("scale"),inst_name);
+                    avfilter_open(&scale, avfilter_get_by_name("scale"), inst_name);
 
                     snprintf(scale_args, sizeof(scale_args), "0:0:%s", graph->scale_sws_opts);
                     if(!scale || scale->filter->init(scale, scale_args, NULL) ||
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
index 5b3f89e..c4f621b 100644
--- a/libavfilter/graphparser.c
+++ b/libavfilter/graphparser.c
@@ -111,7 +111,7 @@ static AVFilterContext *create_filter(AVFilterGraph *ctx, int index,
         return NULL;
     }
 
-    filt_ctx = avfilter_open(filt, inst_name);
+    avfilter_open(&filt_ctx, filt, inst_name);
     if (!filt_ctx) {
         av_log(log_ctx, AV_LOG_ERROR,
                "Error creating filter '%s'\n", filt_name);
diff --git a/tools/lavfi-showfiltfmts.c b/tools/lavfi-showfiltfmts.c
index ba08f46..0b18ca9 100644
--- a/tools/lavfi-showfiltfmts.c
+++ b/tools/lavfi-showfiltfmts.c
@@ -49,7 +49,7 @@ int main(int argc, char **argv)
         return 1;
     }
 
-    if (!(filter_ctx = avfilter_open(filter, NULL))) {
+    if (avfilter_open(&filter_ctx, filter, NULL) < 0) {
         fprintf(stderr, "Inpossible to open filter with name '%s'\n", filter_name);
         return 1;
     }
-- 
1.7.0.4




More information about the ffmpeg-devel mailing list