diff options
Diffstat (limited to 'src/input/vcd/libvcd/pbc.c')
-rw-r--r-- | src/input/vcd/libvcd/pbc.c | 156 |
1 files changed, 79 insertions, 77 deletions
diff --git a/src/input/vcd/libvcd/pbc.c b/src/input/vcd/libvcd/pbc.c index b9172b41b..1b4f1a6c1 100644 --- a/src/input/vcd/libvcd/pbc.c +++ b/src/input/vcd/libvcd/pbc.c @@ -1,7 +1,7 @@ /* - $Id: pbc.c,v 1.2 2004/04/11 12:20:32 miguelfreitas Exp $ + $Id: pbc.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 @@ -27,23 +27,24 @@ #include <math.h> #include <cdio/cdio.h> +#include <cdio/bytesex.h> /* Public headers */ #include <libvcd/logging.h> #include <libvcd/files.h> #include <libvcd/types.h> +#include <libvcd/info.h> /* FIXME! Make this really private. */ #include <libvcd/files_private.h> /* Private headers */ #include "vcd_assert.h" -#include "bytesex.h" #include "obj.h" #include "pbc.h" #include "util.h" -static const char _rcsid[] = "$Id: pbc.c,v 1.2 2004/04/11 12:20:32 miguelfreitas Exp $"; +static const char _rcsid[] = "$Id: pbc.c,v 1.3 2005/01/01 02:43:59 rockyb Exp $"; static uint8_t _wtime (int seconds) @@ -74,11 +75,11 @@ _wtime (int seconds) static pbc_t * _vcd_pbc_byid(const VcdObj *obj, const char item_id[]) { - VcdListNode *node; + CdioListNode *node; - _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); if (_pbc->id && !strcmp (item_id, _pbc->id)) return _pbc; @@ -91,12 +92,12 @@ _vcd_pbc_byid(const VcdObj *obj, const char item_id[]) unsigned _vcd_pbc_lid_lookup (const VcdObj *obj, const char item_id[]) { - VcdListNode *node; + CdioListNode *node; unsigned n = 1; - _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); vcd_assert (n < 0x8000); @@ -143,11 +144,11 @@ _vcd_pbc_lookup (const VcdObj *obj, const char item_id[]) { if (id < 2) return ITEM_TYPE_NOTFOUND; - else if (id < 100) + else if (id < MIN_ENCODED_TRACK_NUM) return ITEM_TYPE_TRACK; else if (id < 600) return ITEM_TYPE_ENTRY; - else if (id < 2980) + else if (id <= MAX_ENCODED_SEGMENT_NUM) return ITEM_TYPE_SEGMENT; else vcd_assert_not_reached (); @@ -162,7 +163,7 @@ uint16_t _vcd_pbc_pin_lookup (const VcdObj *obj, const char item_id[]) { int n; - VcdListNode *node; + CdioListNode *node; if (!item_id) return 0; @@ -170,9 +171,9 @@ _vcd_pbc_pin_lookup (const VcdObj *obj, const char item_id[]) /* check sequence items */ n = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_sequence_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_sequence_list) { - mpeg_sequence_t *_sequence = _vcd_list_node_data (node); + mpeg_sequence_t *_sequence = _cdio_list_node_data (node); vcd_assert (n < 98); @@ -185,10 +186,10 @@ _vcd_pbc_pin_lookup (const VcdObj *obj, const char item_id[]) /* check entry points */ n = 0; - _VCD_LIST_FOREACH (node, obj->mpeg_sequence_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_sequence_list) { - mpeg_sequence_t *_sequence = _vcd_list_node_data (node); - VcdListNode *node2; + mpeg_sequence_t *_sequence = _cdio_list_node_data (node); + CdioListNode *node2; /* default entry point */ @@ -199,9 +200,9 @@ _vcd_pbc_pin_lookup (const VcdObj *obj, const char item_id[]) /* additional entry points */ - _VCD_LIST_FOREACH (node2, _sequence->entry_list) + _CDIO_LIST_FOREACH (node2, _sequence->entry_list) { - entry_t *_entry = _vcd_list_node_data (node2); + entry_t *_entry = _cdio_list_node_data (node2); vcd_assert (n < 500); @@ -215,14 +216,14 @@ _vcd_pbc_pin_lookup (const VcdObj *obj, const char item_id[]) /* check sequence items */ n = 0; - _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); vcd_assert (n < 1980); if (_segment->id && !strcmp (item_id, _segment->id)) - return n + 1000; + return n + MIN_ENCODED_SEGMENT_NUM; n += _segment->segment_count; } @@ -236,7 +237,7 @@ _vcd_pbc_available (const VcdObj *obj) vcd_assert (obj != NULL); vcd_assert (obj->pbc_list != NULL); - if (!_vcd_list_length (obj->pbc_list)) + if (!_cdio_list_length (obj->pbc_list)) return false; if (!_vcd_obj_has_cap_p (obj, _CAP_PBC)) @@ -254,7 +255,7 @@ _vcd_pbc_max_lid (const VcdObj *obj) uint16_t retval = 0; if (_vcd_pbc_available (obj)) - retval = _vcd_list_length (obj->pbc_list); + retval = _cdio_list_length (obj->pbc_list); return retval; } @@ -272,14 +273,14 @@ _vcd_pbc_node_length (const VcdObj *obj, const pbc_t *_pbc, bool extended) int n; case PBC_PLAYLIST: - n = _vcd_list_length (_pbc->item_id_list); + n = _cdio_list_length (_pbc->item_id_list); retval = __cd_offsetof (_PsdPlayListDescriptor, itemid[n]); break; case PBC_SELECTION: - n = _vcd_list_length (_pbc->select_id_list); + n = _cdio_list_length (_pbc->select_id_list); - retval = __cd_offsetof (PsdSelectionListDescriptor, ofs[n]); + retval = __cd_offsetof (PsdSelectionListDescriptor_t, ofs[n]); if (extended || _vcd_obj_has_cap_p (obj, _CAP_4C_SVCD)) retval += __cd_offsetof (PsdSelectionListDescriptorExtended, area[n]); @@ -300,7 +301,7 @@ _vcd_pbc_node_length (const VcdObj *obj, const pbc_t *_pbc, bool extended) static uint16_t _lookup_psd_offset (const VcdObj *obj, const char item_id[], bool extended) { - VcdListNode *node; + CdioListNode *node; if (extended) vcd_assert (_vcd_obj_has_cap_p (obj, _CAP_PBC_X)); @@ -309,9 +310,9 @@ _lookup_psd_offset (const VcdObj *obj, const char item_id[], bool extended) if (!item_id) return PSD_OFS_DISABLED; - _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); if (!_pbc->id || strcmp (item_id, _pbc->id)) continue; @@ -367,15 +368,15 @@ _vcd_pbc_mark_id (const VcdObj *obj, const char _id[]) { case PBC_PLAYLIST: { - VcdListNode *node; + CdioListNode *node; _vcd_pbc_mark_id (obj, _pbc->prev_id); _vcd_pbc_mark_id (obj, _pbc->next_id); _vcd_pbc_mark_id (obj, _pbc->retn_id); - _VCD_LIST_FOREACH (node, _pbc->item_id_list) + _CDIO_LIST_FOREACH (node, _pbc->item_id_list) { - const char *_id = _vcd_list_node_data (node); + const char *_id = _cdio_list_node_data (node); _vcd_pin_mark_id (obj, _id); } @@ -384,7 +385,7 @@ _vcd_pbc_mark_id (const VcdObj *obj, const char _id[]) case PBC_SELECTION: { - VcdListNode *node; + CdioListNode *node; _vcd_pbc_mark_id (obj, _pbc->prev_id); _vcd_pbc_mark_id (obj, _pbc->next_id); @@ -397,9 +398,9 @@ _vcd_pbc_mark_id (const VcdObj *obj, const char _id[]) _vcd_pin_mark_id (obj, _pbc->item_id); - _VCD_LIST_FOREACH (node, _pbc->select_id_list) + _CDIO_LIST_FOREACH (node, _pbc->select_id_list) { - const char *_id = _vcd_list_node_data (node); + const char *_id = _cdio_list_node_data (node); _vcd_pbc_mark_id (obj, _id); } @@ -419,36 +420,36 @@ _vcd_pbc_mark_id (const VcdObj *obj, const char _id[]) void _vcd_pbc_check_unreferenced (const VcdObj *obj) { - VcdListNode *node; + CdioListNode *node; /* clear all flags */ - _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); _pbc->referenced = false; } - _VCD_LIST_FOREACH (node, obj->mpeg_sequence_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_sequence_list) { - mpeg_sequence_t *_sequence = _vcd_list_node_data (node); + mpeg_sequence_t *_sequence = _cdio_list_node_data (node); _sequence->referenced = false; } - _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); _segment->referenced = false; } /* start from non-rejected lists */ - _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); vcd_assert (_pbc->id != NULL); @@ -460,25 +461,25 @@ _vcd_pbc_check_unreferenced (const VcdObj *obj) /* collect flags */ - _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); if (!_pbc->referenced) vcd_warn ("PSD item '%s' is unreachable", _pbc->id); } - _VCD_LIST_FOREACH (node, obj->mpeg_sequence_list) + _CDIO_LIST_FOREACH (node, obj->mpeg_sequence_list) { - mpeg_sequence_t *_sequence = _vcd_list_node_data (node); + mpeg_sequence_t *_sequence = _cdio_list_node_data (node); if (!_sequence->referenced) vcd_warn ("sequence '%s' is not reachable by PBC", _sequence->id); } - _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); if (!_segment->referenced) vcd_warn ("segment item '%s' is unreachable", _segment->id); @@ -502,11 +503,11 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, case PBC_PLAYLIST: { _PsdPlayListDescriptor *_md = buf; - VcdListNode *node; + CdioListNode *node; int n; _md->type = PSD_TYPE_PLAY_LIST; - _md->noi = _vcd_list_length (_pbc->item_id_list); + _md->noi = _cdio_list_length (_pbc->item_id_list); vcd_assert (_pbc->lid < 0x8000); _md->lid = uint16_to_be (_pbc->lid | (_pbc->rejected ? 0x8000 : 0)); @@ -522,9 +523,9 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, _md->atime = _wtime (_pbc->auto_pause_time); n = 0; - _VCD_LIST_FOREACH (node, _pbc->item_id_list) + _CDIO_LIST_FOREACH (node, _pbc->item_id_list) { - const char *_id = _vcd_list_node_data (node); + const char *_id = _cdio_list_node_data (node); uint16_t _pin; if (_id) @@ -546,22 +547,22 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, case PBC_SELECTION: { - PsdSelectionListDescriptor *_md = buf; + PsdSelectionListDescriptor_t *_md = buf; - const unsigned _nos = _vcd_list_length (_pbc->select_id_list); + const unsigned int _nos = _cdio_list_length (_pbc->select_id_list); if (extended) _md->type = PSD_TYPE_EXT_SELECTION_LIST; else _md->type = PSD_TYPE_SELECTION_LIST; - if (!IN (_pbc->bsn, 1, 99)) - vcd_error ("selection '%s': BSN (%d) not in range [1..99]", - _pbc->id, _pbc->bsn); + if (!IN (_pbc->bsn, 1, MAX_PBC_SELECTIONS)) + vcd_error ("selection '%s': BSN (%d) not in range [1..%d]", + _pbc->id, _pbc->bsn, MAX_PBC_SELECTIONS); - if (!IN (_nos, 0, 99)) - vcd_error ("selection '%s': too many selections (%d > 99)", - _pbc->id, _nos); + if (!IN (_nos, 0, MAX_PBC_SELECTIONS)) + vcd_error ("selection '%s': too many selections (%d > %d)", + _pbc->id, _nos, MAX_PBC_SELECTIONS); if (_nos + _pbc->bsn > 100) vcd_error ("selection '%s': BSN + NOS (%d + %d) > 100", @@ -676,7 +677,8 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, if ((_seq = _vcd_obj_get_sequence_by_id ((VcdObj *) obj, _pbc->item_id)) || (_seq = _vcd_obj_get_sequence_by_entry_id ((VcdObj *) obj, _pbc->item_id))) { - const unsigned _entries = _vcd_list_length (_seq->entry_list) + 1; + const unsigned _entries = + _cdio_list_length (_seq->entry_list) + 1; if (_nos != _entries) vcd_error ("selection '%s': number of entrypoints" @@ -699,13 +701,13 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, /* fill selection array */ { - VcdListNode *node = NULL; + CdioListNode *node = NULL; int idx = 0; idx = 0; - _VCD_LIST_FOREACH (node, _pbc->select_id_list) + _CDIO_LIST_FOREACH (node, _pbc->select_id_list) { - const char *_id = _vcd_list_node_data (node); + const char *_id = _cdio_list_node_data (node); _md->ofs[idx] = uint16_to_be (_lookup_psd_offset (obj, _id, extended)); @@ -717,7 +719,7 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, if (extended || _vcd_obj_has_cap_p (obj, _CAP_4C_SVCD)) { PsdSelectionListDescriptorExtended *_md2; - VcdListNode *node; + CdioListNode *node; int n; /* append extended selection areas */ @@ -732,9 +734,9 @@ _vcd_pbc_node_write (const VcdObj *obj, const pbc_t *_pbc, void *buf, n = 0; if (_pbc->select_area_list) - _VCD_LIST_FOREACH (node, _pbc->select_area_list) + _CDIO_LIST_FOREACH (node, _pbc->select_area_list) { - const pbc_area_t *_area = _vcd_list_node_data (node); + const pbc_area_t *_area = _cdio_list_node_data (node); _set_area_helper (&_md2->area[n], _area, _pbc->id); @@ -809,12 +811,12 @@ vcd_pbc_new (enum pbc_type_t type) switch (type) { case PBC_PLAYLIST: - _pbc->item_id_list = _vcd_list_new (); + _pbc->item_id_list = _cdio_list_new (); break; case PBC_SELECTION: - _pbc->select_id_list = _vcd_list_new (); - _pbc->select_area_list = _vcd_list_new (); + _pbc->select_id_list = _cdio_list_new (); + _pbc->select_area_list = _cdio_list_new (); break; case PBC_END: @@ -834,14 +836,14 @@ vcd_pbc_new (enum pbc_type_t type) bool _vcd_pbc_finalize (VcdObj *obj) { - VcdListNode *node; + CdioListNode *node; unsigned offset = 0, offset_ext = 0; unsigned lid; lid = 1; - _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); unsigned length, length_ext = 0; length = _vcd_pbc_node_length (obj, _pbc, false); |