comparison mplayer.c @ 20975:de18de0c8718

consistently use M_PROPERTY_ERROR/M_PROPERTY_OK as return values.
author reimar
date Fri, 17 Nov 2006 19:03:53 +0000
parents 123cdf4a0f73
children 8aebf806a476
comparison
equal deleted inserted replaced
20974:123cdf4a0f73 20975:de18de0c8718
1535 1535
1536 /// Playback speed (RW) 1536 /// Playback speed (RW)
1537 static int mp_property_playback_speed(m_option_t* prop,int action,void* arg) { 1537 static int mp_property_playback_speed(m_option_t* prop,int action,void* arg) {
1538 switch(action) { 1538 switch(action) {
1539 case M_PROPERTY_SET: 1539 case M_PROPERTY_SET:
1540 if(!arg) return 0; 1540 if(!arg) return M_PROPERTY_ERROR;
1541 M_PROPERTY_CLAMP(prop,*(float*)arg); 1541 M_PROPERTY_CLAMP(prop,*(float*)arg);
1542 playback_speed = *(float*)arg; 1542 playback_speed = *(float*)arg;
1543 build_afilter_chain(sh_audio, &ao_data); 1543 build_afilter_chain(sh_audio, &ao_data);
1544 return 1; 1544 return M_PROPERTY_OK;
1545 case M_PROPERTY_STEP_UP: 1545 case M_PROPERTY_STEP_UP:
1546 case M_PROPERTY_STEP_DOWN: 1546 case M_PROPERTY_STEP_DOWN:
1547 playback_speed += (arg ? *(float*)arg : 0.1) * 1547 playback_speed += (arg ? *(float*)arg : 0.1) *
1548 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); 1548 (action == M_PROPERTY_STEP_DOWN ? -1 : 1);
1549 M_PROPERTY_CLAMP(prop,playback_speed); 1549 M_PROPERTY_CLAMP(prop,playback_speed);
1550 build_afilter_chain(sh_audio, &ao_data); 1550 build_afilter_chain(sh_audio, &ao_data);
1551 return 1; 1551 return M_PROPERTY_OK;
1552 } 1552 }
1553 return m_property_float_range(prop,action,arg,&playback_speed); 1553 return m_property_float_range(prop,action,arg,&playback_speed);
1554 } 1554 }
1555 1555
1556 /// filename with path (RO) 1556 /// filename with path (RO)
1632 !(int)(len = demuxer_get_time_length(demuxer))) 1632 !(int)(len = demuxer_get_time_length(demuxer)))
1633 return M_PROPERTY_UNAVAILABLE; 1633 return M_PROPERTY_UNAVAILABLE;
1634 1634
1635 switch(action) { 1635 switch(action) {
1636 case M_PROPERTY_PRINT: 1636 case M_PROPERTY_PRINT:
1637 if(!arg) return 0; 1637 if(!arg) return M_PROPERTY_ERROR;
1638 else { 1638 else {
1639 int h, m, s = len; 1639 int h, m, s = len;
1640 h = s/3600; 1640 h = s/3600;
1641 s -= h*3600; 1641 s -= h*3600;
1642 m = s/60; 1642 m = s/60;
1643 s -= m*60; 1643 s -= m*60;
1644 *(char**)arg = malloc(20); 1644 *(char**)arg = malloc(20);
1645 if(h > 0) sprintf(*(char**)arg,"%d:%02d:%02d",h,m,s); 1645 if(h > 0) sprintf(*(char**)arg,"%d:%02d:%02d",h,m,s);
1646 else if(m > 0) sprintf(*(char**)arg,"%d:%02d",m,s); 1646 else if(m > 0) sprintf(*(char**)arg,"%d:%02d",m,s);
1647 else sprintf(*(char**)arg,"%d",s); 1647 else sprintf(*(char**)arg,"%d",s);
1648 return 1; 1648 return M_PROPERTY_OK;
1649 } 1649 }
1650 break; 1650 break;
1651 } 1651 }
1652 return m_property_double_ro(prop,action,arg,len); 1652 return m_property_double_ro(prop,action,arg,len);
1653 } 1653 }
1663 1663
1664 if(!sh_audio) return M_PROPERTY_UNAVAILABLE; 1664 if(!sh_audio) return M_PROPERTY_UNAVAILABLE;
1665 1665
1666 switch(action) { 1666 switch(action) {
1667 case M_PROPERTY_GET: 1667 case M_PROPERTY_GET:
1668 if(!arg) return 0; 1668 if(!arg) return M_PROPERTY_ERROR;
1669 mixer_getbothvolume(&mixer,arg); 1669 mixer_getbothvolume(&mixer,arg);
1670 return 1; 1670 return M_PROPERTY_OK;
1671 case M_PROPERTY_PRINT:{ 1671 case M_PROPERTY_PRINT:{
1672 float vol; 1672 float vol;
1673 if(!arg) return 0; 1673 if(!arg) return M_PROPERTY_ERROR;
1674 mixer_getbothvolume(&mixer,&vol); 1674 mixer_getbothvolume(&mixer,&vol);
1675 return m_property_float_range(prop,action,arg,&vol); 1675 return m_property_float_range(prop,action,arg,&vol);
1676 } 1676 }
1677 case M_PROPERTY_STEP_UP: 1677 case M_PROPERTY_STEP_UP:
1678 case M_PROPERTY_STEP_DOWN: 1678 case M_PROPERTY_STEP_DOWN:
1685 if (edl_muted) return M_PROPERTY_DISABLED; 1685 if (edl_muted) return M_PROPERTY_DISABLED;
1686 user_muted = 0; 1686 user_muted = 0;
1687 1687
1688 switch(action) { 1688 switch(action) {
1689 case M_PROPERTY_SET: 1689 case M_PROPERTY_SET:
1690 if(!arg) return 0; 1690 if(!arg) return M_PROPERTY_ERROR;
1691 M_PROPERTY_CLAMP(prop,*(float*)arg); 1691 M_PROPERTY_CLAMP(prop,*(float*)arg);
1692 mixer_setvolume(&mixer,*(float*)arg,*(float*)arg); 1692 mixer_setvolume(&mixer,*(float*)arg,*(float*)arg);
1693 return 1; 1693 return M_PROPERTY_OK;
1694 case M_PROPERTY_STEP_UP: 1694 case M_PROPERTY_STEP_UP:
1695 if(arg && *(float*)arg <= 0) 1695 if(arg && *(float*)arg <= 0)
1696 mixer_decvolume(&mixer); 1696 mixer_decvolume(&mixer);
1697 else 1697 else
1698 mixer_incvolume(&mixer); 1698 mixer_incvolume(&mixer);
1699 return 1; 1699 return M_PROPERTY_OK;
1700 case M_PROPERTY_STEP_DOWN: 1700 case M_PROPERTY_STEP_DOWN:
1701 if(arg && *(float*)arg <= 0) 1701 if(arg && *(float*)arg <= 0)
1702 mixer_incvolume(&mixer); 1702 mixer_incvolume(&mixer);
1703 else 1703 else
1704 mixer_decvolume(&mixer); 1704 mixer_decvolume(&mixer);
1705 return 1; 1705 return M_PROPERTY_OK;
1706 } 1706 }
1707 return M_PROPERTY_NOT_IMPLEMENTED; 1707 return M_PROPERTY_NOT_IMPLEMENTED;
1708 } 1708 }
1709 1709
1710 /// Mute (RW) 1710 /// Mute (RW)
1713 if(!sh_audio) return M_PROPERTY_UNAVAILABLE; 1713 if(!sh_audio) return M_PROPERTY_UNAVAILABLE;
1714 1714
1715 switch(action) { 1715 switch(action) {
1716 case M_PROPERTY_SET: 1716 case M_PROPERTY_SET:
1717 if(edl_muted) return M_PROPERTY_DISABLED; 1717 if(edl_muted) return M_PROPERTY_DISABLED;
1718 if(!arg) return 0; 1718 if(!arg) return M_PROPERTY_ERROR;
1719 if((!!*(int*)arg) != mixer.muted) 1719 if((!!*(int*)arg) != mixer.muted)
1720 mixer_mute(&mixer); 1720 mixer_mute(&mixer);
1721 user_muted = mixer.muted; 1721 user_muted = mixer.muted;
1722 return 1; 1722 return M_PROPERTY_OK;
1723 case M_PROPERTY_STEP_UP: 1723 case M_PROPERTY_STEP_UP:
1724 case M_PROPERTY_STEP_DOWN: 1724 case M_PROPERTY_STEP_DOWN:
1725 if(edl_muted) return M_PROPERTY_DISABLED; 1725 if(edl_muted) return M_PROPERTY_DISABLED;
1726 mixer_mute(&mixer); 1726 mixer_mute(&mixer);
1727 user_muted = mixer.muted; 1727 user_muted = mixer.muted;
1728 return 1; 1728 return M_PROPERTY_OK;
1729 case M_PROPERTY_PRINT: 1729 case M_PROPERTY_PRINT:
1730 if(!arg) return 0; 1730 if(!arg) return M_PROPERTY_ERROR;
1731 if(edl_muted) { 1731 if(edl_muted) {
1732 *(char**)arg = strdup(MSGTR_EnabledEdl); 1732 *(char**)arg = strdup(MSGTR_EnabledEdl);
1733 return 1; 1733 return M_PROPERTY_OK;
1734 } 1734 }
1735 default: 1735 default:
1736 return m_property_flag(prop,action,arg,&mixer.muted); 1736 return m_property_flag(prop,action,arg,&mixer.muted);
1737 1737
1738 } 1738 }
1743 if(!(sh_audio && sh_video)) return M_PROPERTY_UNAVAILABLE; 1743 if(!(sh_audio && sh_video)) return M_PROPERTY_UNAVAILABLE;
1744 switch(action) { 1744 switch(action) {
1745 case M_PROPERTY_SET: 1745 case M_PROPERTY_SET:
1746 case M_PROPERTY_STEP_UP: 1746 case M_PROPERTY_STEP_UP:
1747 case M_PROPERTY_STEP_DOWN: 1747 case M_PROPERTY_STEP_DOWN:
1748 if(!arg) return 0; 1748 if(!arg) return M_PROPERTY_ERROR;
1749 else { 1749 else {
1750 float delay = audio_delay; 1750 float delay = audio_delay;
1751 m_property_delay(prop,action,arg,&audio_delay); 1751 m_property_delay(prop,action,arg,&audio_delay);
1752 if(sh_audio) sh_audio->delay -= audio_delay-delay; 1752 if(sh_audio) sh_audio->delay -= audio_delay-delay;
1753 } 1753 }
1754 return 1; 1754 return M_PROPERTY_OK;
1755 default: 1755 default:
1756 return m_property_delay(prop,action,arg,&audio_delay); 1756 return m_property_delay(prop,action,arg,&audio_delay);
1757 } 1757 }
1758 } 1758 }
1759 1759
1778 /// Number of channels (RO) 1778 /// Number of channels (RO)
1779 static int mp_property_channels(m_option_t* prop,int action,void* arg) { 1779 static int mp_property_channels(m_option_t* prop,int action,void* arg) {
1780 if(!sh_audio) return M_PROPERTY_UNAVAILABLE; 1780 if(!sh_audio) return M_PROPERTY_UNAVAILABLE;
1781 switch(action) { 1781 switch(action) {
1782 case M_PROPERTY_PRINT: 1782 case M_PROPERTY_PRINT:
1783 if(!arg) return 0; 1783 if(!arg) return M_PROPERTY_ERROR;
1784 switch(sh_audio->channels) { 1784 switch(sh_audio->channels) {
1785 case 1: *(char**)arg = strdup("mono"); break; 1785 case 1: *(char**)arg = strdup("mono"); break;
1786 case 2: *(char**)arg = strdup("stereo"); break; 1786 case 2: *(char**)arg = strdup("stereo"); break;
1787 default: 1787 default:
1788 *(char**)arg = malloc(32); 1788 *(char**)arg = malloc(32);
1789 sprintf(*(char**)arg,"%d channels",sh_audio->channels); 1789 sprintf(*(char**)arg,"%d channels",sh_audio->channels);
1790 } 1790 }
1791 return 1; 1791 return M_PROPERTY_OK;
1792 } 1792 }
1793 return m_property_int_ro(prop,action,arg,sh_audio->channels); 1793 return m_property_int_ro(prop,action,arg,sh_audio->channels);
1794 } 1794 }
1795 1795
1796 /// Selected audio id (RW) 1796 /// Selected audio id (RW)
1799 1799
1800 if(!sh_audio) return M_PROPERTY_UNAVAILABLE; 1800 if(!sh_audio) return M_PROPERTY_UNAVAILABLE;
1801 1801
1802 switch(action) { 1802 switch(action) {
1803 case M_PROPERTY_GET: 1803 case M_PROPERTY_GET:
1804 if(!arg) return 0; 1804 if(!arg) return M_PROPERTY_ERROR;
1805 *(int*)arg = audio_id; 1805 *(int*)arg = audio_id;
1806 return 1; 1806 return M_PROPERTY_OK;
1807 case M_PROPERTY_PRINT: 1807 case M_PROPERTY_PRINT:
1808 if(!arg) return 0; 1808 if(!arg) return M_PROPERTY_ERROR;
1809 1809
1810 if (audio_id < 0) 1810 if (audio_id < 0)
1811 *(char**)arg = strdup(MSGTR_Disabled); 1811 *(char**)arg = strdup(MSGTR_Disabled);
1812 else { 1812 else {
1813 char lang[40] = MSGTR_Unknown; 1813 char lang[40] = MSGTR_Unknown;
1824 } 1824 }
1825 #endif 1825 #endif
1826 *(char**)arg = malloc(64); 1826 *(char**)arg = malloc(64);
1827 snprintf(*(char**)arg, 64, "(%d) %s", audio_id, lang); 1827 snprintf(*(char**)arg, 64, "(%d) %s", audio_id, lang);
1828 } 1828 }
1829 return 1; 1829 return M_PROPERTY_OK;
1830 1830
1831 case M_PROPERTY_STEP_UP: 1831 case M_PROPERTY_STEP_UP:
1832 current_id = demuxer->audio->id; 1832 current_id = demuxer->audio->id;
1833 audio_id = demuxer_switch_audio(demuxer, -1); 1833 audio_id = demuxer_switch_audio(demuxer, -1);
1834 if(audio_id > -1 && demuxer->audio->id != current_id) { 1834 if(audio_id > -1 && demuxer->audio->id != current_id) {
1840 sh_audio = sh2; 1840 sh_audio = sh2;
1841 reinit_audio_chain(); 1841 reinit_audio_chain();
1842 } 1842 }
1843 } 1843 }
1844 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_TRACK=%d\n", audio_id); 1844 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_TRACK=%d\n", audio_id);
1845 break; 1845 return M_PROPERTY_OK;
1846 default: 1846 default:
1847 return M_PROPERTY_NOT_IMPLEMENTED; 1847 return M_PROPERTY_NOT_IMPLEMENTED;
1848 } 1848 }
1849 1849
1850 return 1;
1851 } 1850 }
1852 1851
1853 static int reinit_video_chain(void); 1852 static int reinit_video_chain(void);
1854 /// Selected video id (RW) 1853 /// Selected video id (RW)
1855 static int mp_property_video(m_option_t* prop,int action,void* arg) { 1854 static int mp_property_video(m_option_t* prop,int action,void* arg) {
1857 1856
1858 if(!sh_video) return M_PROPERTY_UNAVAILABLE; 1857 if(!sh_video) return M_PROPERTY_UNAVAILABLE;
1859 1858
1860 switch(action) { 1859 switch(action) {
1861 case M_PROPERTY_GET: 1860 case M_PROPERTY_GET:
1862 if(!arg) return 0; 1861 if(!arg) return M_PROPERTY_ERROR;
1863 *(int*)arg = video_id; 1862 *(int*)arg = video_id;
1864 return 1; 1863 return M_PROPERTY_OK;
1865 case M_PROPERTY_PRINT: 1864 case M_PROPERTY_PRINT:
1866 if(!arg) return 0; 1865 if(!arg) return M_PROPERTY_ERROR;
1867 1866
1868 if (video_id < 0) 1867 if (video_id < 0)
1869 *(char**)arg = strdup(MSGTR_Disabled); 1868 *(char**)arg = strdup(MSGTR_Disabled);
1870 else { 1869 else {
1871 char lang[40] = MSGTR_Unknown; 1870 char lang[40] = MSGTR_Unknown;
1872 *(char**)arg = malloc(64); 1871 *(char**)arg = malloc(64);
1873 snprintf(*(char**)arg, 64, "(%d)", video_id, lang); 1872 snprintf(*(char**)arg, 64, "(%d)", video_id, lang);
1874 } 1873 }
1875 return 1; 1874 return M_PROPERTY_OK;
1876 1875
1877 case M_PROPERTY_STEP_UP: 1876 case M_PROPERTY_STEP_UP:
1878 current_id = demuxer->video->id; 1877 current_id = demuxer->video->id;
1879 video_id = demuxer_switch_video(demuxer, -1); 1878 video_id = demuxer_switch_video(demuxer, -1);
1880 if(video_id > -1 && demuxer->video->id != current_id) { 1879 if(video_id > -1 && demuxer->video->id != current_id) {
1886 sh_video = sh2; 1885 sh_video = sh2;
1887 reinit_video_chain(); 1886 reinit_video_chain();
1888 } 1887 }
1889 } 1888 }
1890 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_TRACK=%d\n", video_id); 1889 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_TRACK=%d\n", video_id);
1891 1890 return M_PROPERTY_OK;
1892 break; 1891
1893 default: 1892 default:
1894 return M_PROPERTY_NOT_IMPLEMENTED; 1893 return M_PROPERTY_NOT_IMPLEMENTED;
1895 } 1894 }
1896
1897 return 1;
1898 } 1895 }
1899 1896
1900 ///@} 1897 ///@}
1901 1898
1902 /// \defgroup VideoProperties Video properties 1899 /// \defgroup VideoProperties Video properties
1908 1905
1909 if(!video_out) return M_PROPERTY_UNAVAILABLE; 1906 if(!video_out) return M_PROPERTY_UNAVAILABLE;
1910 1907
1911 switch(action) { 1908 switch(action) {
1912 case M_PROPERTY_SET: 1909 case M_PROPERTY_SET:
1913 if(!arg) return 0; 1910 if(!arg) return M_PROPERTY_ERROR;
1914 M_PROPERTY_CLAMP(prop,*(int*)arg); 1911 M_PROPERTY_CLAMP(prop,*(int*)arg);
1915 if(vo_fs == !!*(int*)arg) return 1; 1912 if(vo_fs == !!*(int*)arg) return M_PROPERTY_OK;
1916 case M_PROPERTY_STEP_UP: 1913 case M_PROPERTY_STEP_UP:
1917 case M_PROPERTY_STEP_DOWN: 1914 case M_PROPERTY_STEP_DOWN:
1918 #ifdef HAVE_NEW_GUI 1915 #ifdef HAVE_NEW_GUI
1919 if(use_gui) guiGetEvent(guiIEvent,(char*)MP_CMD_GUI_FULLSCREEN); 1916 if(use_gui) guiGetEvent(guiIEvent,(char*)MP_CMD_GUI_FULLSCREEN);
1920 else 1917 else
1921 #endif 1918 #endif
1922 if(vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); 1919 if(vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0);
1923 return 1; 1920 return M_PROPERTY_OK;
1924 default: 1921 default:
1925 return m_property_flag(prop,action,arg,&vo_fs); 1922 return m_property_flag(prop,action,arg,&vo_fs);
1926 } 1923 }
1927 } 1924 }
1928 1925
1955 if(!video_out || video_out->control(VOCTRL_GET_PANSCAN,NULL ) != VO_TRUE) 1952 if(!video_out || video_out->control(VOCTRL_GET_PANSCAN,NULL ) != VO_TRUE)
1956 return M_PROPERTY_UNAVAILABLE; 1953 return M_PROPERTY_UNAVAILABLE;
1957 1954
1958 switch(action) { 1955 switch(action) {
1959 case M_PROPERTY_SET: 1956 case M_PROPERTY_SET:
1960 if(!arg) return 0; 1957 if(!arg) return M_PROPERTY_ERROR;
1961 M_PROPERTY_CLAMP(prop,*(float*)arg); 1958 M_PROPERTY_CLAMP(prop,*(float*)arg);
1962 vo_panscan = *(float*)arg; 1959 vo_panscan = *(float*)arg;
1963 video_out->control(VOCTRL_SET_PANSCAN,NULL); 1960 video_out->control(VOCTRL_SET_PANSCAN,NULL);
1964 return 1; 1961 return M_PROPERTY_OK;
1965 case M_PROPERTY_STEP_UP: 1962 case M_PROPERTY_STEP_UP:
1966 case M_PROPERTY_STEP_DOWN: 1963 case M_PROPERTY_STEP_DOWN:
1967 vo_panscan += (arg ? *(float*)arg : 0.1) * 1964 vo_panscan += (arg ? *(float*)arg : 0.1) *
1968 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); 1965 (action == M_PROPERTY_STEP_DOWN ? -1 : 1);
1969 if(vo_panscan > 1) vo_panscan = 1; 1966 if(vo_panscan > 1) vo_panscan = 1;
1970 else if(vo_panscan < 0) vo_panscan = 0; 1967 else if(vo_panscan < 0) vo_panscan = 0;
1971 video_out->control(VOCTRL_SET_PANSCAN,NULL); 1968 video_out->control(VOCTRL_SET_PANSCAN,NULL);
1972 return 1; 1969 return M_PROPERTY_OK;
1973 default: 1970 default:
1974 return m_property_float_range(prop,action,arg,&vo_panscan); 1971 return m_property_float_range(prop,action,arg,&vo_panscan);
1975 } 1972 }
1976 } 1973 }
1977 1974
1983 1980
1984 if(!video_out) return M_PROPERTY_UNAVAILABLE; 1981 if(!video_out) return M_PROPERTY_UNAVAILABLE;
1985 1982
1986 switch(action) { 1983 switch(action) {
1987 case M_PROPERTY_SET: 1984 case M_PROPERTY_SET:
1988 if(!arg) return 0; 1985 if(!arg) return M_PROPERTY_ERROR;
1989 M_PROPERTY_CLAMP(prop,*(int*)arg); 1986 M_PROPERTY_CLAMP(prop,*(int*)arg);
1990 if(*vo_var == !!*(int*)arg) return 1; 1987 if(*vo_var == !!*(int*)arg) return M_PROPERTY_OK;
1991 case M_PROPERTY_STEP_UP: 1988 case M_PROPERTY_STEP_UP:
1992 case M_PROPERTY_STEP_DOWN: 1989 case M_PROPERTY_STEP_DOWN:
1993 if(vo_config_count) video_out->control(vo_ctrl, 0); 1990 if(vo_config_count) video_out->control(vo_ctrl, 0);
1994 return 1; 1991 return M_PROPERTY_OK;
1995 default: 1992 default:
1996 return m_property_flag(prop,action,arg,vo_var); 1993 return m_property_flag(prop,action,arg,vo_var);
1997 } 1994 }
1998 } 1995 }
1999 1996
2017 2014
2018 if(!sh_video) return M_PROPERTY_UNAVAILABLE; 2015 if(!sh_video) return M_PROPERTY_UNAVAILABLE;
2019 2016
2020 switch(action) { 2017 switch(action) {
2021 case M_PROPERTY_PRINT: 2018 case M_PROPERTY_PRINT:
2022 if(!arg) return 0; 2019 if(!arg) return M_PROPERTY_ERROR;
2023 *(char**)arg = strdup(frame_dropping == 1 ? MSGTR_Enabled : 2020 *(char**)arg = strdup(frame_dropping == 1 ? MSGTR_Enabled :
2024 (frame_dropping == 2 ? MSGTR_HardFrameDrop : MSGTR_Disabled)); 2021 (frame_dropping == 2 ? MSGTR_HardFrameDrop : MSGTR_Disabled));
2025 return 1; 2022 return M_PROPERTY_OK;
2026 default: 2023 default:
2027 return m_property_choice(prop,action,arg,&frame_dropping); 2024 return m_property_choice(prop,action,arg,&frame_dropping);
2028 } 2025 }
2029 } 2026 }
2030 2027
2039 get_video_colors (sh_video, prop->name, gamma); 2036 get_video_colors (sh_video, prop->name, gamma);
2040 } 2037 }
2041 2038
2042 switch(action) { 2039 switch(action) {
2043 case M_PROPERTY_SET: 2040 case M_PROPERTY_SET:
2044 if(!arg) return 0; 2041 if(!arg) return M_PROPERTY_ERROR;
2045 M_PROPERTY_CLAMP(prop,*(int*)arg); 2042 M_PROPERTY_CLAMP(prop,*(int*)arg);
2046 *gamma = *(int*)arg; 2043 *gamma = *(int*)arg;
2047 r = set_video_colors(sh_video, prop->name, *gamma); 2044 r = set_video_colors(sh_video, prop->name, *gamma);
2048 if(r <= 0) break; 2045 if(r <= 0) break;
2049 return r; 2046 return r;
2050 case M_PROPERTY_GET: 2047 case M_PROPERTY_GET:
2051 if(!arg) return 0; 2048 if(!arg) return M_PROPERTY_ERROR;
2052 r = get_video_colors (sh_video, prop->name, arg); 2049 r = get_video_colors (sh_video, prop->name, arg);
2053 if(r <= 0) break; 2050 if(r <= 0) break;
2054 return r; 2051 return r;
2055 case M_PROPERTY_STEP_UP: 2052 case M_PROPERTY_STEP_UP:
2056 case M_PROPERTY_STEP_DOWN: 2053 case M_PROPERTY_STEP_DOWN:
2128 #ifdef USE_SUB 2125 #ifdef USE_SUB
2129 if(!sh_video) return M_PROPERTY_UNAVAILABLE; 2126 if(!sh_video) return M_PROPERTY_UNAVAILABLE;
2130 2127
2131 switch(action) { 2128 switch(action) {
2132 case M_PROPERTY_SET: 2129 case M_PROPERTY_SET:
2133 if(!arg) return 0; 2130 if(!arg) return M_PROPERTY_ERROR;
2134 case M_PROPERTY_STEP_UP: 2131 case M_PROPERTY_STEP_UP:
2135 case M_PROPERTY_STEP_DOWN: 2132 case M_PROPERTY_STEP_DOWN:
2136 vo_osd_changed(OSDTYPE_SUBTITLE); 2133 vo_osd_changed(OSDTYPE_SUBTITLE);
2137 default: 2134 default:
2138 return m_property_int_range(prop,action,arg,&sub_pos); 2135 return m_property_int_range(prop,action,arg,&sub_pos);
2149 2146
2150 if(global_sub_size <= 0) return M_PROPERTY_UNAVAILABLE; 2147 if(global_sub_size <= 0) return M_PROPERTY_UNAVAILABLE;
2151 2148
2152 switch(action) { 2149 switch(action) {
2153 case M_PROPERTY_GET: 2150 case M_PROPERTY_GET:
2154 if(!arg) return 0; 2151 if(!arg) return M_PROPERTY_ERROR;
2155 *(int*)arg = global_sub_pos; 2152 *(int*)arg = global_sub_pos;
2156 return 1; 2153 return M_PROPERTY_OK;
2157 case M_PROPERTY_PRINT: 2154 case M_PROPERTY_PRINT:
2158 if(!arg) return 0; 2155 if(!arg) return M_PROPERTY_ERROR;
2159 *(char**)arg = malloc(64); 2156 *(char**)arg = malloc(64);
2160 (*(char**)arg)[63] = 0; 2157 (*(char**)arg)[63] = 0;
2161 sub_name = 0; 2158 sub_name = 0;
2162 #ifdef USE_SUB 2159 #ifdef USE_SUB
2163 if(subdata) 2160 if(subdata)
2176 2173
2177 snprintf(*(char**)arg, 63, "(%d) %s%s", 2174 snprintf(*(char**)arg, 63, "(%d) %s%s",
2178 set_of_sub_pos + 1, 2175 set_of_sub_pos + 1,
2179 strlen(tmp) < 20 ? "" : "...", 2176 strlen(tmp) < 20 ? "" : "...",
2180 strlen(tmp) < 20 ? tmp : tmp+strlen(tmp)-19); 2177 strlen(tmp) < 20 ? tmp : tmp+strlen(tmp)-19);
2181 return 1; 2178 return M_PROPERTY_OK;
2182 } 2179 }
2183 #endif 2180 #endif
2184 if (demuxer->type == DEMUXER_TYPE_MATROSKA && dvdsub_id >= 0) { 2181 if (demuxer->type == DEMUXER_TYPE_MATROSKA && dvdsub_id >= 0) {
2185 char lang[40] = MSGTR_Unknown; 2182 char lang[40] = MSGTR_Unknown;
2186 demux_mkv_get_sub_lang(demuxer, dvdsub_id, lang, 9); 2183 demux_mkv_get_sub_lang(demuxer, dvdsub_id, lang, 9);
2187 snprintf(*(char**)arg, 63, "(%d) %s", dvdsub_id, lang); 2184 snprintf(*(char**)arg, 63, "(%d) %s", dvdsub_id, lang);
2188 return 1; 2185 return M_PROPERTY_OK;
2189 } 2186 }
2190 #ifdef HAVE_OGGVORBIS 2187 #ifdef HAVE_OGGVORBIS
2191 if (demuxer->type == DEMUXER_TYPE_OGG && d_dvdsub && dvdsub_id >= 0) { 2188 if (demuxer->type == DEMUXER_TYPE_OGG && d_dvdsub && dvdsub_id >= 0) {
2192 char *lang = demux_ogg_sub_lang(demuxer, dvdsub_id); 2189 char *lang = demux_ogg_sub_lang(demuxer, dvdsub_id);
2193 if (!lang) lang = MSGTR_Unknown; 2190 if (!lang) lang = MSGTR_Unknown;
2194 snprintf(*(char**)arg, 63, "(%d) %s", 2191 snprintf(*(char**)arg, 63, "(%d) %s",
2195 dvdsub_id, lang); 2192 dvdsub_id, lang);
2196 return 1; 2193 return M_PROPERTY_OK;
2197 } 2194 }
2198 #endif 2195 #endif
2199 if (vo_vobsub && vobsub_id >= 0) { 2196 if (vo_vobsub && vobsub_id >= 0) {
2200 const char *language = MSGTR_Unknown; 2197 const char *language = MSGTR_Unknown;
2201 language = vobsub_get_id(vo_vobsub, (unsigned int) vobsub_id); 2198 language = vobsub_get_id(vo_vobsub, (unsigned int) vobsub_id);
2202 snprintf(*(char**)arg, 63, "(%d) %s", 2199 snprintf(*(char**)arg, 63, "(%d) %s",
2203 vobsub_id, language ? language : MSGTR_Unknown); 2200 vobsub_id, language ? language : MSGTR_Unknown);
2204 return 1; 2201 return M_PROPERTY_OK;
2205 } 2202 }
2206 #ifdef USE_DVDREAD 2203 #ifdef USE_DVDREAD
2207 if (vo_spudec && dvdsub_id >= 0) { 2204 if (vo_spudec && dvdsub_id >= 0) {
2208 char lang[3]; 2205 char lang[3];
2209 int code = dvd_lang_from_sid(stream, dvdsub_id); 2206 int code = dvd_lang_from_sid(stream, dvdsub_id);
2210 lang[0] = code >> 8; 2207 lang[0] = code >> 8;
2211 lang[1] = code; 2208 lang[1] = code;
2212 lang[2] = 0; 2209 lang[2] = 0;
2213 snprintf(*(char**)arg, 63, "(%d) %s", 2210 snprintf(*(char**)arg, 63, "(%d) %s",
2214 dvdsub_id, lang); 2211 dvdsub_id, lang);
2215 return 1; 2212 return M_PROPERTY_OK;
2216 } 2213 }
2217 #endif 2214 #endif
2218 snprintf(*(char**)arg, 63, MSGTR_Disabled); 2215 snprintf(*(char**)arg, 63, MSGTR_Disabled);
2219 return 1; 2216 return M_PROPERTY_OK;
2220 2217
2221 case M_PROPERTY_SET: 2218 case M_PROPERTY_SET:
2222 if(!arg) return 0; 2219 if(!arg) return M_PROPERTY_ERROR;
2223 if(*(int*)arg < -1) *(int*)arg = -1; 2220 if(*(int*)arg < -1) *(int*)arg = -1;
2224 else if(*(int*)arg >= global_sub_size) *(int*)arg = global_sub_size-1; 2221 else if(*(int*)arg >= global_sub_size) *(int*)arg = global_sub_size-1;
2225 global_sub_pos = *(int*)arg; 2222 global_sub_pos = *(int*)arg;
2226 break; 2223 break;
2227 case M_PROPERTY_STEP_UP: 2224 case M_PROPERTY_STEP_UP:
2331 d_dvdsub->id = dvdsub_id; 2328 d_dvdsub->id = dvdsub_id;
2332 spudec_reset(vo_spudec); 2329 spudec_reset(vo_spudec);
2333 } 2330 }
2334 #endif 2331 #endif
2335 2332
2336 return 1; 2333 return M_PROPERTY_OK;
2337 } 2334 }
2338 2335
2339 /// Subtitle delay (RW) 2336 /// Subtitle delay (RW)
2340 static int mp_property_sub_delay(m_option_t* prop,int action,void* arg) { 2337 static int mp_property_sub_delay(m_option_t* prop,int action,void* arg) {
2341 if(!sh_video) return M_PROPERTY_UNAVAILABLE; 2338 if(!sh_video) return M_PROPERTY_UNAVAILABLE;
2350 if(!sh_video || global_sub_pos < 0 || sub_source() != SUB_SOURCE_SUBS) 2347 if(!sh_video || global_sub_pos < 0 || sub_source() != SUB_SOURCE_SUBS)
2351 return M_PROPERTY_UNAVAILABLE; 2348 return M_PROPERTY_UNAVAILABLE;
2352 2349
2353 switch(action) { 2350 switch(action) {
2354 case M_PROPERTY_PRINT: 2351 case M_PROPERTY_PRINT:
2355 if(!arg) return 0; 2352 if(!arg) return M_PROPERTY_ERROR;
2356 M_PROPERTY_CLAMP(prop,sub_alignment); 2353 M_PROPERTY_CLAMP(prop,sub_alignment);
2357 *(char**)arg = strdup(name[sub_alignment]); 2354 *(char**)arg = strdup(name[sub_alignment]);
2358 return 1; 2355 return M_PROPERTY_OK;
2359 case M_PROPERTY_SET: 2356 case M_PROPERTY_SET:
2360 if(!arg) return 0; 2357 if(!arg) return M_PROPERTY_ERROR;
2361 case M_PROPERTY_STEP_UP: 2358 case M_PROPERTY_STEP_UP:
2362 case M_PROPERTY_STEP_DOWN: 2359 case M_PROPERTY_STEP_DOWN:
2363 vo_osd_changed(OSDTYPE_SUBTITLE); 2360 vo_osd_changed(OSDTYPE_SUBTITLE);
2364 default: 2361 default:
2365 return m_property_choice(prop,action,arg,&sub_alignment); 2362 return m_property_choice(prop,action,arg,&sub_alignment);
2374 #ifdef USE_SUB 2371 #ifdef USE_SUB
2375 if(!sh_video) return M_PROPERTY_UNAVAILABLE; 2372 if(!sh_video) return M_PROPERTY_UNAVAILABLE;
2376 2373
2377 switch(action) { 2374 switch(action) {
2378 case M_PROPERTY_SET: 2375 case M_PROPERTY_SET:
2379 if(!arg) return 0; 2376 if(!arg) return M_PROPERTY_ERROR;
2380 case M_PROPERTY_STEP_UP: 2377 case M_PROPERTY_STEP_UP:
2381 case M_PROPERTY_STEP_DOWN: 2378 case M_PROPERTY_STEP_DOWN:
2382 vo_osd_changed(OSDTYPE_SUBTITLE); 2379 vo_osd_changed(OSDTYPE_SUBTITLE);
2383 if(vo_spudec) vo_osd_changed(OSDTYPE_SPU); 2380 if(vo_spudec) vo_osd_changed(OSDTYPE_SPU);
2384 default: 2381 default:
2393 static int mp_property_sub_forced_only(m_option_t* prop,int action,void* arg) { 2390 static int mp_property_sub_forced_only(m_option_t* prop,int action,void* arg) {
2394 if(!vo_spudec) return M_PROPERTY_UNAVAILABLE; 2391 if(!vo_spudec) return M_PROPERTY_UNAVAILABLE;
2395 2392
2396 switch(action) { 2393 switch(action) {
2397 case M_PROPERTY_SET: 2394 case M_PROPERTY_SET:
2398 if(!arg) return 0; 2395 if(!arg) return M_PROPERTY_ERROR;
2399 case M_PROPERTY_STEP_UP: 2396 case M_PROPERTY_STEP_UP:
2400 case M_PROPERTY_STEP_DOWN: 2397 case M_PROPERTY_STEP_DOWN:
2401 m_property_flag(prop,action,arg,&forced_subs_only); 2398 m_property_flag(prop,action,arg,&forced_subs_only);
2402 spudec_set_forced_subs_only(vo_spudec,forced_subs_only); 2399 spudec_set_forced_subs_only(vo_spudec,forced_subs_only);
2403 return 1; 2400 return M_PROPERTY_OK;
2404 default: 2401 default:
2405 return m_property_flag(prop,action,arg,&forced_subs_only); 2402 return m_property_flag(prop,action,arg,&forced_subs_only);
2406 } 2403 }
2407 2404
2408 } 2405 }
2421 tvi_handle_t* tvh = demuxer->priv; 2418 tvi_handle_t* tvh = demuxer->priv;
2422 if(demuxer->type != DEMUXER_TYPE_TV || !tvh) return M_PROPERTY_UNAVAILABLE; 2419 if(demuxer->type != DEMUXER_TYPE_TV || !tvh) return M_PROPERTY_UNAVAILABLE;
2423 2420
2424 switch(action) { 2421 switch(action) {
2425 case M_PROPERTY_SET: 2422 case M_PROPERTY_SET:
2426 if(!arg) return 0; 2423 if(!arg) return M_PROPERTY_ERROR;
2427 M_PROPERTY_CLAMP(prop,*(int*)arg); 2424 M_PROPERTY_CLAMP(prop,*(int*)arg);
2428 return tv_set_color_options(tvh,(int)prop->priv,*(int*)arg); 2425 return tv_set_color_options(tvh,(int)prop->priv,*(int*)arg);
2429 case M_PROPERTY_GET: 2426 case M_PROPERTY_GET:
2430 return tv_get_color_options(tvh,(int)prop->priv,arg); 2427 return tv_get_color_options(tvh,(int)prop->priv,arg);
2431 case M_PROPERTY_STEP_UP: 2428 case M_PROPERTY_STEP_UP:
2432 case M_PROPERTY_STEP_DOWN: 2429 case M_PROPERTY_STEP_DOWN:
2433 if((r = tv_get_color_options(tvh,(int)prop->priv,&val)) >= 0) { 2430 if((r = tv_get_color_options(tvh,(int)prop->priv,&val)) >= 0) {
2434 if(!r) return 0; 2431 if(!r) return M_PROPERTY_ERROR;
2435 val += (arg ? *(int*)arg : 1) * 2432 val += (arg ? *(int*)arg : 1) *
2436 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); 2433 (action == M_PROPERTY_STEP_DOWN ? -1 : 1);
2437 M_PROPERTY_CLAMP(prop,val); 2434 M_PROPERTY_CLAMP(prop,val);
2438 return tv_set_color_options(tvh,(int)prop->priv,val); 2435 return tv_set_color_options(tvh,(int)prop->priv,val);
2439 } 2436 }
2440 return 0; 2437 return M_PROPERTY_ERROR;
2441 } 2438 }
2442 return M_PROPERTY_NOT_IMPLEMENTED; 2439 return M_PROPERTY_NOT_IMPLEMENTED;
2443 } 2440 }
2444 2441
2445 #endif 2442 #endif