summaryrefslogtreecommitdiff
path: root/src/input/vcd/libvcd/pbc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/vcd/libvcd/pbc.c')
-rw-r--r--src/input/vcd/libvcd/pbc.c156
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);