Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (5)
......@@ -112,10 +112,12 @@ static vcddev_t *DiscOpen(vlc_object_t *obj, const char *location,
devpath[2] = '\0';
#endif
#ifdef __APPLE__
if (DiscProbeMacOSPermission(obj, devpath) != VLC_SUCCESS) {
free(devpath);
return NULL;
}
#endif
/* Open CDDA */
vcddev_t *dev = ioctl_Open(obj, devpath);
......@@ -306,7 +308,7 @@ static int DemuxOpen(vlc_object_t *obj, vcddev_t *dev, unsigned track)
/* Track number in input item */
if (sys->start == (unsigned)-1 || sys->length == (unsigned)-1)
{
vcddev_toc_t *p_toc = ioctl_GetTOC(obj, dev, true);
vcddev_toc_t *p_toc = ioctl_GetTOC(obj, dev);
if(p_toc == NULL)
goto error;
......@@ -870,7 +872,7 @@ static int AccessOpen(vlc_object_t *obj, vcddev_t *dev)
}
sys->vcddev = dev;
sys->p_toc = ioctl_GetTOC(obj, dev, true);
sys->p_toc = ioctl_GetTOC(obj, dev);
if (sys->p_toc == NULL)
{
msg_Err(obj, "cannot count tracks");
......
......@@ -18,6 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef __APPLE__
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
......@@ -25,10 +26,8 @@
#include <vlc_dialog.h>
#include <vlc_fs.h>
inline static int DiscProbeMacOSPermission( vlc_object_t *p_this, const char *psz_file )
{
#ifdef __APPLE__
/* Check is only relevant starting macOS Catalina */
if( __builtin_available( macOS 10.15, * ) )
{
......@@ -62,9 +61,5 @@ inline static int DiscProbeMacOSPermission( vlc_object_t *p_this, const char *ps
}
return VLC_SUCCESS;
#else
VLC_UNUSED( p_this );
VLC_UNUSED( psz_file );
return VLC_SUCCESS;
#endif
}
#endif
......@@ -412,8 +412,10 @@ static int AccessDemuxOpen ( vlc_object_t *p_this )
if( !forced && ProbeDVD( psz_file ) != VLC_SUCCESS )
goto bailout;
#ifdef __APPLE__
if( forced && DiscProbeMacOSPermission( p_this, psz_file ) != VLC_SUCCESS )
goto bailout;
#endif
/* Open dvdnav */
#if DVDREAD_VERSION < DVDREAD_VERSION_CODE(6, 1, 2)
......
......@@ -195,11 +195,13 @@ static int Open( vlc_object_t *p_this )
if( unlikely(psz_file == NULL) )
return VLC_EGENERIC;
#ifdef __APPLE__
if( DiscProbeMacOSPermission( p_this, psz_file ) != VLC_SUCCESS )
{
free( psz_file );
return VLC_EGENERIC;
}
#endif
/* Open dvdread */
#if DVDREAD_VERSION < DVDREAD_VERSION_CODE(6, 1, 2)
......
......@@ -260,8 +260,7 @@ void ioctl_Close( vlc_object_t * p_this, vcddev_t *p_vcddev )
* ioctl_GetTOC: Read the Table of Content, fill in the p_sectors map
* if b_fill_sector_info is true.
*****************************************************************************/
vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
bool b_fill_sectorinfo )
vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev )
{
vcddev_toc_t *p_toc = calloc(1, sizeof(*p_toc));
if(!p_toc)
......@@ -276,17 +275,14 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
*p_toc = p_vcddev->toc;
p_toc->p_sectors = NULL;
if( b_fill_sectorinfo )
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
free( p_toc );
return NULL;
}
memcpy( p_toc->p_sectors, p_vcddev->toc.p_sectors,
(p_toc->i_tracks + 1) * sizeof(*p_toc->p_sectors) );
free( p_toc );
return NULL;
}
memcpy( p_toc->p_sectors, p_vcddev->toc.p_sectors,
(p_toc->i_tracks + 1) * sizeof(*p_toc->p_sectors) );
return p_toc;
}
......@@ -314,60 +310,58 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
&p_toc->i_first_track,
&p_toc->i_last_track );
if( b_fill_sectorinfo )
{
int i, i_leadout = -1;
CDTOCDescriptor *pTrackDescriptors;
u_char track;
p_toc->p_sectors = calloc( p_toc->i_tracks + 1,
sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
vcddev_toc_Free( p_toc );
darwin_freeTOC( pTOC );
return NULL;
}
int i, i_leadout = -1;
CDTOCDescriptor *pTrackDescriptors;
u_char track;
pTrackDescriptors = pTOC->descriptors;
p_toc->p_sectors = calloc( p_toc->i_tracks + 1,
sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
vcddev_toc_Free( p_toc );
darwin_freeTOC( pTOC );
return NULL;
}
for( p_toc->i_tracks = 0, i = 0; i < i_descriptors; i++ )
{
track = pTrackDescriptors[i].point;
pTrackDescriptors = pTOC->descriptors;
if( track == 0xA2 )
i_leadout = i;
for( p_toc->i_tracks = 0, i = 0; i < i_descriptors; i++ )
{
track = pTrackDescriptors[i].point;
if( track > CD_MAX_TRACK_NO || track < CD_MIN_TRACK_NO )
continue;
if( track == 0xA2 )
i_leadout = i;
p_toc->p_sectors[p_toc->i_tracks].i_control = pTrackDescriptors[i].control;
p_toc->p_sectors[p_toc->i_tracks++].i_lba =
CDConvertMSFToLBA( pTrackDescriptors[i].p );
}
if( track > CD_MAX_TRACK_NO || track < CD_MIN_TRACK_NO )
continue;
if( i_leadout == -1 )
{
msg_Err( p_this, "leadout not found" );
vcddev_toc_Free( p_toc );
darwin_freeTOC( pTOC );
return NULL;
}
p_toc->p_sectors[p_toc->i_tracks].i_control = pTrackDescriptors[i].control;
p_toc->p_sectors[p_toc->i_tracks++].i_lba =
CDConvertMSFToLBA( pTrackDescriptors[i].p );
}
/* set leadout sector */
p_toc->p_sectors[p_toc->i_tracks].i_lba =
CDConvertMSFToLBA( pTrackDescriptors[i_leadout].p );
if( i_leadout == -1 )
{
msg_Err( p_this, "leadout not found" );
vcddev_toc_Free( p_toc );
darwin_freeTOC( pTOC );
return NULL;
}
/* set leadout sector */
p_toc->p_sectors[p_toc->i_tracks].i_lba =
CDConvertMSFToLBA( pTrackDescriptors[i_leadout].p );
darwin_freeTOC( pTOC );
#elif defined( _WIN32 )
DWORD dwBytesReturned;
CDROM_TOC cdrom_toc;
if( DeviceIoControl( p_vcddev->h_device_handle, IOCTL_CDROM_READ_TOC,
NULL, 0, &cdrom_toc, sizeof(CDROM_TOC),
&dwBytesReturned, NULL ) == 0 )
CDROM_READ_TOC_EX TOCEx = { .Format = CDROM_READ_TOC_EX_FORMAT_TOC, .Msf = 0 };
if( DeviceIoControl( p_vcddev->h_device_handle, IOCTL_CDROM_READ_TOC_EX,
&TOCEx, sizeof(TOCEx),
&cdrom_toc, sizeof(cdrom_toc), &dwBytesReturned, 0 ) == 0 )
{
msg_Err( p_this, "could not read TOCHDR" );
vcddev_toc_Free( p_toc );
......@@ -378,24 +372,24 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
p_toc->i_first_track = cdrom_toc.FirstTrack;
p_toc->i_last_track = cdrom_toc.LastTrack;
if( b_fill_sectorinfo )
if ( cdrom_toc.TrackData[p_toc->i_tracks].TrackNumber != 0xAA )
msg_Warn(p_this, "leadout not read properly");
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
vcddev_toc_Free( p_toc );
return NULL;
}
vcddev_toc_Free( p_toc );
return NULL;
}
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
p_toc->p_sectors[ i ].i_control = cdrom_toc.TrackData[i].Control;
p_toc->p_sectors[ i ].i_lba = MSF_TO_LBA2(
cdrom_toc.TrackData[i].Address[1],
cdrom_toc.TrackData[i].Address[2],
cdrom_toc.TrackData[i].Address[3] );
msg_Dbg( p_this, "p_sectors: %i, %i", i, p_toc->p_sectors[i].i_lba);
}
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
p_toc->p_sectors[ i ].i_control = cdrom_toc.TrackData[i].Control;
p_toc->p_sectors[ i ].i_lba = (unsigned)cdrom_toc.TrackData[i].Address[0] << 24 |
(unsigned)cdrom_toc.TrackData[i].Address[1] << 16 |
(unsigned)cdrom_toc.TrackData[i].Address[2] << 8 |
(unsigned)cdrom_toc.TrackData[i].Address[3];
msg_Dbg( p_this, "p_sectors: %i, %i", i, p_toc->p_sectors[i].i_lba);
}
#elif defined( __OS2__ )
......@@ -420,49 +414,46 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
p_toc->i_first_track = tochdr.first_track;
p_toc->i_last_track = tochdr.last_track;
if( b_fill_sectorinfo )
cdrom_get_track_t get_track = {{'C', 'D', '0', '1'}, };
cdrom_track_t track;
int i;
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
cdrom_get_track_t get_track = {{'C', 'D', '0', '1'}, };
cdrom_track_t track;
int i;
vcddev_toc_Free( p_toc );
return NULL;
}
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
for( i = 0 ; i < p_toc->i_tracks ; i++ )
{
get_track.track = tochdr.first_track + i;
rc = DosDevIOCtl( p_vcddev->hcd, IOCTL_CDROMAUDIO,
CDROMAUDIO_GETAUDIOTRACK,
&get_track, sizeof(get_track), &param_len,
&track, sizeof(track), &data_len );
if (rc)
{
msg_Err( p_this, "could not read %d track",
get_track.track );
vcddev_toc_Free( p_toc );
return NULL;
}
for( i = 0 ; i < p_toc->i_tracks ; i++ )
{
get_track.track = tochdr.first_track + i;
rc = DosDevIOCtl( p_vcddev->hcd, IOCTL_CDROMAUDIO,
CDROMAUDIO_GETAUDIOTRACK,
&get_track, sizeof(get_track), &param_len,
&track, sizeof(track), &data_len );
if (rc)
{
msg_Err( p_this, "could not read %d track",
get_track.track );
vcddev_toc_Free( p_toc );
return NULL;
}
p_toc->p_sectors[ i ].i_lba = MSF_TO_LBA2(
track.start.minute,
track.start.second,
track.start.frame );
msg_Dbg( p_this, "p_sectors: %i, %i", i, p_toc->p_sectors[i].i_lba);
}
/* for lead-out track */
p_toc->p_sectors[ i ].i_lba = MSF_TO_LBA2(
tochdr.lead_out.minute,
tochdr.lead_out.second,
tochdr.lead_out.frame );
track.start.minute,
track.start.second,
track.start.frame );
msg_Dbg( p_this, "p_sectors: %i, %i", i, p_toc->p_sectors[i].i_lba);
}
/* for lead-out track */
p_toc->p_sectors[ i ].i_lba = MSF_TO_LBA2(
tochdr.lead_out.minute,
tochdr.lead_out.second,
tochdr.lead_out.frame );
msg_Dbg( p_this, "p_sectors: %i, %i", i, p_toc->p_sectors[i].i_lba);
#elif defined( HAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H ) \
|| defined( HAVE_SCSIREQ_IN_SYS_SCSIIO_H )
struct ioc_toc_header tochdr;
......@@ -480,47 +471,44 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
p_toc->i_first_track = tochdr.starting_track;
p_toc->i_last_track = tochdr.ending_track;
if( b_fill_sectorinfo )
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
vcddev_toc_Free( p_toc );
return NULL;
}
toc_entries.address_format = CD_LBA_FORMAT;
toc_entries.starting_track = 0;
toc_entries.data_len = ( p_toc->i_tracks + 1 ) *
sizeof( struct cd_toc_entry );
toc_entries.data = (struct cd_toc_entry *)
malloc( toc_entries.data_len );
if( toc_entries.data == NULL )
{
vcddev_toc_Free( p_toc );
return NULL;
}
/* Read the TOC */
if( ioctl( p_vcddev->i_device_handle, CDIOREADTOCENTRYS,
&toc_entries ) == -1 )
{
msg_Err( p_this, "could not read the TOC" );
free( toc_entries.data );
vcddev_toc_Free( p_toc );
return NULL;
}
/* Fill the p_sectors structure with the track/sector matches */
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
vcddev_toc_Free( p_toc );
return NULL;
}
toc_entries.address_format = CD_LBA_FORMAT;
toc_entries.starting_track = 0;
toc_entries.data_len = ( p_toc->i_tracks + 1 ) *
sizeof( struct cd_toc_entry );
toc_entries.data = (struct cd_toc_entry *)
malloc( toc_entries.data_len );
if( toc_entries.data == NULL )
{
vcddev_toc_Free( p_toc );
return NULL;
}
/* Read the TOC */
if( ioctl( p_vcddev->i_device_handle, CDIOREADTOCENTRYS,
&toc_entries ) == -1 )
{
msg_Err( p_this, "could not read the TOC" );
free( toc_entries.data );
vcddev_toc_Free( p_toc );
return NULL;
}
/* Fill the p_sectors structure with the track/sector matches */
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
#if defined( HAVE_SCSIREQ_IN_SYS_SCSIIO_H )
/* FIXME: is this ok? */
p_toc->p_sectors[ i ].i_lba = toc_entries.data[i].addr.lba;
/* FIXME: is this ok? */
p_toc->p_sectors[ i ].i_lba = toc_entries.data[i].addr.lba;
#else
p_toc->p_sectors[ i ].i_lba = ntohl( toc_entries.data[i].addr.lba );
p_toc->p_sectors[ i ].i_lba = ntohl( toc_entries.data[i].addr.lba );
#endif
}
}
#else
struct cdrom_tochdr tochdr;
......@@ -539,34 +527,31 @@ vcddev_toc_t * ioctl_GetTOC( vlc_object_t *p_this, const vcddev_t *p_vcddev,
p_toc->i_first_track = tochdr.cdth_trk0;
p_toc->i_last_track = tochdr.cdth_trk1;
if( b_fill_sectorinfo )
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
{
free( p_toc );
return NULL;
}
/* Fill the p_sectors structure with the track/sector matches */
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
p_toc->p_sectors = calloc( p_toc->i_tracks + 1, sizeof(*p_toc->p_sectors) );
if( p_toc->p_sectors == NULL )
tocent.cdte_format = CDROM_LBA;
tocent.cdte_track =
( i == p_toc->i_tracks ) ? CDROM_LEADOUT : tochdr.cdth_trk0 + i;
if( ioctl( p_vcddev->i_device_handle, CDROMREADTOCENTRY,
&tocent ) == -1 )
{
msg_Err( p_this, "could not read TOCENTRY" );
free( p_toc->p_sectors );
free( p_toc );
return NULL;
}
/* Fill the p_sectors structure with the track/sector matches */
for( int i = 0 ; i <= p_toc->i_tracks ; i++ )
{
tocent.cdte_format = CDROM_LBA;
tocent.cdte_track =
( i == p_toc->i_tracks ) ? CDROM_LEADOUT : tochdr.cdth_trk0 + i;
if( ioctl( p_vcddev->i_device_handle, CDROMREADTOCENTRY,
&tocent ) == -1 )
{
msg_Err( p_this, "could not read TOCENTRY" );
free( p_toc->p_sectors );
free( p_toc );
return NULL;
}
p_toc->p_sectors[ i ].i_lba = tocent.cdte_addr.lba;
p_toc->p_sectors[ i ].i_control = tocent.cdte_ctrl;
}
p_toc->p_sectors[ i ].i_lba = tocent.cdte_addr.lba;
p_toc->p_sectors[ i ].i_control = tocent.cdte_ctrl;
}
#endif
......
......@@ -146,7 +146,7 @@ typedef struct entries_sect_s
*****************************************************************************/
vcddev_t *ioctl_Open ( vlc_object_t *, const char * );
void ioctl_Close ( vlc_object_t *, vcddev_t * );
vcddev_toc_t * ioctl_GetTOC ( vlc_object_t *, const vcddev_t *, bool );
vcddev_toc_t * ioctl_GetTOC ( vlc_object_t *, const vcddev_t * );
int ioctl_ReadSectors ( vlc_object_t *, const vcddev_t *,
int, uint8_t *, int, int );
......
......@@ -114,6 +114,11 @@ typedef struct _CDROM_READ_TOC_EX {
#define MINIMUM_CDROM_READ_TOC_EX_SIZE 2
#define CDROM_READ_TOC_EX_FORMAT_TOC 0x00
#define CDROM_READ_TOC_EX_FORMAT_SESSION 0x01
#define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02
#define CDROM_READ_TOC_EX_FORMAT_PMA 0x03
#define CDROM_READ_TOC_EX_FORMAT_ATIP 0x04
#define CDROM_READ_TOC_EX_FORMAT_CDTEXT 0x05
#endif /* _WIN32 */
......
......@@ -152,7 +152,7 @@ static int Open( vlc_object_t *p_this )
p_sys->titles[i].seekpoints = NULL;
/* We read the Table Of Content information */
p_sys->p_toc = ioctl_GetTOC( VLC_OBJECT(p_access), p_sys->vcddev, true );
p_sys->p_toc = ioctl_GetTOC( VLC_OBJECT(p_access), p_sys->vcddev );
if( p_sys->p_toc == NULL )
{
msg_Err( p_access, "unable to count tracks" );
......