diff options
Diffstat (limited to 'stream/vcd_read_win32.h')
-rw-r--r-- | stream/vcd_read_win32.h | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/stream/vcd_read_win32.h b/stream/vcd_read_win32.h deleted file mode 100644 index a01290eeb9..0000000000 --- a/stream/vcd_read_win32.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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_WIN32_H -#define MPLAYER_VCD_READ_WIN32_H - -#include <stddef.h> -#include <stdlib.h> -#include <string.h> -#include <ntddcdrm.h> -#include "common/msg.h" - -typedef struct mp_vcd_priv_st mp_vcd_priv_t; - -/* - Unlike Unices, upon reading TOC, Windows will retrieve information for - all tracks, so we don't need to call DeviceIoControl() in functions - like vcd_seek_to_track() and vcd_get_track_end() for each track. Instead - we cache the information in mp_vcd_priv_st. -*/ -struct mp_vcd_priv_st { - int start; - HANDLE hd; - CDROM_TOC toc; - unsigned sect; - char buf[VCD_SECTOR_SIZE]; -}; - -static inline void vcd_set_msf(mp_vcd_priv_t* vcd, unsigned sect) -{ - vcd->sect = sect; -} - -static inline unsigned vcd_get_msf(mp_vcd_priv_t* vcd, int track){ - int index = track - vcd->toc.FirstTrack; - /* -150 to compensate the 2-second pregap */ - return vcd->toc.TrackData[index].Address[3] + - (vcd->toc.TrackData[index].Address[2] + - vcd->toc.TrackData[index].Address[1] * 60) * 75 - 150; -} - -static int vcd_seek_to_track(mp_vcd_priv_t* vcd, int track) -{ - unsigned sect; - if (track < vcd->toc.FirstTrack || track > vcd->toc.LastTrack) - return -1; - sect = vcd_get_msf(vcd, track); - vcd_set_msf(vcd, sect); - return VCD_SECTOR_DATA * (sect + 2); -} - -static int vcd_get_track_end(mp_vcd_priv_t* vcd, int track) -{ - if (track < vcd->toc.FirstTrack || track > vcd->toc.LastTrack) - return -1; - return VCD_SECTOR_DATA * (vcd_get_msf(vcd, track + 1)); -} - -static mp_vcd_priv_t* vcd_read_toc(stream_t *stream, int fd) -{ - DWORD dwBytesReturned; - HANDLE hd; - int i; - mp_vcd_priv_t* vcd = malloc(sizeof(mp_vcd_priv_t)); - if (!vcd) - return NULL; - - hd = (HANDLE)_get_osfhandle(fd); - if (!DeviceIoControl(hd, IOCTL_CDROM_READ_TOC, NULL, 0, &vcd->toc, - sizeof(CDROM_TOC), &dwBytesReturned, NULL)) { - MP_ERR(stream, "read CDROM toc header: %lu\n", - GetLastError()); - free(vcd); - return NULL; - } - - for (i = vcd->toc.FirstTrack; i <= vcd->toc.LastTrack + 1; i++) { - int index = i - vcd->toc.FirstTrack; - if (i <= vcd->toc.LastTrack) { - MP_INFO(stream, "track %02d: adr=%d ctrl=%d" - " %02d:%02d:%02d\n", - vcd->toc.TrackData[index].TrackNumber, - vcd->toc.TrackData[index].Adr, - vcd->toc.TrackData[index].Control, - vcd->toc.TrackData[index].Address[1], - vcd->toc.TrackData[index].Address[2], - vcd->toc.TrackData[index].Address[3]); - } - } - - vcd->hd = hd; - return vcd; -} - -#define vcd_close(priv) (CloseHandle(((mp_vcd_priv_t*)priv)->hd)) - -static int vcd_read(mp_vcd_priv_t* vcd, char *mem) -{ - DWORD dwBytesReturned; - RAW_READ_INFO cdrom_raw; - - /* 2048 isn't a typo: it's the Windows way. */ - cdrom_raw.DiskOffset.QuadPart = (long long)(2048 * vcd->sect); - cdrom_raw.SectorCount = 1; - cdrom_raw.TrackMode = XAForm2; - - if (!DeviceIoControl(vcd->hd, IOCTL_CDROM_RAW_READ, &cdrom_raw, - sizeof(RAW_READ_INFO), vcd->buf, sizeof(vcd->buf), - &dwBytesReturned, NULL)) - return 0; - - vcd->sect++; - memcpy(mem, &vcd->buf[VCD_SECTOR_OFFS], VCD_SECTOR_DATA); - return VCD_SECTOR_DATA; -} - -#endif /* MPLAYER_VCD_READ_WIN32_H */ |