diff options
Diffstat (limited to 'src/input/vcd/libvcd/files.c')
-rw-r--r-- | src/input/vcd/libvcd/files.c | 178 |
1 files changed, 90 insertions, 88 deletions
diff --git a/src/input/vcd/libvcd/files.c b/src/input/vcd/libvcd/files.c index 47210da7f..82d28eaf7 100644 --- a/src/input/vcd/libvcd/files.c +++ b/src/input/vcd/libvcd/files.c @@ -1,7 +1,7 @@ /* - $Id: files.c,v 1.2 2004/04/11 12:20:32 miguelfreitas Exp $ + $Id: files.c,v 1.3 2005/01/01 02:43:59 rockyb Exp $ - Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> + Copyright (C) 2000, 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 @@ -28,6 +28,7 @@ #include <math.h> #include <cdio/cdio.h> +#include <cdio/bytesex.h> #include <cdio/util.h> /* Public headers */ @@ -40,13 +41,12 @@ /* Private headers */ #include "vcd_assert.h" -#include "bytesex.h" #include "mpeg_stream.h" #include "obj.h" #include "pbc.h" #include "util.h" -static const char _rcsid[] = "$Id: files.c,v 1.2 2004/04/11 12:20:32 miguelfreitas Exp $"; +static const char _rcsid[] = "$Id: files.c,v 1.3 2005/01/01 02:43:59 rockyb Exp $"; inline static bool _pal_p (const struct vcd_mpeg_stream_vid_info *_info) @@ -136,15 +136,15 @@ _derive_aud_type (const struct vcd_mpeg_stream_info *_info, bool svcd) void set_entries_vcd (VcdObj *obj, void *buf) { - VcdListNode *node = NULL; + CdioListNode *node = NULL; int idx = 0; int track_idx = 0; - EntriesVcd entries_vcd; + EntriesVcd_t entries_vcd; - vcd_assert (sizeof(EntriesVcd) == 2048); + vcd_assert (sizeof(EntriesVcd_t) == 2048); - vcd_assert (_vcd_list_length (obj->mpeg_track_list) <= MAX_ENTRIES); - vcd_assert (_vcd_list_length (obj->mpeg_track_list) > 0); + vcd_assert (_cdio_list_length (obj->mpeg_track_list) <= MAX_ENTRIES); + vcd_assert (_cdio_list_length (obj->mpeg_track_list) > 0); memset(&entries_vcd, 0, sizeof(entries_vcd)); /* paranoia / fixme */ @@ -193,29 +193,29 @@ set_entries_vcd (VcdObj *obj, void *buf) idx = 0; track_idx = 2; - _VCD_LIST_FOREACH (node, obj->mpeg_sequence_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_sequence_list) { - mpeg_sequence_t *track = _vcd_list_node_data (node); + mpeg_sequence_t *track = _cdio_list_node_data (node); uint32_t lsect = track->relative_start_extent; - VcdListNode *node2; + CdioListNode *node2; lsect += obj->iso_size; - entries_vcd.entry[idx].n = to_bcd8(track_idx); + entries_vcd.entry[idx].n = cdio_to_bcd8(track_idx); cdio_lba_to_msf(cdio_lsn_to_lba(lsect), &(entries_vcd.entry[idx].msf)); idx++; lsect += obj->track_front_margin; - _VCD_LIST_FOREACH (node2, track->entry_list) + _CDIO_LIST_FOREACH (node2, track->entry_list) { - entry_t *_entry = _vcd_list_node_data (node2); + entry_t *_entry = _cdio_list_node_data (node2); /* additional entries */ vcd_assert (idx < MAX_ENTRIES); - entries_vcd.entry[idx].n = to_bcd8(track_idx); + entries_vcd.entry[idx].n = cdio_to_bcd8(track_idx); cdio_lba_to_msf(lsect + cdio_lsn_to_lba(_entry->aps.packet_no), &(entries_vcd.entry[idx].msf)); @@ -257,16 +257,16 @@ get_psd_size (VcdObj *obj, bool extended) void set_psd_vcd (VcdObj *obj, void *buf, bool extended) { - VcdListNode *node; + CdioListNode *node; if (extended) vcd_assert (_vcd_obj_has_cap_p (obj, _CAP_PBC_X)); vcd_assert (_vcd_pbc_available (obj)); - _VCD_LIST_FOREACH (node, obj->pbc_list) + _CDIO_LIST_FOREACH (node, obj->pbc_list) { - pbc_t *_pbc = _vcd_list_node_data (node); + pbc_t *_pbc = _cdio_list_node_data (node); char *_buf = buf; unsigned offset = (extended ? _pbc->offset_ext : _pbc->offset); @@ -279,23 +279,23 @@ set_psd_vcd (VcdObj *obj, void *buf, bool extended) void set_lot_vcd(VcdObj *obj, void *buf, bool extended) { - LotVcd *lot_vcd = NULL; - VcdListNode *node; + LotVcd_t *lot_vcd = NULL; + CdioListNode *node; if (extended) vcd_assert (_vcd_obj_has_cap_p (obj, _CAP_PBC_X)); vcd_assert (_vcd_pbc_available (obj)); - lot_vcd = _vcd_malloc (sizeof (LotVcd)); - memset(lot_vcd, 0xff, sizeof(LotVcd)); + lot_vcd = _vcd_malloc (sizeof (LotVcd_t)); + memset(lot_vcd, 0xff, sizeof(LotVcd_t)); lot_vcd->reserved = 0x0000; - _VCD_LIST_FOREACH (node, obj->pbc_list) + _CDIO_LIST_FOREACH (node, obj->pbc_list) { - pbc_t *_pbc = _vcd_list_node_data (node); - unsigned offset = extended ? _pbc->offset_ext : _pbc->offset; + pbc_t *_pbc = _cdio_list_node_data (node); + unsigned int offset = extended ? _pbc->offset_ext : _pbc->offset; vcd_assert (offset % INFO_OFFSET_MULT == 0); @@ -307,19 +307,19 @@ set_lot_vcd(VcdObj *obj, void *buf, bool extended) lot_vcd->offset[_pbc->lid - 1] = uint16_to_be (offset); } - memcpy(buf, lot_vcd, sizeof(LotVcd)); + memcpy(buf, lot_vcd, sizeof(LotVcd_t)); free(lot_vcd); } void set_info_vcd(VcdObj *obj, void *buf) { - InfoVcd info_vcd; - VcdListNode *node = NULL; + InfoVcd_t info_vcd; + CdioListNode *node = NULL; int n = 0; - vcd_assert (sizeof (InfoVcd) == 2048); - vcd_assert (_vcd_list_length (obj->mpeg_track_list) <= 98); + vcd_assert (sizeof (InfoVcd_t) == 2048); + vcd_assert (_cdio_list_length (obj->mpeg_track_list) <= 98); memset (&info_vcd, 0, sizeof (info_vcd)); @@ -373,9 +373,9 @@ set_info_vcd(VcdObj *obj, void *buf) /* NTSC/PAL bitset */ n = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - mpeg_track_t *track = _vcd_list_node_data (node); + mpeg_track_t *track = _cdio_list_node_data (node); const struct vcd_mpeg_stream_vid_info *_info = &track->info->shdr[0]; @@ -407,7 +407,7 @@ set_info_vcd(VcdObj *obj, void *buf) info_vcd.offset_mult = _vcd_pbc_available (obj) ? INFO_OFFSET_MULT : 0; info_vcd.lot_entries = uint16_to_be (_vcd_pbc_max_lid (obj)); - if (_vcd_list_length (obj->mpeg_segment_list)) + if (_cdio_list_length (obj->mpeg_segment_list)) { unsigned segments = 0; @@ -415,9 +415,9 @@ set_info_vcd(VcdObj *obj, void *buf) vcd_warn ("segment items available, but no PBC items set!" " SPIs will be unreachable"); - _VCD_LIST_FOREACH (node, obj->mpeg_segment_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_segment_list) { - mpeg_segment_t *segment = _vcd_list_node_data (node); + mpeg_segment_t *segment = _cdio_list_node_data (node); unsigned idx; InfoSpiContents contents = { 0, }; @@ -465,20 +465,20 @@ set_tracks_svd_v30 (VcdObj *obj, void *buf) { char tracks_svd_buf[ISO_BLOCKSIZE] = { 0, }; TracksSVD_v30 *tracks_svd = (void *) tracks_svd_buf; - VcdListNode *node; + CdioListNode *node; double playtime; int n; strncpy (tracks_svd->file_id, TRACKS_SVD_FILE_ID, sizeof (TRACKS_SVD_FILE_ID)); tracks_svd->version = TRACKS_SVD_VERSION; - tracks_svd->tracks = _vcd_list_length (obj->mpeg_track_list); + tracks_svd->tracks = _cdio_list_length (obj->mpeg_track_list); n = 0; playtime = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - mpeg_track_t *track = _vcd_list_node_data (node); + mpeg_track_t *track = _cdio_list_node_data (node); int i; playtime += track->info->playing_time; @@ -502,7 +502,8 @@ set_tracks_svd_v30 (VcdObj *obj, void *buf) f = modf(playtime, &i); cdio_lba_to_msf (i * 75, &tracks_svd->track[n].cum_playing_time); - tracks_svd->track[n].cum_playing_time.f = to_bcd8 (floor (f * 75.0)); + tracks_svd->track[n].cum_playing_time.f = + cdio_to_bcd8 (floor (f * 75.0)); } n++; @@ -517,7 +518,7 @@ set_tracks_svd (VcdObj *obj, void *buf) char tracks_svd[ISO_BLOCKSIZE] = { 0, }; TracksSVD *tracks_svd1 = (void *) tracks_svd; TracksSVD2 *tracks_svd2; - VcdListNode *node; + CdioListNode *node; int n; vcd_assert (_vcd_obj_has_cap_p (obj, _CAP_4C_SVCD)); @@ -533,15 +534,15 @@ set_tracks_svd (VcdObj *obj, void *buf) strncpy (tracks_svd1->file_id, TRACKS_SVD_FILE_ID, sizeof (TRACKS_SVD_FILE_ID)); tracks_svd1->version = TRACKS_SVD_VERSION; - tracks_svd1->tracks = _vcd_list_length (obj->mpeg_track_list); + tracks_svd1->tracks = _cdio_list_length (obj->mpeg_track_list); tracks_svd2 = (void *) &(tracks_svd1->playing_time[tracks_svd1->tracks]); n = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - mpeg_track_t *track = _vcd_list_node_data (node); + mpeg_track_t *track = _cdio_list_node_data (node); const double playtime = track->info->playing_time; int _video; @@ -574,7 +575,7 @@ set_tracks_svd (VcdObj *obj, void *buf) } cdio_lba_to_msf (i * 75, &(tracks_svd1->playing_time[n])); - tracks_svd1->playing_time[n].f = to_bcd8 (floor (f * 75.0)); + tracks_svd1->playing_time[n].f = cdio_to_bcd8 (floor (f * 75.0)); } n++; @@ -587,11 +588,11 @@ static double _get_cumulative_playing_time (const VcdObj *obj, unsigned up_to_track_no) { double result = 0; - VcdListNode *node; + CdioListNode *node; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - mpeg_track_t *track = _vcd_list_node_data (node); + mpeg_track_t *track = _cdio_list_node_data (node); if (!up_to_track_no) break; @@ -611,7 +612,7 @@ _get_scanpoint_count (const VcdObj *obj) { double total_playing_time; - total_playing_time = _get_cumulative_playing_time (obj, _vcd_list_length (obj->mpeg_track_list)); + total_playing_time = _get_cumulative_playing_time (obj, _cdio_list_length (obj->mpeg_track_list)); return ceil (total_playing_time * 2.0); } @@ -623,39 +624,39 @@ get_search_dat_size (const VcdObj *obj) + (_get_scanpoint_count (obj) * sizeof (msf_t)); } -static VcdList * +static CdioList * _make_track_scantable (const VcdObj *obj) { - VcdList *all_aps = _vcd_list_new (); - VcdList *scantable = _vcd_list_new (); + CdioList *all_aps = _cdio_list_new (); + CdioList *scantable = _cdio_list_new (); unsigned scanpoints = _get_scanpoint_count (obj); unsigned track_no; - VcdListNode *node; + CdioListNode *node; track_no = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - mpeg_track_t *track = _vcd_list_node_data (node); - VcdListNode *node2; + mpeg_track_t *track = _cdio_list_node_data (node); + CdioListNode *node2; - _VCD_LIST_FOREACH (node2, track->info->shdr[0].aps_list) + _CDIO_LIST_FOREACH (node2, track->info->shdr[0].aps_list) { struct aps_data *_data = _vcd_malloc (sizeof (struct aps_data)); - *_data = *(struct aps_data *)_vcd_list_node_data (node2); + *_data = *(struct aps_data *)_cdio_list_node_data (node2); _data->timestamp += _get_cumulative_playing_time (obj, track_no); _data->packet_no += obj->iso_size + track->relative_start_extent; _data->packet_no += obj->track_front_margin; - _vcd_list_append (all_aps, _data); + _cdio_list_append (all_aps, _data); } track_no++; } { - VcdListNode *aps_node = _vcd_list_begin (all_aps); - VcdListNode *n; + CdioListNode *aps_node = _cdio_list_begin (all_aps); + CdioListNode *n; struct aps_data *_data; double aps_time; double playing_time; @@ -667,15 +668,16 @@ _make_track_scantable (const VcdObj *obj) vcd_assert (aps_node != NULL); - _data = _vcd_list_node_data (aps_node); + _data = _cdio_list_node_data (aps_node); aps_time = _data->timestamp; aps_packet = _data->packet_no; for (t = 0; t < playing_time; t += 0.5) { - for(n = _vcd_list_node_next (aps_node); n; n = _vcd_list_node_next (n)) + for(n = _cdio_list_node_next (aps_node); n; + n = _cdio_list_node_next (n)) { - _data = _vcd_list_node_data (n); + _data = _cdio_list_node_data (n); if (fabs (_data->timestamp - t) < fabs (aps_time - t)) { @@ -691,16 +693,16 @@ _make_track_scantable (const VcdObj *obj) uint32_t *lsect = _vcd_malloc (sizeof (uint32_t)); *lsect = aps_packet; - _vcd_list_append (scantable, lsect); + _cdio_list_append (scantable, lsect); } } } - _vcd_list_free (all_aps, true); + _cdio_list_free (all_aps, true); - vcd_assert (scanpoints == _vcd_list_length (scantable)); + vcd_assert (scanpoints == _cdio_list_length (scantable)); return scantable; } @@ -708,8 +710,8 @@ _make_track_scantable (const VcdObj *obj) void set_search_dat (VcdObj *obj, void *buf) { - VcdList *scantable; - VcdListNode *node; + CdioList *scantable; + CdioListNode *node; SearchDat search_dat; unsigned n; @@ -729,10 +731,10 @@ set_search_dat (VcdObj *obj, void *buf) scantable = _make_track_scantable (obj); n = 0; - _VCD_LIST_FOREACH (node, scantable) + _CDIO_LIST_FOREACH (node, scantable) { SearchDat *search_dat2 = buf; - uint32_t sect = *(uint32_t *) _vcd_list_node_data (node); + uint32_t sect = *(uint32_t *) _cdio_list_node_data (node); cdio_lba_to_msf(cdio_lsn_to_lba(sect), &(search_dat2->points[n])); n++; @@ -740,7 +742,7 @@ set_search_dat (VcdObj *obj, void *buf) vcd_assert (n = _get_scanpoint_count (obj)); - _vcd_list_free (scantable, true); + _cdio_list_free (scantable, true); } static uint32_t @@ -752,7 +754,7 @@ _get_scandata_count (const struct vcd_mpeg_stream_info *info) static uint32_t * _get_scandata_table (const struct vcd_mpeg_stream_info *info) { - VcdListNode *n, *aps_node = _vcd_list_begin (info->shdr[0].aps_list); + CdioListNode *n, *aps_node = _cdio_list_begin (info->shdr[0].aps_list); struct aps_data *_data; double aps_time, t; int aps_packet; @@ -761,15 +763,15 @@ _get_scandata_table (const struct vcd_mpeg_stream_info *info) retval = _vcd_malloc (_get_scandata_count (info) * sizeof (uint32_t)); - _data = _vcd_list_node_data (aps_node); + _data = _cdio_list_node_data (aps_node); aps_time = _data->timestamp; aps_packet = _data->packet_no; for (t = 0, i = 0; t < info->playing_time; t += 0.5, i++) { - for(n = _vcd_list_node_next (aps_node); n; n = _vcd_list_node_next (n)) + for(n = _cdio_list_node_next (aps_node); n; n = _cdio_list_node_next (n)) { - _data = _vcd_list_node_data (n); + _data = _cdio_list_node_data (n); if (fabs (_data->timestamp - t) < fabs (aps_time - t)) { @@ -800,7 +802,7 @@ get_scandata_dat_size (const VcdObj *obj) /* struct 1 */ retval += sizeof (ScandataDat1); - retval += sizeof (msf_t) * _vcd_list_length (obj->mpeg_track_list); + retval += sizeof (msf_t) * _cdio_list_length (obj->mpeg_track_list); /* struct 2 */ /* vcd_assert (sizeof (ScandataDat2) == 0); @@ -809,16 +811,16 @@ get_scandata_dat_size (const VcdObj *obj) /* struct 3 */ retval += sizeof (ScandataDat3); - retval += (sizeof (uint8_t) + sizeof (uint16_t)) * _vcd_list_length (obj->mpeg_track_list); + retval += (sizeof (uint8_t) + sizeof (uint16_t)) * _cdio_list_length (obj->mpeg_track_list); /* struct 4 */ /* vcd_assert (sizeof (ScandataDat4) == 0); retval += sizeof (ScandataDat4); */ { - VcdListNode *node; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + CdioListNode *node; + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - const mpeg_track_t *track = _vcd_list_node_data (node); + const mpeg_track_t *track = _cdio_list_node_data (node); retval += sizeof (msf_t) * _get_scandata_count (track->info); } @@ -830,7 +832,7 @@ get_scandata_dat_size (const VcdObj *obj) void set_scandata_dat (VcdObj *obj, void *buf) { - const unsigned tracks = _vcd_list_length (obj->mpeg_track_list); + const unsigned tracks = _cdio_list_length (obj->mpeg_track_list); ScandataDat1 *scandata_dat1 = (ScandataDat1 *) buf; ScandataDat2 *scandata_dat2 = @@ -844,7 +846,7 @@ set_scandata_dat (VcdObj *obj, void *buf) __cd_offsetof (ScandataDat3, mpeg_track_offsets[tracks]) - __cd_offsetof (ScandataDat3, mpeg_track_offsets); - VcdListNode *node; + CdioListNode *node; unsigned n; uint16_t _tmp_offset; @@ -875,7 +877,7 @@ set_scandata_dat (VcdObj *obj, void *buf) vcd_assert (i >= 0); cdio_lba_to_msf (i * 75, &(scandata_dat1->cum_playtimes[n])); - scandata_dat1->cum_playtimes[n].f = to_bcd8 (floor (f * 75.0)); + scandata_dat1->cum_playtimes[n].f = cdio_to_bcd8 (floor (f * 75.0)); } /* struct 2 -- nothing yet */ @@ -890,9 +892,9 @@ set_scandata_dat (VcdObj *obj, void *buf) scandata_dat3->mpegtrack_start_index = uint16_to_be (_begin_offset); n = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_track_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_track_list) { - const mpeg_track_t *track = _vcd_list_node_data (node); + const mpeg_track_t *track = _cdio_list_node_data (node); uint32_t *_table; const unsigned scanpoints = _get_scandata_count (track->info); const unsigned _table_ofs = @@ -932,7 +934,7 @@ set_scandata_dat (VcdObj *obj, void *buf) vcd_type_t vcd_files_info_detect_type (const void *info_buf) { - const InfoVcd *_info = info_buf; + const InfoVcd_t *_info = info_buf; vcd_type_t _type = VCD_TYPE_INVALID; vcd_assert (info_buf != NULL); |