[vlc-devel] [PATCH 1/3] ffmpeg: only free the options if there were any

Steve Lhomme robux4 at videolabs.io
Fri Aug 5 11:28:01 CEST 2016


--
replaces https://patches.videolan.org/patch/14209/ by removing "" testing
---
 modules/access/avio.c            | 4 ++--
 modules/codec/avcodec/avcodec.c  | 5 +++--
 modules/codec/avcodec/encoder.c  | 5 +++--
 modules/codec/avcodec/subtitle.c | 5 +++--
 modules/demux/avformat/demux.c   | 4 ++--
 modules/demux/avformat/mux.c     | 5 +++--
 6 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/modules/access/avio.c b/modules/access/avio.c
index 3a3b478..2181eaf 100644
--- a/modules/access/avio.c
+++ b/modules/access/avio.c
@@ -158,7 +158,7 @@ int OpenAvio(vlc_object_t *object)
     };
     AVDictionary *options = NULL;
     char *psz_opts = var_InheritString(access, "avio-options");
-    if (psz_opts && *psz_opts) {
+    if (psz_opts) {
         options = vlc_av_get_options(psz_opts);
         free(psz_opts);
     }
@@ -238,7 +238,7 @@ int OutOpenAvio(vlc_object_t *object)
 #else
     AVDictionary *options = NULL;
     char *psz_opts = var_InheritString(access, "sout-avio-options");
-    if (psz_opts && *psz_opts) {
+    if (psz_opts) {
         options = vlc_av_get_options(psz_opts);
         free(psz_opts);
     }
diff --git a/modules/codec/avcodec/avcodec.c b/modules/codec/avcodec/avcodec.c
index 5402f69..d471077 100644
--- a/modules/codec/avcodec/avcodec.c
+++ b/modules/codec/avcodec/avcodec.c
@@ -357,9 +357,10 @@ int ffmpeg_OpenCodec( decoder_t *p_dec )
     AVDictionary *options = NULL;
     int ret;
 
-    if (psz_opts && *psz_opts)
+    if (psz_opts) {
         options = vlc_av_get_options(psz_opts);
-    free(psz_opts);
+        free(psz_opts);
+    }
 
     vlc_avcodec_lock();
     ret = avcodec_open2( p_sys->p_context, p_sys->p_codec, options ? &options : NULL );
diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
index e2f0546..0f37683 100644
--- a/modules/codec/avcodec/encoder.c
+++ b/modules/codec/avcodec/encoder.c
@@ -892,9 +892,10 @@ int OpenEncoder( vlc_object_t *p_this )
     int ret;
     char *psz_opts = var_InheritString(p_enc, ENC_CFG_PREFIX "options");
     AVDictionary *options = NULL;
-    if (psz_opts && *psz_opts)
+    if (psz_opts) {
         options = vlc_av_get_options(psz_opts);
-    free(psz_opts);
+        free(psz_opts);
+    }
 
     vlc_avcodec_lock();
     ret = avcodec_open2( p_context, p_codec, options ? &options : NULL );
diff --git a/modules/codec/avcodec/subtitle.c b/modules/codec/avcodec/subtitle.c
index de4d3e4..26d8754 100644
--- a/modules/codec/avcodec/subtitle.c
+++ b/modules/codec/avcodec/subtitle.c
@@ -89,9 +89,10 @@ int InitSubtitleDec(decoder_t *dec, AVCodecContext *context,
     int ret;
     char *psz_opts = var_InheritString(dec, "avcodec-options");
     AVDictionary *options = NULL;
-    if (psz_opts && *psz_opts)
+    if (psz_opts) {
         options = vlc_av_get_options(psz_opts);
-    free(psz_opts);
+        free(psz_opts);
+    }
 
     vlc_avcodec_lock();
     ret = avcodec_open2(context, codec, options ? &options : NULL);
diff --git a/modules/demux/avformat/demux.c b/modules/demux/avformat/demux.c
index 210830e..f962862 100644
--- a/modules/demux/avformat/demux.c
+++ b/modules/demux/avformat/demux.c
@@ -336,13 +336,13 @@ int OpenDemux( vlc_object_t *p_this )
     unsigned int nb_streams = p_sys->ic->nb_streams;
     for (unsigned i = 1; i < nb_streams; i++)
         options[i] = NULL;
-    if (psz_opts && *psz_opts) {
+    if (psz_opts) {
         options[0] = vlc_av_get_options(psz_opts);
         for (unsigned i = 1; i < nb_streams; i++) {
             av_dict_copy(&options[i], options[0], 0);
         }
+        free(psz_opts);
     }
-    free(psz_opts);
     vlc_avcodec_lock(); /* avformat calls avcodec behind our back!!! */
     error = avformat_find_stream_info( p_sys->ic, options );
     /* FIXME: what if nb_streams change after that call? */
diff --git a/modules/demux/avformat/mux.c b/modules/demux/avformat/mux.c
index 462d092..879759b 100644
--- a/modules/demux/avformat/mux.c
+++ b/modules/demux/avformat/mux.c
@@ -403,9 +403,10 @@ static int Mux( sout_mux_t *p_mux )
 
         char *psz_opts = var_GetNonEmptyString( p_mux, "sout-avformat-options" );
         AVDictionary *options = NULL;
-        if (psz_opts && *psz_opts)
+        if (psz_opts) {
             options = vlc_av_get_options(psz_opts);
-        free(psz_opts);
+            free(psz_opts);
+        }
         error = avformat_write_header( p_sys->oc, options ? &options : NULL);
         AVDictionaryEntry *t = NULL;
         while ((t = av_dict_get(options, "", t, AV_DICT_IGNORE_SUFFIX))) {
-- 
2.7.2.windows.1



More information about the vlc-devel mailing list