[vlc-devel] [PATCH 01/26] sout:encoder: make provision for different encoder capability types

Steve Lhomme robux4 at ycbcr.xyz
Mon Jan 18 08:32:40 UTC 2021


Similar to 5f9515b6479ab4bf592807c5108af0fd4dda9dd1 for decoders.
---
 include/vlc_sout.h                   | 4 ++--
 modules/stream_out/transcode/audio.c | 5 +++--
 modules/stream_out/transcode/spu.c   | 3 ++-
 modules/stream_out/transcode/video.c | 6 ++++--
 src/misc/image.c                     | 3 +--
 src/missing.c                        | 2 +-
 src/stream_output/stream_output.c    | 9 +++++++--
 7 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/include/vlc_sout.h b/include/vlc_sout.h
index 23a7b90d36f..d20d8294902 100644
--- a/include/vlc_sout.h
+++ b/include/vlc_sout.h
@@ -227,8 +227,8 @@ static inline bool sout_StreamIsSynchronous(sout_stream_t *s)
  * Encoder
  ****************************************************************************/
 
-VLC_API encoder_t * sout_EncoderCreate( vlc_object_t *, size_t );
-#define sout_EncoderCreate(o,s) sout_EncoderCreate(VLC_OBJECT(o),s)
+VLC_API encoder_t * sout_EncoderCreate( vlc_object_t *, size_t, enum es_format_category_e );
+#define sout_EncoderCreate(o,s,c) sout_EncoderCreate(VLC_OBJECT(o),s,c)
 
 /****************************************************************************
  * Announce handler
diff --git a/modules/stream_out/transcode/audio.c b/modules/stream_out/transcode/audio.c
index 79a2a1af4eb..4cf538e330e 100644
--- a/modules/stream_out/transcode/audio.c
+++ b/modules/stream_out/transcode/audio.c
@@ -165,7 +165,7 @@ int transcode_audio_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
      * This should be enough to initialize the encoder for the first time (it
      * will be reloaded when all informations from the decoder are available).
      * */
-    if( transcode_encoder_test( sout_EncoderCreate(p_stream, sizeof(encoder_t)),
+    if( transcode_encoder_test( sout_EncoderCreate(p_stream, sizeof(encoder_t), AUDIO_ES),
                                 id->p_enccfg,
                                 &id->decoder_out,
                                 id->p_decoder->fmt_out.i_codec,
@@ -183,7 +183,8 @@ int transcode_audio_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
 
     vlc_mutex_unlock(&id->fifo.lock);
 
-    id->encoder = transcode_encoder_new( sout_EncoderCreate(p_stream, sizeof(encoder_t)), &encoder_tested_fmt_in );
+    id->encoder = transcode_encoder_new( sout_EncoderCreate(p_stream, sizeof(encoder_t), AUDIO_ES),
+                                         &encoder_tested_fmt_in );
     if( !id->encoder )
     {
         module_unneed( id->p_decoder, id->p_decoder->p_module );
diff --git a/modules/stream_out/transcode/spu.c b/modules/stream_out/transcode/spu.c
index 832600d2b93..71ebb0bebe0 100644
--- a/modules/stream_out/transcode/spu.c
+++ b/modules/stream_out/transcode/spu.c
@@ -115,7 +115,8 @@ int transcode_spu_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
         /* Open encoder */
         /* Initialization of encoder format structures */
         assert(!id->encoder);
-        id->encoder = transcode_encoder_new( sout_EncoderCreate(p_stream, sizeof(encoder_t)), &id->p_decoder->fmt_in );
+        id->encoder = transcode_encoder_new( sout_EncoderCreate(p_stream, sizeof(encoder_t), SPU_ES),
+                                             &id->p_decoder->fmt_in );
         if( !id->encoder )
         {
             module_unneed( id->p_decoder, id->p_decoder->p_module );
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index 079ab4ada68..44f75c42e93 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -222,7 +222,8 @@ int transcode_video_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
     es_format_t encoder_tested_fmt_in;
     es_format_Init( &encoder_tested_fmt_in, id->decoder_out.i_cat, 0 );
 
-    struct encoder_owner *p_enc_owner = (struct encoder_owner*)sout_EncoderCreate(p_stream, sizeof(struct encoder_owner));
+    struct encoder_owner *p_enc_owner =
+        (struct encoder_owner*)sout_EncoderCreate(p_stream, sizeof(struct encoder_owner), VIDEO_ES);
     if ( unlikely(p_enc_owner == NULL))
        goto error;
 
@@ -236,7 +237,8 @@ int transcode_video_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
                                 &encoder_tested_fmt_in ) )
        goto error;
 
-    p_enc_owner = (struct encoder_owner *)sout_EncoderCreate(p_stream, sizeof(struct encoder_owner));
+    p_enc_owner =
+        (struct encoder_owner *)sout_EncoderCreate(p_stream, sizeof(struct encoder_owner), VIDEO_ES);
     if ( unlikely(p_enc_owner == NULL))
        goto error;
 
diff --git a/src/misc/image.c b/src/misc/image.c
index 3b6cece47e1..e0353299467 100644
--- a/src/misc/image.c
+++ b/src/misc/image.c
@@ -711,11 +711,10 @@ static encoder_t *CreateEncoder( vlc_object_t *p_this, const video_format_t *fmt
 {
     encoder_t *p_enc;
 
-    p_enc = sout_EncoderCreate( p_this, sizeof(encoder_t) );
+    p_enc = sout_EncoderCreate( p_this, sizeof(encoder_t), VIDEO_ES );
     if( p_enc == NULL )
         return NULL;
 
-    p_enc->p_module = NULL;
     es_format_InitFromVideo( &p_enc->fmt_in, fmt_in );
 
     if( fmt_out->i_width > 0 && fmt_out->i_height > 0 )
diff --git a/src/missing.c b/src/missing.c
index 46baa65214a..b6de3e93135 100644
--- a/src/missing.c
+++ b/src/missing.c
@@ -100,7 +100,7 @@ noreturn void sout_AnnounceUnRegister(vlc_object_t *obj,
 }
 
 #undef sout_EncoderCreate
-encoder_t *sout_EncoderCreate( vlc_object_t *p_this, size_t owner_size )
+encoder_t *sout_EncoderCreate( vlc_object_t *p_this, size_t owner_size, enum es_format_category_e es )
 {
     msg_Err (p_this, "Encoding support not compiled-in!");
     return NULL;
diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c
index ce46cf3ea4a..6d77adc7085 100644
--- a/src/stream_output/stream_output.c
+++ b/src/stream_output/stream_output.c
@@ -999,8 +999,13 @@ rtp:
 }
 
 #undef sout_EncoderCreate
-encoder_t *sout_EncoderCreate( vlc_object_t *p_this, size_t owner_size )
+encoder_t *sout_EncoderCreate( vlc_object_t *p_this, size_t owner_size, enum es_format_category_e i_cat )
 {
     assert( owner_size >= sizeof(encoder_t) );
-    return vlc_custom_create( p_this, owner_size, "encoder" );
+    const char caps[ES_CATEGORY_COUNT][16] = {
+        [VIDEO_ES] = "encoder",
+        [AUDIO_ES] = "encoder",
+        [SPU_ES]   = "encoder",
+    };
+    return vlc_custom_create( p_this, owner_size, caps[i_cat] );
 }
-- 
2.29.2



More information about the vlc-devel mailing list