Add cddb:// support for OS/2

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30788 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
komh 2010-02-28 03:26:18 +00:00
parent ba66200023
commit 35fbd55c0f
2 changed files with 107 additions and 0 deletions

33
osdep/osdep.h Normal file
View File

@ -0,0 +1,33 @@
/*
* Header in order to include OS-specific headers, macros, types and so on
*
* Copyright (c) 2010 by 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_OSDEP_H
#define MPLAYER_OSDEP_H
#ifdef __OS2__
#define INCL_DOS
#define INCL_DOSDEVIOCTL
#include <os2.h>
#endif
#endif /* MPLAYER_OSDEP_H */

View File

@ -68,6 +68,8 @@
#include "mpbswap.h"
#endif
#include "osdep/osdep.h"
#include "cdd.h"
#include "version.h"
#include "stream.h"
@ -112,6 +114,78 @@ static int read_toc(const char *dev)
}
CloseHandle(drive);
#elif defined(__OS2__)
UCHAR auchParamDisk[4] = {'C', 'D', '0', '1'};
struct {
BYTE bFirstTrack;
BYTE bLastTrack;
BYTE bLeadOutF;
BYTE bLeadOutS;
BYTE bLeadOutM;
BYTE bLeadOutReserved;
} __attribute__((packed)) sDataDisk;
struct {
UCHAR auchSign[4];
BYTE bTrack;
} __attribute__((packed)) sParamTrack = {{'C', 'D', '0', '1'},};
struct {
BYTE bStartF;
BYTE bStartS;
BYTE bStartM;
BYTE bStartReserved;
BYTE bControlInfo;
} __attribute__((packed)) sDataTrack;
HFILE hcd;
ULONG ulAction;
ULONG ulParamLen;
ULONG ulDataLen;
ULONG rc;
rc = DosOpen(dev, &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);
if (rc) {
mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC);
return -1;
}
rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIODISK,
auchParamDisk, sizeof(auchParamDisk), &ulParamLen,
&sDataDisk, sizeof(sDataDisk), &ulDataLen);
if (!rc) {
first = sDataDisk.bFirstTrack - 1;
last = sDataDisk.bLastTrack;
for (i = first; i <= last; i++) {
if (i == last) {
sDataTrack.bStartM = sDataDisk.bLeadOutM;
sDataTrack.bStartS = sDataDisk.bLeadOutS;
sDataTrack.bStartF = sDataDisk.bLeadOutF;
} else {
sParamTrack.bTrack = i + 1;
rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK,
&sParamTrack, sizeof(sParamTrack), &ulParamLen,
&sDataTrack, sizeof(sDataTrack), &ulDataLen);
if (rc)
break;
}
cdtoc[i].min = sDataTrack.bStartM;
cdtoc[i].sec = sDataTrack.bStartS;
cdtoc[i].frame = sDataTrack.bStartF;
}
}
DosClose(hcd);
if (rc) {
mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC);
return -1;
}
#else
int drive;
drive = open(dev, O_RDONLY | O_NONBLOCK);