[vlc-devel] [RFC PATCH] lib/media_player: don't terminate resources from stop

Thomas Guillem thomas at gllm.fr
Wed Mar 8 09:45:00 CET 2017


Terminate the resources only when the media_player is released (like the
playlist terminates the resources when it's deactivated). This allows to keep
the same aout module during one mediaplayer lifetime.

Prior to this change, libvlc users had to re-set the prefered audio device
after each call of stop because the aout module was destroyed.
---
 lib/media_player.c                | 1 -
 modules/audio_output/audiotrack.c | 8 +++++++-
 modules/audio_output/pulse.c      | 1 +
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/media_player.c b/lib/media_player.c
index 1ed1d84c15..901d82292e 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -1054,7 +1054,6 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi )
         libvlc_event_send( p_mi->p_event_manager, &event );
     }
 
-    input_resource_Terminate( p_mi->input.p_resource );
     unlock_input(p_mi);
 }
 
diff --git a/modules/audio_output/audiotrack.c b/modules/audio_output/audiotrack.c
index 24cb527e43..a0d3443209 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -952,9 +952,13 @@ StartPassthrough( JNIEnv *env, audio_output_t *p_aout )
         switch( p_sys->fmt.i_format )
         {
             case VLC_CODEC_DTS:
-                if( b_dtshd )
+                if( b_dtshd && p_sys->fmt.i_rate >= 48000 )
                 {
+                    p_sys->fmt.i_rate = 192000;
+                    p_sys->fmt.i_bytes_per_frame = 16;
                 }
+                else
+                    p_sys->fmt.i_bytes_per_frame = 4;
                 break;
             case VLC_CODEC_EAC3:
                 p_sys->fmt.i_rate = 192000;
@@ -1002,6 +1006,7 @@ StartPassthrough( JNIEnv *env, audio_output_t *p_aout )
     else
         p_sys->b_passthrough = true;
 
+    p_sys->fmt.i_rate = 768000;
     return i_ret;
 }
 
@@ -1943,6 +1948,7 @@ Open( vlc_object_t *obj )
 static void
 Close( vlc_object_t *obj )
 {
+fprintf(stderr, "Close ? whyme?\n");
     audio_output_t *p_aout = (audio_output_t *) obj;
     aout_sys_t *p_sys = p_aout->sys;
 
diff --git a/modules/audio_output/pulse.c b/modules/audio_output/pulse.c
index 38a0d6624e..83e9834f39 100644
--- a/modules/audio_output/pulse.c
+++ b/modules/audio_output/pulse.c
@@ -1038,6 +1038,7 @@ static int Open(vlc_object_t *obj)
 
 static void Close(vlc_object_t *obj)
 {
+fprintf(stderr, "Close ? whyme?\n");
     audio_output_t *aout = (audio_output_t *)obj;
     aout_sys_t *sys = aout->sys;
     pa_context *ctx = sys->context;
-- 
2.11.0



More information about the vlc-devel mailing list