diff options
| author | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-05-31 22:24:29 +0200 |
|---|---|---|
| committer | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-05-31 22:24:29 +0200 |
| commit | b535c2d4f8d84adb22c741170e6fd11b3cfc4478 (patch) | |
| tree | 5407f0612431d38a40d3aae1919010a76175d10c /src/input/vcd/libvcd/image_nrg.c | |
| parent | 5fbadac433d89261d4d00830d7d3ed55503285d5 (diff) | |
| download | xine-lib-b535c2d4f8d84adb22c741170e6fd11b3cfc4478.tar.gz xine-lib-b535c2d4f8d84adb22c741170e6fd11b3cfc4478.tar.bz2 | |
Move libcdio and libvcd into contrib/
--HG--
rename : src/input/vcd/libcdio/FreeBSD/freebsd.c => contrib/libcdio/FreeBSD/freebsd.c
rename : src/input/vcd/libcdio/FreeBSD/freebsd.h => contrib/libcdio/FreeBSD/freebsd.h
rename : src/input/vcd/libcdio/FreeBSD/freebsd_cam.c => contrib/libcdio/FreeBSD/freebsd_cam.c
rename : src/input/vcd/libcdio/FreeBSD/freebsd_ioctl.c => contrib/libcdio/FreeBSD/freebsd_ioctl.c
rename : src/input/vcd/libcdio/MSWindows/Makefile.am => contrib/libcdio/MSWindows/Makefile.am
rename : src/input/vcd/libcdio/MSWindows/aspi32.c => contrib/libcdio/MSWindows/aspi32.c
rename : src/input/vcd/libcdio/MSWindows/aspi32.h => contrib/libcdio/MSWindows/aspi32.h
rename : src/input/vcd/libcdio/MSWindows/win32.c => contrib/libcdio/MSWindows/win32.c
rename : src/input/vcd/libcdio/MSWindows/win32.h => contrib/libcdio/MSWindows/win32.h
rename : src/input/vcd/libcdio/MSWindows/win32_ioctl.c => contrib/libcdio/MSWindows/win32_ioctl.c
rename : src/input/vcd/libcdio/Makefile.am => contrib/libcdio/Makefile.am
rename : src/input/vcd/libcdio/_cdio_bsdi.c => contrib/libcdio/_cdio_bsdi.c
rename : src/input/vcd/libcdio/_cdio_generic.c => contrib/libcdio/_cdio_generic.c
rename : src/input/vcd/libcdio/_cdio_linux.c => contrib/libcdio/_cdio_linux.c
rename : src/input/vcd/libcdio/_cdio_osx.c => contrib/libcdio/_cdio_osx.c
rename : src/input/vcd/libcdio/_cdio_stdio.c => contrib/libcdio/_cdio_stdio.c
rename : src/input/vcd/libcdio/_cdio_stdio.h => contrib/libcdio/_cdio_stdio.h
rename : src/input/vcd/libcdio/_cdio_stream.c => contrib/libcdio/_cdio_stream.c
rename : src/input/vcd/libcdio/_cdio_stream.h => contrib/libcdio/_cdio_stream.h
rename : src/input/vcd/libcdio/_cdio_sunos.c => contrib/libcdio/_cdio_sunos.c
rename : src/input/vcd/libcdio/cd_types.c => contrib/libcdio/cd_types.c
rename : src/input/vcd/libcdio/cdio.c => contrib/libcdio/cdio.c
rename : src/input/vcd/libcdio/cdio/Makefile.am => contrib/libcdio/cdio/Makefile.am
rename : src/input/vcd/libcdio/cdio/bytesex.h => contrib/libcdio/cdio/bytesex.h
rename : src/input/vcd/libcdio/cdio/bytesex_asm.h => contrib/libcdio/cdio/bytesex_asm.h
rename : src/input/vcd/libcdio/cdio/cd_types.h => contrib/libcdio/cdio/cd_types.h
rename : src/input/vcd/libcdio/cdio/cdio.h => contrib/libcdio/cdio/cdio.h
rename : src/input/vcd/libcdio/cdio/cdtext.h => contrib/libcdio/cdio/cdtext.h
rename : src/input/vcd/libcdio/cdio/ds.h => contrib/libcdio/cdio/ds.h
rename : src/input/vcd/libcdio/cdio/dvd.h => contrib/libcdio/cdio/dvd.h
rename : src/input/vcd/libcdio/cdio/iso9660.h => contrib/libcdio/cdio/iso9660.h
rename : src/input/vcd/libcdio/cdio/logging.h => contrib/libcdio/cdio/logging.h
rename : src/input/vcd/libcdio/cdio/scsi_mmc.h => contrib/libcdio/cdio/scsi_mmc.h
rename : src/input/vcd/libcdio/cdio/sector.h => contrib/libcdio/cdio/sector.h
rename : src/input/vcd/libcdio/cdio/types.h => contrib/libcdio/cdio/types.h
rename : src/input/vcd/libcdio/cdio/util.h => contrib/libcdio/cdio/util.h
rename : src/input/vcd/libcdio/cdio/version.h => contrib/libcdio/cdio/version.h
rename : src/input/vcd/libcdio/cdio/xa.h => contrib/libcdio/cdio/xa.h
rename : src/input/vcd/libcdio/cdio_assert.h => contrib/libcdio/cdio_assert.h
rename : src/input/vcd/libcdio/cdio_private.h => contrib/libcdio/cdio_private.h
rename : src/input/vcd/libcdio/cdtext.c => contrib/libcdio/cdtext.c
rename : src/input/vcd/libcdio/cdtext_private.h => contrib/libcdio/cdtext_private.h
rename : src/input/vcd/libcdio/ds.c => contrib/libcdio/ds.c
rename : src/input/vcd/libcdio/generic.h => contrib/libcdio/generic.h
rename : src/input/vcd/libcdio/image.h => contrib/libcdio/image.h
rename : src/input/vcd/libcdio/image/Makefile.am => contrib/libcdio/image/Makefile.am
rename : src/input/vcd/libcdio/image/bincue.c => contrib/libcdio/image/bincue.c
rename : src/input/vcd/libcdio/image/cdrdao.c => contrib/libcdio/image/cdrdao.c
rename : src/input/vcd/libcdio/image/nrg.c => contrib/libcdio/image/nrg.c
rename : src/input/vcd/libcdio/image/nrg.h => contrib/libcdio/image/nrg.h
rename : src/input/vcd/libcdio/image_common.h => contrib/libcdio/image_common.h
rename : src/input/vcd/libcdio/iso9660.c => contrib/libcdio/iso9660.c
rename : src/input/vcd/libcdio/iso9660_fs.c => contrib/libcdio/iso9660_fs.c
rename : src/input/vcd/libcdio/iso9660_private.h => contrib/libcdio/iso9660_private.h
rename : src/input/vcd/libcdio/logging.c => contrib/libcdio/logging.c
rename : src/input/vcd/libcdio/portable.h => contrib/libcdio/portable.h
rename : src/input/vcd/libcdio/scsi_mmc.c => contrib/libcdio/scsi_mmc.c
rename : src/input/vcd/libcdio/scsi_mmc.h => contrib/libcdio/scsi_mmc.h
rename : src/input/vcd/libcdio/scsi_mmc_private.h => contrib/libcdio/scsi_mmc_private.h
rename : src/input/vcd/libcdio/sector.c => contrib/libcdio/sector.c
rename : src/input/vcd/libcdio/util.c => contrib/libcdio/util.c
rename : src/input/vcd/libcdio/xa.c => contrib/libcdio/xa.c
rename : src/input/vcd/libvcd/Makefile.am => contrib/libvcd/Makefile.am
rename : src/input/vcd/libvcd/bitvec.h => contrib/libvcd/bitvec.h
rename : src/input/vcd/libvcd/bytesex.h => contrib/libvcd/bytesex.h
rename : src/input/vcd/libvcd/bytesex_asm.h => contrib/libvcd/bytesex_asm.h
rename : src/input/vcd/libvcd/data_structures.c => contrib/libvcd/data_structures.c
rename : src/input/vcd/libvcd/data_structures.h => contrib/libvcd/data_structures.h
rename : src/input/vcd/libvcd/dict.h => contrib/libvcd/dict.h
rename : src/input/vcd/libvcd/directory.c => contrib/libvcd/directory.c
rename : src/input/vcd/libvcd/directory.h => contrib/libvcd/directory.h
rename : src/input/vcd/libvcd/files.c => contrib/libvcd/files.c
rename : src/input/vcd/libvcd/image.c => contrib/libvcd/image.c
rename : src/input/vcd/libvcd/image_bincue.c => contrib/libvcd/image_bincue.c
rename : src/input/vcd/libvcd/image_cdrdao.c => contrib/libvcd/image_cdrdao.c
rename : src/input/vcd/libvcd/image_nrg.c => contrib/libvcd/image_nrg.c
rename : src/input/vcd/libvcd/image_sink.h => contrib/libvcd/image_sink.h
rename : src/input/vcd/libvcd/inf.c => contrib/libvcd/inf.c
rename : src/input/vcd/libvcd/info.c => contrib/libvcd/info.c
rename : src/input/vcd/libvcd/info_private.c => contrib/libvcd/info_private.c
rename : src/input/vcd/libvcd/info_private.h => contrib/libvcd/info_private.h
rename : src/input/vcd/libvcd/libvcd/Makefile.am => contrib/libvcd/libvcd/Makefile.am
rename : src/input/vcd/libvcd/libvcd/files.h => contrib/libvcd/libvcd/files.h
rename : src/input/vcd/libvcd/libvcd/files_private.h => contrib/libvcd/libvcd/files_private.h
rename : src/input/vcd/libvcd/libvcd/inf.h => contrib/libvcd/libvcd/inf.h
rename : src/input/vcd/libvcd/libvcd/info.h => contrib/libvcd/libvcd/info.h
rename : src/input/vcd/libvcd/libvcd/logging.h => contrib/libvcd/libvcd/logging.h
rename : src/input/vcd/libvcd/libvcd/sector.h => contrib/libvcd/libvcd/sector.h
rename : src/input/vcd/libvcd/libvcd/types.h => contrib/libvcd/libvcd/types.h
rename : src/input/vcd/libvcd/libvcd/version.h => contrib/libvcd/libvcd/version.h
rename : src/input/vcd/libvcd/logging.c => contrib/libvcd/logging.c
rename : src/input/vcd/libvcd/mpeg.c => contrib/libvcd/mpeg.c
rename : src/input/vcd/libvcd/mpeg.h => contrib/libvcd/mpeg.h
rename : src/input/vcd/libvcd/mpeg_stream.c => contrib/libvcd/mpeg_stream.c
rename : src/input/vcd/libvcd/mpeg_stream.h => contrib/libvcd/mpeg_stream.h
rename : src/input/vcd/libvcd/obj.h => contrib/libvcd/obj.h
rename : src/input/vcd/libvcd/pbc.c => contrib/libvcd/pbc.c
rename : src/input/vcd/libvcd/pbc.h => contrib/libvcd/pbc.h
rename : src/input/vcd/libvcd/salloc.c => contrib/libvcd/salloc.c
rename : src/input/vcd/libvcd/salloc.h => contrib/libvcd/salloc.h
rename : src/input/vcd/libvcd/sector.c => contrib/libvcd/sector.c
rename : src/input/vcd/libvcd/sector_private.h => contrib/libvcd/sector_private.h
rename : src/input/vcd/libvcd/stream.c => contrib/libvcd/stream.c
rename : src/input/vcd/libvcd/stream.h => contrib/libvcd/stream.h
rename : src/input/vcd/libvcd/stream_stdio.c => contrib/libvcd/stream_stdio.c
rename : src/input/vcd/libvcd/stream_stdio.h => contrib/libvcd/stream_stdio.h
rename : src/input/vcd/libvcd/util.c => contrib/libvcd/util.c
rename : src/input/vcd/libvcd/util.h => contrib/libvcd/util.h
rename : src/input/vcd/libvcd/vcd.c => contrib/libvcd/vcd.c
rename : src/input/vcd/libvcd/vcd.h => contrib/libvcd/vcd.h
rename : src/input/vcd/libvcd/vcd_assert.h => contrib/libvcd/vcd_assert.h
rename : src/input/vcd/libvcd/vcd_read.c => contrib/libvcd/vcd_read.c
rename : src/input/vcd/libvcd/vcd_read.h => contrib/libvcd/vcd_read.h
Diffstat (limited to 'src/input/vcd/libvcd/image_nrg.c')
| -rw-r--r-- | src/input/vcd/libvcd/image_nrg.c | 352 |
1 files changed, 0 insertions, 352 deletions
diff --git a/src/input/vcd/libvcd/image_nrg.c b/src/input/vcd/libvcd/image_nrg.c deleted file mode 100644 index 1faeb98a9..000000000 --- a/src/input/vcd/libvcd/image_nrg.c +++ /dev/null @@ -1,352 +0,0 @@ -/* - $Id: image_nrg.c,v 1.4 2006/09/27 05:41:40 dgp85 Exp $ - - Copyright (C) 2001, 2003, 2004 Herbert Valerio Riedel <hvr@gnu.org> - - This program 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. - - This program 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -/*! This code implements low-level access functions for Nero's native - CD-image format residing inside a disk file (*.nrg). -*/ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <cdio/cdio.h> -#include <cdio/bytesex.h> -#include <cdio/iso9660.h> - -/* Public headers */ -#include <libvcd/sector.h> -#include <libvcd/logging.h> - -/* Private headers */ -#include "vcd_assert.h" -#include "image_sink.h" -#include "stream_stdio.h" -#include "util.h" - -static const char _rcsid[] = "$Id: image_nrg.c,v 1.4 2006/09/27 05:41:40 dgp85 Exp $"; - -/* structures used */ - -/* this ugly image format is typical for lazy win32 programmers... at - least structure were set big endian, so at reverse - engineering wasn't such a big headache... */ - -PRAGMA_BEGIN_PACKED -typedef struct { - uint32_t start GNUC_PACKED; - uint32_t length GNUC_PACKED; - uint32_t type GNUC_PACKED; /* only 0x3 seen so far... - -> MIXED_MODE2 2336 blocksize */ - uint32_t start_lsn GNUC_PACKED; /* does not include any pre-gaps! */ - uint32_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ -} _etnf_array_t; - -/* finally they realized that 32bit offsets are a bit outdated for IA64 *eg* */ -typedef struct { - uint64_t start GNUC_PACKED; - uint64_t length GNUC_PACKED; - uint32_t type GNUC_PACKED; - uint32_t start_lsn GNUC_PACKED; - uint64_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ -} _etn2_array_t; - -typedef struct { - uint8_t _unknown1 GNUC_PACKED; /* 0x41 == 'A' */ - uint8_t track GNUC_PACKED; /* binary or BCD?? */ - uint8_t index GNUC_PACKED; /* makes 0->1 transitions */ - uint8_t _unknown2 GNUC_PACKED; /* ?? */ - uint32_t lsn GNUC_PACKED; -} _cuex_array_t; - -typedef struct { - uint32_t id GNUC_PACKED; - uint32_t len GNUC_PACKED; - char data[EMPTY_ARRAY_SIZE] GNUC_PACKED; -} _chunk_t; - -PRAGMA_END_PACKED - -/* to be converted into BE */ -#define CUEX_ID 0x43554558 -#define CUES_ID 0x43554553 -#define DAOX_ID 0x44414f58 -#define DAOI_ID 0x44414f49 -#define END1_ID 0x454e4421 -#define ETN2_ID 0x45544e32 -#define ETNF_ID 0x45544e46 -#define NER5_ID 0x4e455235 -#define NERO_ID 0x4e45524f -#define SINF_ID 0x53494e46 - -/**************************************************************************** - * writer - */ - -typedef struct { - VcdDataSink *nrg_snk; - char *nrg_fname; - - CdioList *vcd_cue_list; - int tracks; - uint32_t cue_end_lsn; - - bool init; -} _img_nrg_snk_t; - -static void -_sink_init (_img_nrg_snk_t *_obj) -{ - if (_obj->init) - return; - - if (!(_obj->nrg_snk = vcd_data_sink_new_stdio (_obj->nrg_fname))) - vcd_error ("init failed"); - - _obj->init = true; -} - - -static void -_sink_free (void *user_data) -{ - _img_nrg_snk_t *_obj = user_data; - - free (_obj->nrg_fname); - vcd_data_sink_destroy (_obj->nrg_snk); - - free (_obj); -} - -static int -_set_cuesheet (void *user_data, const CdioList *vcd_cue_list) -{ - _img_nrg_snk_t *_obj = user_data; - CdioListNode *node; - int num; - - _sink_init (_obj); - - _obj->vcd_cue_list = _cdio_list_new (); - - num = 0; - _CDIO_LIST_FOREACH (node, (CdioList *) vcd_cue_list) - { - const vcd_cue_t *_cue = _cdio_list_node_data (node); - vcd_cue_t *_cue2 = _vcd_malloc (sizeof (vcd_cue_t)); - *_cue2 = *_cue; - _cdio_list_append (_obj->vcd_cue_list, _cue2); - - if (_cue->type == VCD_CUE_TRACK_START) - num++; - - if (_cue->type == VCD_CUE_END) - _obj->cue_end_lsn = _cue->lsn; - } - - _obj->tracks = num; - - vcd_assert (CDIO_CD_MIN_TRACK_NO >= 1 && num <= CDIO_CD_MAX_TRACKS); - - return 0; -} - -static uint32_t -_map (_img_nrg_snk_t *_obj, uint32_t lsn) -{ - CdioListNode *node; - uint32_t result = lsn; - vcd_cue_t *_cue = NULL, *_last = NULL; - - vcd_assert (_obj->cue_end_lsn > lsn); - - _CDIO_LIST_FOREACH (node, _obj->vcd_cue_list) - { - _cue = _cdio_list_node_data (node); - - if (lsn < _cue->lsn) - break; - - switch (_cue->type) - { - case VCD_CUE_TRACK_START: - result -= _cue->lsn; - break; - case VCD_CUE_PREGAP_START: - result += _cue->lsn; - break; - default: - break; - } - - _last = _cue; - } - - vcd_assert (node != NULL); - vcd_assert (_last != NULL); - - switch (_last->type) - { - case VCD_CUE_TRACK_START: - return result; - break; - - case VCD_CUE_PREGAP_START: - return -1; - break; - - default: - case VCD_CUE_END: - vcd_assert_not_reached (); - break; - } - - return -1; -} - -static int -_write_tail (_img_nrg_snk_t *_obj, uint32_t offset) -{ - CdioListNode *node; - int _size; - _chunk_t _chunk; - - vcd_data_sink_seek (_obj->nrg_snk, offset); - - _size = _obj->tracks * sizeof (_etnf_array_t); - _chunk.id = UINT32_TO_BE (ETNF_ID); - _chunk.len = uint32_to_be (_size); - - vcd_data_sink_write (_obj->nrg_snk, &_chunk, sizeof (_chunk_t), 1); - - _CDIO_LIST_FOREACH (node, _obj->vcd_cue_list) - { - vcd_cue_t *_cue = _cdio_list_node_data (node); - - if (_cue->type == VCD_CUE_TRACK_START) - { - vcd_cue_t *_cue2 = - _cdio_list_node_data (_cdio_list_node_next (node)); - - _etnf_array_t _etnf = { 0, }; - - _etnf.type = UINT32_TO_BE (0x3); - _etnf.start_lsn = uint32_to_be (_map (_obj, _cue->lsn)); - _etnf.start = uint32_to_be (_map (_obj, _cue->lsn) * M2RAW_SECTOR_SIZE); - - _etnf.length = uint32_to_be ((_cue2->lsn - _cue->lsn) * M2RAW_SECTOR_SIZE); - - vcd_data_sink_write (_obj->nrg_snk, &_etnf, sizeof (_etnf_array_t), 1); - } - - } - - { - uint32_t tracks = uint32_to_be (_obj->tracks); - - _chunk.id = UINT32_TO_BE (SINF_ID); - _chunk.len = UINT32_TO_BE (sizeof (uint32_t)); - vcd_data_sink_write (_obj->nrg_snk, &_chunk, sizeof (_chunk_t), 1); - - vcd_data_sink_write (_obj->nrg_snk, &tracks, sizeof (uint32_t), 1); - } - - _chunk.id = UINT32_TO_BE (END1_ID); - _chunk.len = UINT32_TO_BE (0); - vcd_data_sink_write (_obj->nrg_snk, &_chunk, sizeof (_chunk_t), 1); - - _chunk.id = UINT32_TO_BE (NERO_ID); - _chunk.len = uint32_to_be (offset); - vcd_data_sink_write (_obj->nrg_snk, &_chunk, sizeof (_chunk_t), 1); - - return 0; -} - -static int -_vcd_image_nrg_write (void *user_data, const void *data, lsn_t lsn) -{ - const char *buf = data; - _img_nrg_snk_t *_obj = user_data; - uint32_t _lsn = _map (_obj, lsn); - - _sink_init (_obj); - - if (_lsn == -1) - { - /* vcd_debug ("ignoring %d", lsn); */ - return 0; - } - - vcd_data_sink_seek(_obj->nrg_snk, _lsn * M2RAW_SECTOR_SIZE); - vcd_data_sink_write(_obj->nrg_snk, buf + 12 + 4, M2RAW_SECTOR_SIZE, 1); - - if (_obj->cue_end_lsn - 1 == lsn) - { - vcd_debug ("ENDLSN reached! (%lu == %lu)", - (long unsigned int) lsn, (long unsigned int) _lsn); - return _write_tail (_obj, (_lsn + 1) * M2RAW_SECTOR_SIZE); - } - - return 0; -} - -static int -_sink_set_arg (void *user_data, const char key[], const char value[]) -{ - _img_nrg_snk_t *_obj = user_data; - - if (!strcmp (key, "nrg")) - { - free (_obj->nrg_fname); - - if (!value) - return -2; - - _obj->nrg_fname = strdup (value); - } - else - return -1; - - return 0; -} - -VcdImageSink * -vcd_image_sink_new_nrg (void) -{ - _img_nrg_snk_t *_data; - - vcd_image_sink_funcs _funcs = { - .set_cuesheet = _set_cuesheet, - .write = _vcd_image_nrg_write, - .free = _sink_free, - .set_arg = _sink_set_arg - }; - - _data = _vcd_malloc (sizeof (_img_nrg_snk_t)); - _data->nrg_fname = strdup ("videocd.nrg"); - - vcd_warn ("opening TAO NRG image for writing; TAO (S)VCD are NOT 100%% compliant!"); - - return vcd_image_sink_new (_data, &_funcs); -} - |
