From c106fe7751426c8c30706d2f131491dc8f37ee85 Mon Sep 17 00:00:00 2001 From: diego Date: Tue, 2 Mar 2010 19:57:17 +0000 Subject: Drop support for old-style DVB code. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30818 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/dvb_tune.c | 292 +--------------------------------------------------- stream/dvbin.h | 24 +---- stream/stream_dvb.c | 9 -- 3 files changed, 5 insertions(+), 320 deletions(-) (limited to 'stream') diff --git a/stream/dvb_tune.c b/stream/dvb_tune.c index e03a4eb1e6..56deadc034 100644 --- a/stream/dvb_tune.c +++ b/stream/dvb_tune.c @@ -32,17 +32,9 @@ #include #include #include +#include +#include #include "config.h" - -#ifdef CONFIG_DVB_HEAD - #include - #include -#else - #include - #include - #include -#endif - #include "dvbin.h" #include "dvb_tune.h" #include "mp_msg.h" @@ -51,11 +43,7 @@ int dvb_get_tuner_type(int fe_fd) { -#ifdef CONFIG_DVB_HEAD struct dvb_frontend_info fe_info; -#else - FrontendInfo fe_info; -#endif int res; @@ -96,35 +84,16 @@ int dvb_open_devices(dvb_priv_t *priv, int n, int demux_cnt) { int i; char frontend_dev[32], dvr_dev[32], demux_dev[32]; -#ifndef CONFIG_DVB_HEAD - char sec_dev[32]; -#endif -#ifdef CONFIG_DVB_HEAD sprintf(frontend_dev, "/dev/dvb/adapter%d/frontend0", n); sprintf(dvr_dev, "/dev/dvb/adapter%d/dvr0", n); sprintf(demux_dev, "/dev/dvb/adapter%d/demux0", n); -#else - sprintf(frontend_dev, "/dev/ost/frontend%d", n); - sprintf(dvr_dev, "/dev/ost/dvr%d", n); - sprintf(demux_dev, "/dev/ost/demux%d", n); - sprintf(sec_dev, "/dev/ost/sec%d", n); -#endif priv->fe_fd = open(frontend_dev, O_RDWR | O_NONBLOCK); if(priv->fe_fd < 0) { mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR OPENING FRONTEND DEVICE %s: ERRNO %d\n", frontend_dev, errno); return 0; } -#ifndef CONFIG_DVB_HEAD - priv->sec_fd = open(sec_dev, O_RDWR); - if(priv->sec_fd < 0) - { - mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR OPENING SEC DEVICE %s: ERRNO %d\n", sec_dev, errno); - close(priv->fe_fd); - return 0; - } -#endif priv->demux_fds_cnt = 0; mp_msg(MSGT_DEMUX, MSGL_V, "DVB_OPEN_DEVICES(%d)\n", demux_cnt); for(i = 0; i < demux_cnt; i++) @@ -159,12 +128,7 @@ int dvb_fix_demuxes(dvb_priv_t *priv, int cnt) int i; char demux_dev[32]; -#ifdef CONFIG_DVB_HEAD sprintf(demux_dev, "/dev/dvb/adapter%d/demux0", priv->card); -#else - sprintf(demux_dev, "/dev/ost/demux%d", priv->card); -#endif - mp_msg(MSGT_DEMUX, MSGL_V, "FIX %d -> %d\n", priv->demux_fds_cnt, cnt); if(priv->demux_fds_cnt >= cnt) { @@ -202,12 +166,7 @@ int dvb_set_ts_filt(int fd, uint16_t pid, dmx_pes_type_t pestype) pesFilterParams.pid = pid; pesFilterParams.input = DMX_IN_FRONTEND; pesFilterParams.output = DMX_OUT_TS_TAP; -#ifdef CONFIG_DVB_HEAD pesFilterParams.pes_type = pestype; -#else - pesFilterParams.pesType = pestype; -#endif - pesFilterParams.flags = DMX_IMMEDIATE_START; errno = 0; @@ -248,13 +207,7 @@ static void print_status(fe_status_t festatus) { mp_msg(MSGT_DEMUX, MSGL_V, "FE_STATUS:"); if (festatus & FE_HAS_SIGNAL) mp_msg(MSGT_DEMUX, MSGL_V," FE_HAS_SIGNAL"); -#ifdef CONFIG_DVB_HEAD if (festatus & FE_TIMEDOUT) mp_msg(MSGT_DEMUX, MSGL_V, " FE_TIMEDOUT"); -#else - if (festatus & FE_HAS_POWER) mp_msg(MSGT_DEMUX, MSGL_V, " FE_HAS_POWER"); - if (festatus & FE_SPECTRUM_INV) mp_msg(MSGT_DEMUX, MSGL_V, " FE_SPECTRUM_INV"); - if (festatus & FE_TUNER_HAS_LOCK) mp_msg(MSGT_DEMUX, MSGL_V, " FE_TUNER_HAS_LOCK"); -#endif if (festatus & FE_HAS_LOCK) mp_msg(MSGT_DEMUX, MSGL_V, " FE_HAS_LOCK"); if (festatus & FE_HAS_CARRIER) mp_msg(MSGT_DEMUX, MSGL_V, " FE_HAS_CARRIER"); if (festatus & FE_HAS_VITERBI) mp_msg(MSGT_DEMUX, MSGL_V, " FE_HAS_VITERBI"); @@ -263,7 +216,6 @@ static void print_status(fe_status_t festatus) } -#ifdef CONFIG_DVB_HEAD static int check_status(int fd_frontend, int tmout) { int32_t strength; @@ -368,202 +320,14 @@ static int do_diseqc(int secfd, int sat_no, int polv, int hi_lo) (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); } -#else - -static int SecGetStatus (int fd, struct secStatus *state) -{ - if(ioctl(fd, SEC_GET_STATUS, state) < 0) - { - mp_msg(MSGT_DEMUX, MSGL_ERR, ("SEC GET STATUS: ")); - return -1; - } - - switch (state->busMode) - { - case SEC_BUS_IDLE: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC BUS MODE: IDLE (%d)\n",state->busMode); - break; - case SEC_BUS_BUSY: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC BUS MODE: BUSY (%d)\n",state->busMode); - break; - case SEC_BUS_OFF: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC BUS MODE: OFF (%d)\n",state->busMode); - break; - case SEC_BUS_OVERLOAD: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC BUS MODE: OVERLOAD (%d)\n",state->busMode); - break; - default: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC BUS MODE: unknown (%d)\n",state->busMode); - break; - } - - switch (state->selVolt) - { - case SEC_VOLTAGE_OFF: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: OFF (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_LT: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: LT (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: 13 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13_5: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: 13.5 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: 18 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18_5: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: 18.5 (%d)\n",state->selVolt); - break; - default: - mp_msg(MSGT_DEMUX, MSGL_V, "SEC VOLTAGE: unknown (%d)\n",state->selVolt); - break; - } - - mp_msg(MSGT_DEMUX, MSGL_V, "SEC CONT TONE: %s\n", (state->contTone == SEC_TONE_ON ? "ON" : "OFF")); - return 0; -} - -static int check_status(int fd_frontend, int tmout) -{ - int i,res; - int32_t strength; - fe_status_t festatus; - FrontendEvent event; - - struct pollfd pfd[1]; - - i = 0; res = -1; - while ((i < 3) && (res < 0)) - { - pfd[0].fd = fd_frontend; - pfd[0].events = POLLIN | POLLPRI; - - if(poll(pfd,1,tmout*1000) > 0) - { - if (pfd[0].revents & POLLPRI) - { - mp_msg(MSGT_DEMUX, MSGL_V, "Getting frontend event\n"); - if ( ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) - { - mp_msg(MSGT_DEMUX, MSGL_ERR, "FE_GET_EVENT"); - return -1; - } - mp_msg(MSGT_DEMUX, MSGL_V, "Received "); - switch(event.type) - { - case FE_UNEXPECTED_EV: - mp_msg(MSGT_DEMUX, MSGL_V, "unexpected event\n"); - res = -1; - break; - - case FE_FAILURE_EV: - mp_msg(MSGT_DEMUX, MSGL_V, "failure event\n"); - res = -1; - break; - - case FE_COMPLETION_EV: - mp_msg(MSGT_DEMUX, MSGL_V, "completion event\n"); - res = 0; - break; - } - } - i++; - } - } - - if (res > 0) - switch (event.type) - { - case FE_UNEXPECTED_EV: mp_msg(MSGT_DEMUX, MSGL_V, "FE_UNEXPECTED_EV\n"); - break; - case FE_COMPLETION_EV: mp_msg(MSGT_DEMUX, MSGL_V, "FE_COMPLETION_EV\n"); - break; - case FE_FAILURE_EV: mp_msg(MSGT_DEMUX, MSGL_V, "FE_FAILURE_EV\n"); - break; - } - - if (event.type == FE_COMPLETION_EV) - { - strength=0; - if(ioctl(fd_frontend,FE_READ_BER,&strength) >= 0) - mp_msg(MSGT_DEMUX, MSGL_V, "Bit error rate: %d\n",strength); - - strength=0; - if(ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength) >= 0) - mp_msg(MSGT_DEMUX, MSGL_V, "Signal strength: %d\n",strength); - - strength=0; - if(ioctl(fd_frontend,FE_READ_SNR,&strength) >= 0) - mp_msg(MSGT_DEMUX, MSGL_V, "SNR: %d\n",strength); - - festatus=0; - mp_msg(MSGT_DEMUX, MSGL_V, "FE_STATUS:"); - - if(ioctl(fd_frontend,FE_READ_STATUS,&festatus) >= 0) - print_status(festatus); - else - mp_msg(MSGT_DEMUX, MSGL_ERR, " ERROR, UNABLE TO READ_STATUS"); - - mp_msg(MSGT_DEMUX, MSGL_V, "\n"); - } - else - { - mp_msg(MSGT_DEMUX, MSGL_V, "Not able to lock to the signal on the given frequency\n"); - return -1; - } - return 0; -} - -static int do_diseqc(int secfd, int sat_no, int polv, int hi_lo) -{ - struct secCommand scmd; - struct secCmdSequence scmds; - - scmds.continuousTone = (hi_lo ? SEC_TONE_ON : SEC_TONE_OFF); - scmds.voltage = (polv ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18); - scmds.miniCommand = SEC_MINI_NONE; - - scmd.type = SEC_CMDTYPE_DISEQC; - scmds.numCommands = 1; - scmds.commands = &scmd; - - scmd.u.diseqc.addr = 0x10; - scmd.u.diseqc.cmd = 0x38; - scmd.u.diseqc.numParams = 1; - scmd.u.diseqc.params[0] = 0xf0 | - (((sat_no) << 2) & 0x0F) | - (hi_lo ? 1 : 0) | - (polv ? 0 : 2); - - if (ioctl(secfd,SEC_SEND_SEQUENCE,&scmds) < 0) - { - mp_msg(MSGT_DEMUX, MSGL_ERR, "Error sending DisEqC"); - return -1; - } - - return 0; -} -#endif - static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc, fe_modulation_t modulation, fe_code_rate_t HP_CodeRate, fe_transmit_mode_t TransmissionMode, fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth, fe_code_rate_t LP_CodeRate, fe_hierarchy_t hier, int timeout) { int res, hi_lo, dfd; -#ifdef CONFIG_DVB_HEAD struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; -#else - FrontendParameters feparams; - FrontendInfo fe_info; - FrontendEvent event; - struct secStatus sec_state; -#endif - mp_msg(MSGT_DEMUX, MSGL_V, "TUNE_IT, fd_frontend %d, fd_sec %d\nfreq %lu, srate %lu, pol %c, tone %i, specInv, diseqc %u, fe_modulation_t modulation,fe_code_rate_t HP_CodeRate, fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth\n", fd_frontend, fd_sec, (long unsigned int)freq, (long unsigned int)srate, pol, tone, diseqc); @@ -576,15 +340,11 @@ static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int return -1; } - -#ifdef CONFIG_DVB_HEAD mp_msg(MSGT_DEMUX, MSGL_V, "Using DVB card \"%s\"\n", fe_info.name); -#endif switch(fe_info.type) { case FE_OFDM: -#ifdef CONFIG_DVB_HEAD if (freq < 1000000) freq*=1000UL; feparams.frequency=freq; feparams.inversion=specInv; @@ -595,18 +355,6 @@ static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int feparams.u.ofdm.transmission_mode=TransmissionMode; feparams.u.ofdm.guard_interval=guardInterval; feparams.u.ofdm.hierarchy_information=hier; -#else - if (freq < 1000000) freq*=1000UL; - feparams.Frequency=freq; - feparams.Inversion=specInv; - feparams.u.ofdm.bandWidth=bandwidth; - feparams.u.ofdm.HP_CodeRate=HP_CodeRate; - feparams.u.ofdm.LP_CodeRate=LP_CodeRate; - feparams.u.ofdm.Constellation=modulation; - feparams.u.ofdm.TransmissionMode=TransmissionMode; - feparams.u.ofdm.guardInterval=guardInterval; - feparams.u.ofdm.HierarchyInformation=hier; -#endif mp_msg(MSGT_DEMUX, MSGL_V, "tuning DVB-T to %d Hz, bandwidth: %d\n",freq, bandwidth); break; case FE_QPSK: @@ -615,44 +363,25 @@ static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int // this must be an absolute frequency if (freq < SLOF) { -#ifdef CONFIG_DVB_HEAD freq = feparams.frequency=(freq-LOF1); -#else - freq = feparams.Frequency=(freq-LOF1); -#endif hi_lo = 0; } else { -#ifdef CONFIG_DVB_HEAD freq = feparams.frequency=(freq-LOF2); -#else - freq = feparams.Frequency=(freq-LOF2); -#endif hi_lo = 1; } } else { // this is an L-Band frequency -#ifdef CONFIG_DVB_HEAD feparams.frequency=freq; -#else - feparams.Frequency=freq; -#endif } -#ifdef CONFIG_DVB_HEAD feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; feparams.u.qpsk.fec_inner=HP_CodeRate; dfd = fd_frontend; -#else - feparams.Inversion=specInv; - feparams.u.qpsk.SymbolRate=srate; - feparams.u.qpsk.FEC_inner=HP_CodeRate; - dfd = fd_sec; -#endif mp_msg(MSGT_DEMUX, MSGL_V, "tuning DVB-S to Freq: %u, Pol: %c Srate: %d, 22kHz: %s, LNB: %d\n",freq,pol,srate,hi_lo ? "on" : "off", diseqc); @@ -666,19 +395,11 @@ static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int break; case FE_QAM: mp_msg(MSGT_DEMUX, MSGL_V, "tuning DVB-C to %d, srate=%d\n",freq,srate); -#ifdef CONFIG_DVB_HEAD feparams.frequency=freq; feparams.inversion=specInv; feparams.u.qam.symbol_rate = srate; feparams.u.qam.fec_inner = HP_CodeRate; feparams.u.qam.modulation = modulation; -#else - feparams.Frequency=freq; - feparams.Inversion=specInv; - feparams.u.qam.SymbolRate = srate; - feparams.u.qam.FEC_inner = HP_CodeRate; - feparams.u.qam.QAM = modulation; -#endif break; #ifdef DVB_ATSC case FE_ATSC: @@ -693,15 +414,6 @@ static int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int } usleep(100000); -#ifndef CONFIG_DVB_HEAD - if (fd_sec) SecGetStatus(fd_sec, &sec_state); - while(1) - { - if(ioctl(fd_frontend, FE_GET_EVENT, &event) == -1) - break; - } -#endif - if(ioctl(fd_frontend,FE_SET_FRONTEND,&feparams) < 0) { mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR tuning channel\n"); diff --git a/stream/dvbin.h b/stream/dvbin.h index 18a37d9522..e278e79489 100644 --- a/stream/dvbin.h +++ b/stream/dvbin.h @@ -15,27 +15,9 @@ #define LOF1 (9750*1000UL) #define LOF2 (10600*1000UL) -#ifdef CONFIG_DVB_HEAD - #include - #include - #include -#else - #include - #include - #include - #define fe_status_t FrontendStatus - #define fe_spectral_inversion_t SpectralInversion - #define fe_modulation_t Modulation - #define fe_code_rate_t CodeRate - #define fe_transmit_mode_t TransmitMode - #define fe_guard_interval_t GuardInterval - #define fe_bandwidth_t BandWidth - #define fe_hierarchy_t Hierarchy - #define fe_sec_voltage_t SecVoltage - #define dmx_pes_filter_params dmxPesFilterParams - #define dmx_sct_filter_params dmxSctFilterParams - #define dmx_pes_type_t dmxPesType_t -#endif +#include +#include +#include #undef DVB_ATSC #if defined(DVB_API_VERSION_MINOR) diff --git a/stream/stream_dvb.c b/stream/stream_dvb.c index 9df4566e62..4a7efe2724 100644 --- a/stream/stream_dvb.c +++ b/stream/stream_dvb.c @@ -288,14 +288,12 @@ static dvb_channels_list *dvb_get_channels(char *filename, int type) ptr->cr =FEC_2_3; else if(! strcmp(cr, "FEC_3_4")) ptr->cr =FEC_3_4; -#ifdef CONFIG_DVB_HEAD else if(! strcmp(cr, "FEC_4_5")) ptr->cr =FEC_4_5; else if(! strcmp(cr, "FEC_6_7")) ptr->cr =FEC_6_7; else if(! strcmp(cr, "FEC_8_9")) ptr->cr =FEC_8_9; -#endif else if(! strcmp(cr, "FEC_5_6")) ptr->cr =FEC_5_6; else if(! strcmp(cr, "FEC_7_8")) @@ -362,14 +360,12 @@ static dvb_channels_list *dvb_get_channels(char *filename, int type) ptr->cr_lp =FEC_2_3; else if(! strcmp(tmp_lcr, "FEC_3_4")) ptr->cr_lp =FEC_3_4; -#ifdef CONFIG_DVB_HEAD else if(! strcmp(tmp_lcr, "FEC_4_5")) ptr->cr_lp =FEC_4_5; else if(! strcmp(tmp_lcr, "FEC_6_7")) ptr->cr_lp =FEC_6_7; else if(! strcmp(tmp_lcr, "FEC_8_9")) ptr->cr_lp =FEC_8_9; -#endif else if(! strcmp(tmp_lcr, "FEC_5_6")) ptr->cr_lp =FEC_5_6; else if(! strcmp(tmp_lcr, "FEC_7_8")) @@ -385,10 +381,8 @@ static dvb_channels_list *dvb_get_channels(char *filename, int type) ptr->hier = HIERARCHY_2; else if(! strcmp(tmp_hier, "HIERARCHY_4")) ptr->hier = HIERARCHY_4; -#ifdef CONFIG_DVB_HEAD else if(! strcmp(tmp_hier, "HIERARCHY_AUTO")) ptr->hier = HIERARCHY_AUTO; -#endif else ptr->hier = HIERARCHY_NONE; } @@ -615,9 +609,6 @@ static void dvbin_close(stream_t *stream) close(priv->dvr_fd); close(priv->fe_fd); -#ifndef CONFIG_DVB_HEAD - close(priv->sec_fd); -#endif priv->fe_fd = priv->sec_fd = priv->dvr_fd = -1; priv->is_on = 0; -- cgit v1.2.3 From 9beeeb1a9ecec3916f16e8315edc026b7f48ac21 Mon Sep 17 00:00:00 2001 From: komh Date: Wed, 3 Mar 2010 14:32:29 +0000 Subject: Add a VCD support for OS/2 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30819 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/stream_vcd.c | 17 ++++ stream/vcd_read_os2.h | 237 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 stream/vcd_read_os2.h (limited to 'stream') diff --git a/stream/stream_vcd.c b/stream/stream_vcd.c index 9ed8ac7a58..819c3e52ea 100644 --- a/stream/stream_vcd.c +++ b/stream/stream_vcd.c @@ -22,6 +22,8 @@ #include #endif +#include "osdep/osdep.h" + #include "mp_msg.h" #include "stream.h" #include "help_mp.h" @@ -42,6 +44,8 @@ #include "vcd_read_darwin.h" #elif defined(__MINGW32__) || defined(__CYGWIN__) #include "vcd_read_win32.h" +#elif defined(__OS2__) +#include "vcd_read_os2.h" #else #include "vcd_read.h" #endif @@ -102,6 +106,12 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { HANDLE hd; char device[] = "\\\\.\\?:"; #endif +#if defined(__OS2__) + char device[] = "X:"; + HFILE hcd; + ULONG ulAction; + ULONG rc; +#endif if(mode != STREAM_READ #if defined(__MINGW32__) || defined(__CYGWIN__) @@ -125,6 +135,13 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { hd = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); f = _open_osfhandle((long)hd, _O_RDONLY); +#elif defined(__OS2__) + device[0] = p->device[0]; + rc = DosOpen(device, &hcd, &ulAction, 0, FILE_NORMAL, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, + OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE | OPEN_FLAGS_DASD, + NULL); + f = rc ? -1 : hcd; #else f=open(p->device,O_RDONLY); #endif diff --git a/stream/vcd_read_os2.h b/stream/vcd_read_os2.h new file mode 100644 index 0000000000..7d37b33e23 --- /dev/null +++ b/stream/vcd_read_os2.h @@ -0,0 +1,237 @@ +/* + * implementation of VCD IO for OS/2 + * + * Copyright (c) 2009 KO Myung-Hun (komh@chollian.net) + * + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPLAYER_VCD_READ_OS2_H +#define MPLAYER_VCD_READ_OS2_H + +#include "mp_msg.h" + +struct __attribute__((packed)) msf { + BYTE bFrame; + BYTE bSecond; + BYTE bMinute; + BYTE bReserved; +}; + +typedef struct { + HFILE hcd; + struct msf msfCurrent; + int iFirstTrack; + int iLastTrack; + struct msf msfLeadOut; + BYTE abVCDSector[VCD_SECTOR_SIZE]; +} mp_vcd_priv_t; + +static inline void vcd_set_msf(mp_vcd_priv_t *vcd, unsigned sect) +{ + sect += 150; + vcd->msfCurrent.bFrame = sect % 75; + sect = sect / 75; + vcd->msfCurrent.bSecond = sect % 60; + sect = sect / 60; + vcd->msfCurrent.bMinute = sect; +} + +static inline unsigned vcd_get_msf(mp_vcd_priv_t *vcd) +{ + return vcd->msfCurrent.bFrame + + (vcd->msfCurrent.bSecond + vcd->msfCurrent.bMinute * 60) * 75 - 150; +} + +int vcd_seek_to_track(mp_vcd_priv_t *vcd, int track) +{ + struct { + UCHAR auchSign[4]; + BYTE bTrack; + } __attribute__((packed)) sParam = {{'C', 'D', '0', '1'},}; + + struct { + struct msf msfStart; + BYTE bControlInfo; + } __attribute__((packed)) sData; + + ULONG ulParamLen; + ULONG ulDataLen; + ULONG rc; + + sParam.bTrack = track; + rc = DosDevIOCtl(vcd->hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK, + &sParam, sizeof(sParam), &ulParamLen, + &sData, sizeof(sData), &ulDataLen); + if (rc) { + mp_msg(MSGT_STREAM, MSGL_ERR, "DosDevIOCtl(GETAUDIOTRACK) = 0x%lx\n", rc); + return -1; + } + + vcd->msfCurrent = sData.msfStart; + + return VCD_SECTOR_DATA * vcd_get_msf(vcd); +} + +static int vcd_get_track_end(mp_vcd_priv_t *vcd, int track) +{ + if (track < vcd->iLastTrack) + return vcd_seek_to_track(vcd, track + 1); + + vcd->msfCurrent = vcd->msfLeadOut; + + return VCD_SECTOR_DATA * vcd_get_msf(vcd); +} + +static mp_vcd_priv_t *vcd_read_toc(int fd) +{ + mp_vcd_priv_t *vcd; + + UCHAR auchParamDisk[4] = {'C', 'D', '0', '1'}; + + struct { + BYTE bFirstTrack; + BYTE bLastTrack; + struct msf msfLeadOut; + } __attribute__((packed)) sDataDisk; + + struct { + UCHAR auchSign[4]; + BYTE bTrack; + } __attribute__((packed)) sParamTrack = {{'C', 'D', '0', '1'},}; + + struct { + struct msf msfStart; + BYTE bControlInfo; + } __attribute__((packed)) sDataTrack; + + ULONG ulParamLen; + ULONG ulDataLen; + ULONG rc; + int i, iMinute = 0, iSecond = 0, iFrame = 0; + + rc = DosDevIOCtl(fd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIODISK, + auchParamDisk, sizeof(auchParamDisk), &ulParamLen, + &sDataDisk, sizeof(sDataDisk), &ulDataLen); + if (rc) { + mp_msg(MSGT_OPEN, MSGL_ERR, "DosDevIOCtl(GETAUDIODISK) = 0x%lx\n", rc); + return NULL; + } + + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", sDataDisk.bFirstTrack); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", sDataDisk.bLastTrack); + + for (i = sDataDisk.bFirstTrack; i <= sDataDisk.bLastTrack + 1; i++) { + if (i <= sDataDisk.bLastTrack) { + sParamTrack.bTrack = i; + rc = DosDevIOCtl(fd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK, + &sParamTrack, sizeof(sParamTrack), &ulParamLen, + &sDataTrack, sizeof(sDataTrack), &ulDataLen); + if (rc) { + mp_msg(MSGT_OPEN, MSGL_ERR, "DosDevIOCtl(GETAUDIOTRACK) = 0x%lx\n", rc); + return NULL; + } + + mp_msg(MSGT_OPEN, MSGL_INFO, "track %02d: adr=%d ctrl=%d %02d:%02d:%02d\n", + i, + sDataTrack.bControlInfo & 0x0F, + sDataTrack.bControlInfo >> 4, + sDataTrack.msfStart.bMinute, + sDataTrack.msfStart.bSecond, + sDataTrack.msfStart.bFrame); + } else + sDataTrack.msfStart = sDataDisk.msfLeadOut; + + if (mp_msg_test(MSGT_IDENTIFY, MSGL_INFO)) { + if (i > sDataDisk.bFirstTrack) { + iMinute = sDataTrack.msfStart.bMinute - iMinute; + iSecond = sDataTrack.msfStart.bSecond - iSecond; + iFrame = sDataTrack.msfStart.bFrame - iFrame; + if (iFrame < 0) { + iFrame += 75; + iSecond--; + } + if (iSecond < 0) { + iSecond += 60; + iMinute--; + } + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n", + i - 1, iMinute, iSecond, iFrame); + } + + iMinute = sDataTrack.msfStart.bMinute; + iSecond = sDataTrack.msfStart.bSecond; + iFrame = sDataTrack.msfStart.bFrame; + } + } + + vcd = calloc(1, sizeof(mp_vcd_priv_t)); + vcd->hcd = fd; + vcd->iFirstTrack = sDataDisk.bFirstTrack; + vcd->iLastTrack = sDataDisk.bLastTrack; + vcd->msfLeadOut = sDataDisk.msfLeadOut; + + return vcd; +} + +static int vcd_read(mp_vcd_priv_t *vcd, char *mem) +{ + struct { + UCHAR auchSign[4]; + BYTE bAddrMode; + USHORT usSectors; + struct msf msfStart; + BYTE bReserved; + BYTE bInterleavedSize; + } __attribute__((packed)) sParam = {{'C', 'D', '0', '1'}, 1, 1,}; + + ULONG ulParamLen; + ULONG ulDataLen; + ULONG rc; + + /* lead-out ? */ + if (vcd->msfCurrent.bMinute == vcd->msfLeadOut.bMinute && + vcd->msfCurrent.bSecond == vcd->msfLeadOut.bSecond && + vcd->msfCurrent.bFrame == vcd->msfLeadOut.bFrame) + return 0; + + sParam.msfStart = vcd->msfCurrent; + rc = DosDevIOCtl(vcd->hcd, IOCTL_CDROMDISK, CDROMDISK_READLONG, + &sParam, sizeof(sParam), &ulParamLen, + vcd->abVCDSector, sizeof(vcd->abVCDSector), &ulDataLen); + if (rc) { + mp_msg(MSGT_STREAM, MSGL_ERR, "DosDevIOCtl(READLONG) = 0x%lx\n", rc); + return 0; + } + + memcpy(mem, &vcd->abVCDSector[VCD_SECTOR_OFFS], VCD_SECTOR_DATA); + + vcd->msfCurrent.bFrame++; + if (vcd->msfCurrent.bFrame == 75) { + vcd->msfCurrent.bFrame = 0; + vcd->msfCurrent.bSecond++; + if (vcd->msfCurrent.bSecond == 60) { + vcd->msfCurrent.bSecond = 0; + vcd->msfCurrent.bMinute++; + } + } + + return VCD_SECTOR_DATA; +} + +#endif /* MPLAYER_VCD_READ_OS2_H */ + -- cgit v1.2.3 From b10a6917f456125491411f0fc13dd3efae455df8 Mon Sep 17 00:00:00 2001 From: komh Date: Thu, 4 Mar 2010 14:46:44 +0000 Subject: Define HAVE_SETMODE conditionally, and use it in stream/stream_file.c instead of platform specific predefined macros. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30829 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/stream_file.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'stream') diff --git a/stream/stream_file.c b/stream/stream_file.c index dceea84db0..9fda32b185 100644 --- a/stream/stream_file.c +++ b/stream/stream_file.c @@ -145,14 +145,14 @@ static int open_f(stream_t *stream,int mode, void* opts, int* file_format) { // read from stdin mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_ReadSTDIN); f=0; // 0=stdin -#if defined(__MINGW32__) || defined(__OS2__) - setmode(fileno(stdin),O_BINARY); +#if HAVE_SETMODE + setmode(fileno(stdin),O_BINARY); #endif } else { mp_msg(MSGT_OPEN,MSGL_INFO,"Writing to stdout\n"); f=1; -#if defined(__MINGW32__) || defined(__OS2__) - setmode(fileno(stdout),O_BINARY); +#if HAVE_SETMODE + setmode(fileno(stdout),O_BINARY); #endif } } else { -- cgit v1.2.3