[vlc-devel] [PATCH 03/12] transcode: video: implement the get_device to provide a decoder device to the decoder
Steve Lhomme
robux4 at ycbcr.xyz
Mon Dec 2 14:26:10 CET 2019
The decoder device is created with a NULL window. This can work with some
decoder devices but in some case none will be created and we just get NULL.
---
modules/stream_out/transcode/transcode.h | 1 +
modules/stream_out/transcode/video.c | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/modules/stream_out/transcode/transcode.h b/modules/stream_out/transcode/transcode.h
index a704a61f455..1090d57c1b5 100644
--- a/modules/stream_out/transcode/transcode.h
+++ b/modules/stream_out/transcode/transcode.h
@@ -129,6 +129,7 @@ struct sout_stream_id_sys_t
vlc_blender_t *p_spu_blender;
spu_t *p_spu;
video_format_t fmt_input_video;
+ vlc_decoder_device *dec_dev;
};
struct
{
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index 9fe58696c53..6e79817d3b4 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -60,6 +60,16 @@ static const video_format_t* filtered_video_format( sout_stream_id_sys_t *id,
return &p_pic->format;
}
+static vlc_decoder_device * video_get_decoder_device( decoder_t *p_dec )
+{
+ struct decoder_owner *p_owner = dec_get_owner( p_dec );
+ if (p_owner->id->dec_dev == NULL)
+ {
+ p_owner->id->dec_dev = vlc_decoder_device_Create( p_dec, NULL );
+ }
+ return p_owner->id->dec_dev ? vlc_decoder_device_Hold(p_owner->id->dec_dev) : NULL;
+}
+
static void debug_format( sout_stream_t *p_stream, const es_format_t *fmt )
{
msg_Dbg( p_stream, "format now %4.4s/%4.4s %dx%d(%dx%d) ΓΈ%d",
@@ -163,6 +173,7 @@ int transcode_video_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
static const struct decoder_owner_callbacks dec_cbs =
{
.video = {
+ .get_device = video_get_decoder_device,
.format_update = video_update_format_decoder,
.queue = decoder_queue_video,
},
@@ -395,6 +406,8 @@ void transcode_video_clean( sout_stream_t *p_stream,
filter_DeleteBlend( id->p_spu_blender );
if( id->p_spu )
spu_Destroy( id->p_spu );
+ if ( id->dec_dev )
+ vlc_decoder_device_Release( id->dec_dev );
}
void transcode_video_push_spu( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
--
2.17.1
More information about the vlc-devel
mailing list