[vlc-devel] [PATCH 16/18] access:imem: find the ES category earlier

Steve Lhomme robux4 at videolabs.io
Thu Jul 6 09:23:46 CEST 2017


--
replaces https://patches.videolan.org/patch/17300/
- rebase on master
---
 modules/access/imem.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/modules/access/imem.c b/modules/access/imem.c
index 873aacaebe..02c80fdeca 100644
--- a/modules/access/imem.c
+++ b/modules/access/imem.c
@@ -390,6 +390,24 @@ static block_t *Block(access_t *access, bool *restrict eof)
     return block;
 }
 
+static inline int GetCategory(vlc_object_t *object)
+{
+    const int cat = var_InheritInteger(object, "imem-cat");
+    switch (cat)
+    {
+    case 1:
+        return AUDIO_ES;
+    case 2:
+        return VIDEO_ES;
+    case 3:
+        return SPU_ES;
+    default:
+        msg_Err(object, "Invalid ES category");
+    case 4:
+        return UNKNOWN_ES;
+    }
+}
+
 /**
  * It opens an imem access_demux.
  */
@@ -403,20 +421,18 @@ static int OpenDemux(vlc_object_t *object)
 
     /* ES format */
     es_format_t fmt;
-    es_format_Init(&fmt, UNKNOWN_ES, 0);
+    es_format_Init(&fmt, GetCategory(object), 0);
 
     fmt.i_id = var_InheritInteger(object, "imem-id");
     fmt.i_group = var_InheritInteger(object, "imem-group");
 
     char *tmp = var_InheritString(object, "imem-codec");
     if (tmp)
-        fmt.i_codec = vlc_fourcc_GetCodecFromString(UNKNOWN_ES, tmp);
+        fmt.i_codec = vlc_fourcc_GetCodecFromString(fmt.i_cat, tmp);
     free(tmp);
 
-    const int cat = var_InheritInteger(object, "imem-cat");
-    switch (cat) {
-    case 1: {
-        es_format_Change( &fmt, AUDIO_ES, 0 );
+    switch (fmt.i_cat) {
+    case AUDIO_ES: {
         fmt.audio.i_channels = var_InheritInteger(object, "imem-channels");
         fmt.audio.i_rate = var_InheritInteger(object, "imem-samplerate");
 
@@ -425,8 +441,7 @@ static int OpenDemux(vlc_object_t *object)
                 fmt.audio.i_channels, fmt.audio.i_rate);
         break;
     }
-    case 2: {
-        es_format_Change( &fmt, VIDEO_ES, 0 );
+    case VIDEO_ES: {
         fmt.video.i_width  = var_InheritInteger(object, "imem-width");
         fmt.video.i_height = var_InheritInteger(object, "imem-height");
         unsigned num, den;
@@ -448,8 +463,7 @@ static int OpenDemux(vlc_object_t *object)
                 fmt.video.i_frame_rate, fmt.video.i_frame_rate_base);
         break;
     }
-    case 3: {
-        es_format_Change( &fmt, SPU_ES, 0 );
+    case SPU_ES: {
         fmt.subs.spu.i_original_frame_width =
             var_InheritInteger(object, "imem-width");
         fmt.subs.spu.i_original_frame_height =
@@ -460,8 +474,6 @@ static int OpenDemux(vlc_object_t *object)
         break;
     }
     default:
-        if (cat != 4)
-            msg_Err(object, "Invalid ES category");
         es_format_Clean(&fmt);
         CloseCommon(sys);
         return VLC_EGENERIC;
-- 
2.12.1



More information about the vlc-devel mailing list