Mercurial > mplayer.hg
comparison command.c @ 30082:446f2ea148a4
Return the actually playing audio/video id for get_property, not the one
selected e.g. via commandline (which resulted in -1 being returned most of
the time).
author | reimar |
---|---|
date | Sun, 27 Dec 2009 14:13:06 +0000 |
parents | 3cfe91f729d7 |
children | 4752e3cbe7be |
comparison
equal
deleted
inserted
replaced
30081:1b18cf7e6abe | 30082:446f2ea148a4 |
---|---|
793 | 793 |
794 /// Selected audio id (RW) | 794 /// Selected audio id (RW) |
795 static int mp_property_audio(m_option_t * prop, int action, void *arg, | 795 static int mp_property_audio(m_option_t * prop, int action, void *arg, |
796 MPContext * mpctx) | 796 MPContext * mpctx) |
797 { | 797 { |
798 int current_id = -1, tmp; | 798 int current_id, tmp; |
799 if (!mpctx->demuxer || !mpctx->demuxer->audio) | 799 if (!mpctx->demuxer || !mpctx->demuxer->audio) |
800 return M_PROPERTY_UNAVAILABLE; | 800 return M_PROPERTY_UNAVAILABLE; |
801 current_id = mpctx->demuxer->audio->id; | |
801 | 802 |
802 switch (action) { | 803 switch (action) { |
803 case M_PROPERTY_GET: | 804 case M_PROPERTY_GET: |
804 if (!arg) | 805 if (!arg) |
805 return M_PROPERTY_ERROR; | 806 return M_PROPERTY_ERROR; |
806 *(int *) arg = audio_id; | 807 *(int *) arg = current_id; |
807 return M_PROPERTY_OK; | 808 return M_PROPERTY_OK; |
808 case M_PROPERTY_PRINT: | 809 case M_PROPERTY_PRINT: |
809 if (!arg) | 810 if (!arg) |
810 return M_PROPERTY_ERROR; | 811 return M_PROPERTY_ERROR; |
811 | 812 |
812 if (audio_id < 0) | 813 if (current_id < 0) |
813 *(char **) arg = strdup(MSGTR_Disabled); | 814 *(char **) arg = strdup(MSGTR_Disabled); |
814 else { | 815 else { |
815 char lang[40] = MSGTR_Unknown; | 816 char lang[40] = MSGTR_Unknown; |
816 sh_audio_t* sh = mpctx->sh_audio; | 817 sh_audio_t* sh = mpctx->sh_audio; |
817 if (sh && sh->lang) | 818 if (sh && sh->lang) |
818 av_strlcpy(lang, sh->lang, 40); | 819 av_strlcpy(lang, sh->lang, 40); |
819 #ifdef CONFIG_DVDREAD | 820 #ifdef CONFIG_DVDREAD |
820 else if (mpctx->stream->type == STREAMTYPE_DVD) { | 821 else if (mpctx->stream->type == STREAMTYPE_DVD) { |
821 int code = dvd_lang_from_aid(mpctx->stream, audio_id); | 822 int code = dvd_lang_from_aid(mpctx->stream, current_id); |
822 if (code) { | 823 if (code) { |
823 lang[0] = code >> 8; | 824 lang[0] = code >> 8; |
824 lang[1] = code; | 825 lang[1] = code; |
825 lang[2] = 0; | 826 lang[2] = 0; |
826 } | 827 } |
827 } | 828 } |
828 #endif | 829 #endif |
829 | 830 |
830 #ifdef CONFIG_DVDNAV | 831 #ifdef CONFIG_DVDNAV |
831 else if (mpctx->stream->type == STREAMTYPE_DVDNAV) | 832 else if (mpctx->stream->type == STREAMTYPE_DVDNAV) |
832 mp_dvdnav_lang_from_aid(mpctx->stream, audio_id, lang); | 833 mp_dvdnav_lang_from_aid(mpctx->stream, current_id, lang); |
833 #endif | 834 #endif |
834 *(char **) arg = malloc(64); | 835 *(char **) arg = malloc(64); |
835 snprintf(*(char **) arg, 64, "(%d) %s", audio_id, lang); | 836 snprintf(*(char **) arg, 64, "(%d) %s", current_id, lang); |
836 } | 837 } |
837 return M_PROPERTY_OK; | 838 return M_PROPERTY_OK; |
838 | 839 |
839 case M_PROPERTY_STEP_UP: | 840 case M_PROPERTY_STEP_UP: |
840 case M_PROPERTY_SET: | 841 case M_PROPERTY_SET: |
841 if (action == M_PROPERTY_SET && arg) | 842 if (action == M_PROPERTY_SET && arg) |
842 tmp = *((int *) arg); | 843 tmp = *((int *) arg); |
843 else | 844 else |
844 tmp = -1; | 845 tmp = -1; |
845 current_id = mpctx->demuxer->audio->id; | |
846 audio_id = demuxer_switch_audio(mpctx->demuxer, tmp); | 846 audio_id = demuxer_switch_audio(mpctx->demuxer, tmp); |
847 if (audio_id == -2 | 847 if (audio_id == -2 |
848 || (audio_id > -1 | 848 || (audio_id > -1 |
849 && mpctx->demuxer->audio->id != current_id && current_id != -2)) | 849 && mpctx->demuxer->audio->id != current_id && current_id != -2)) |
850 uninit_player(INITIALIZED_AO | INITIALIZED_ACODEC); | 850 uninit_player(INITIALIZED_AO | INITIALIZED_ACODEC); |
867 | 867 |
868 /// Selected video id (RW) | 868 /// Selected video id (RW) |
869 static int mp_property_video(m_option_t * prop, int action, void *arg, | 869 static int mp_property_video(m_option_t * prop, int action, void *arg, |
870 MPContext * mpctx) | 870 MPContext * mpctx) |
871 { | 871 { |
872 int current_id = -1, tmp; | 872 int current_id, tmp; |
873 if (!mpctx->demuxer || !mpctx->demuxer->video) | 873 if (!mpctx->demuxer || !mpctx->demuxer->video) |
874 return M_PROPERTY_UNAVAILABLE; | 874 return M_PROPERTY_UNAVAILABLE; |
875 current_id = mpctx->demuxer->video->id; | |
875 | 876 |
876 switch (action) { | 877 switch (action) { |
877 case M_PROPERTY_GET: | 878 case M_PROPERTY_GET: |
878 if (!arg) | 879 if (!arg) |
879 return M_PROPERTY_ERROR; | 880 return M_PROPERTY_ERROR; |
880 *(int *) arg = video_id; | 881 *(int *) arg = current_id; |
881 return M_PROPERTY_OK; | 882 return M_PROPERTY_OK; |
882 case M_PROPERTY_PRINT: | 883 case M_PROPERTY_PRINT: |
883 if (!arg) | 884 if (!arg) |
884 return M_PROPERTY_ERROR; | 885 return M_PROPERTY_ERROR; |
885 | 886 |
886 if (video_id < 0) | 887 if (current_id < 0) |
887 *(char **) arg = strdup(MSGTR_Disabled); | 888 *(char **) arg = strdup(MSGTR_Disabled); |
888 else { | 889 else { |
889 char lang[40] = MSGTR_Unknown; | 890 char lang[40] = MSGTR_Unknown; |
890 *(char **) arg = malloc(64); | 891 *(char **) arg = malloc(64); |
891 snprintf(*(char **) arg, 64, "(%d) %s", video_id, lang); | 892 snprintf(*(char **) arg, 64, "(%d) %s", current_id, lang); |
892 } | 893 } |
893 return M_PROPERTY_OK; | 894 return M_PROPERTY_OK; |
894 | 895 |
895 case M_PROPERTY_STEP_UP: | 896 case M_PROPERTY_STEP_UP: |
896 case M_PROPERTY_SET: | 897 case M_PROPERTY_SET: |
897 if (action == M_PROPERTY_SET && arg) | 898 if (action == M_PROPERTY_SET && arg) |
898 tmp = *((int *) arg); | 899 tmp = *((int *) arg); |
899 else | 900 else |
900 tmp = -1; | 901 tmp = -1; |
901 current_id = mpctx->demuxer->video->id; | |
902 video_id = demuxer_switch_video(mpctx->demuxer, tmp); | 902 video_id = demuxer_switch_video(mpctx->demuxer, tmp); |
903 if (video_id == -2 | 903 if (video_id == -2 |
904 || (video_id > -1 && mpctx->demuxer->video->id != current_id | 904 || (video_id > -1 && mpctx->demuxer->video->id != current_id |
905 && current_id != -2)) | 905 && current_id != -2)) |
906 uninit_player(INITIALIZED_VCODEC | | 906 uninit_player(INITIALIZED_VCODEC | |