during DEMUXER_CTRL_SWITCH_x *arg set to -2 identifies 'disable stream x'
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 19 Nov 2006 23:10:30 +0000 (23:10 +0000)
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 19 Nov 2006 23:10:30 +0000 (23:10 +0000)
git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@21083 b3059339-0415-0410-9bf9-f77b7e298cf2

libmpdemux/demux_ts.c

index 54812d7..879dc42 100644 (file)
@@ -3189,13 +3189,20 @@ static int demux_ts_control(demuxer_t *demuxer, int cmd, void *arg)
        {
                case DEMUXER_CTRL_SWITCH_AUDIO:
                {
-                       sh_audio_t *sh_audio = demuxer->audio->sh;
                        sh_audio_t *sh_a = NULL;
                        int i, n;
-                       if(!sh_audio)
-                               return DEMUXER_CTRL_NOTIMPL;
                        
                        n = *((int*)arg);
+                       if(n == -2)
+                       {
+                               reset_fifos(priv, 1, 0, 0);
+                               demuxer->audio->id = -2;
+                               demuxer->audio->sh = NULL;
+                               ds_free_packs(demuxer->audio);
+                               *((int*)arg) = demuxer->audio->id;
+                               return DEMUXER_CTRL_OK;
+                       }
+
                        if(n < 0)
                        {
                                for(i = 0; i < 8192; i++)
@@ -3243,13 +3250,20 @@ static int demux_ts_control(demuxer_t *demuxer, int cmd, void *arg)
                
                case DEMUXER_CTRL_SWITCH_VIDEO:
                {
-                       sh_video_t *sh_video = demuxer->video->sh;
                        sh_video_t *sh_v = NULL;
                        int i, n;
-                       if(!sh_video)
-                               return DEMUXER_CTRL_NOTIMPL;
                        
                        n = *((int*)arg);
+                       if(n == -2)
+                       {
+                               reset_fifos(priv, 0, 1, 0);
+                               demuxer->video->id = -2;
+                               demuxer->video->sh = NULL;
+                               ds_free_packs(demuxer->video);
+                               *((int*)arg) = demuxer->video->id;
+                               return DEMUXER_CTRL_OK;
+                       }
+
                        if(n < 0)
                        {
                                for(i = 0; i < 8192; i++)