/*
$Id: vcd.c,v 1.1.2.16 2003/09/14 09:32:43 rocky Exp $
Copyright (C) 2000 Herbert Valerio Riedel <[email protected]>
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
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <cdio/cdio.h>
#include <cdio/iso9660.h>
/* public headers */
#include <libvcd/types.h>
#include <libvcd/info.h>
#include <libvcd/files.h>
#include <libvcd/sector.h>
#include <libvcd/logging.h>
/* Private headers */
#include "assert.h"
#include "dict.h"
#include "directory.h"
#include "obj.h"
#include "pbc.h"
#include "salloc.h"
#include "util.h"
#include "vcd.h"
static const char _rcsid[] = "$Id: vcd.c,v 1.1.2.16 2003/09/14 09:32:43 rocky Exp $";
static const char zero[CDIO_CD_FRAMESIZE_RAW] = { 0, };
#define DEFAULT_ISO_PREPARER_ID "GNU VCDImager " VERSION " " HOST_ARCH
/* exported private functions
*/
mpeg_sequence_t *
_vcd_obj_get_sequence_by_id (VcdObj *obj, const char sequence_id[])
{
VcdListNode *node;
vcd_assert (sequence_id != NULL);
vcd_assert (obj != NULL);
_VCD_LIST_FOREACH (node, obj->mpeg_sequence_list)
{
mpeg_sequence_t *_sequence = _vcd_list_node_data (node);
if (_sequence->id && !strcmp (sequence_id, _sequence->id))
return _sequence;
}
return NULL;
}
mpeg_sequence_t *
_vcd_obj_get_sequence_by_entry_id (VcdObj *obj, const char entry_id[])
{
VcdListNode *node;
vcd_assert (entry_id != NULL);
vcd_assert (obj != NULL);
_VCD_LIST_FOREACH (node, obj->mpeg_sequence_list)
{
mpeg_sequence_t *_sequence = _vcd_list_node_data (node);
VcdListNode *node2;
/* default entry point */
if (_sequence->default_entry_id
&& !strcmp (entry_id, _sequence->default_entry_id))
return _sequence;
/* additional entry points */
_VCD_LIST_FOREACH (node2, _sequence->entry_list)
{
entry_t *_entry = _vcd_list_node_data (node2);
if (_entry->id
&& !strcmp (entry_id, _entry->id))
return _sequence;
}
}
/* not found */
return NULL;
}
mpeg_segment_t *
_vcd_obj_get_segment_by_id (VcdObj *obj, const char segment_id[])
{
VcdListNode *node;
vcd_assert (segment_id != NULL);
vcd_assert (obj != NULL);
_VCD_LIST_FOREACH (node, obj->mpeg_segment_list)
{
mpeg_segment_t *_segment = _vcd_list_node_data (node);
if (_segment->id && !strcmp (segment_id, _segment->id))
return _segment;
}
return NULL;
}
bool
_vcd_obj_has_cap_p (const VcdObj *obj, enum vcd_capability_t capability)
{
switch (capability)
{
case _CAP_VALID:
switch (obj->type)
{
case VCD_TYPE_VCD:
case VCD_TYPE_VCD11:
case VCD_TYPE_VCD2:
case VCD_TYPE_SVCD:
case VCD_TYPE_HQVCD:
return true;
break;
case VCD_TYPE_INVALID:
return false;
break;
}
break;
case _CAP_MPEG2:
switch (obj->type)
{
case VCD_TYPE_VCD:
case VCD_TYPE_VCD11:
case VCD_TYPE_VCD2:
case VCD_TYPE_INVALID:
return false;
break;
case VCD_TYPE_SVCD:
case VCD_TYPE_HQVCD:
return true;
break;
}
break;
case _CAP_PBC:
switch (obj->type)
{
case VCD_TYPE_VCD:
case VCD_TYPE_VCD11:
case VCD_TYPE_INVALID:
return false;
break;
case VCD_TYPE_VCD2:
case VCD_TYPE_SVCD:
case VCD_TYPE_HQVCD:
return true;
break;
}
break;
case _CAP_PBC_X:
switch (obj->type)
{
case VCD_TYPE_VCD:
case VCD_TYPE_VCD11:
case VCD_TYPE_INVALID:
case VCD_TYPE_SVCD:
case VCD_TYPE_HQVCD:
return false;
break;
case VCD_TYPE_VCD2:
return true;
break;
}
break;
case _CAP_4C_SVCD:
switch (obj->type)
{
case VCD_TYPE_VCD:
case VCD_TYPE_VCD11:
case VCD_TYPE_INVALID:
case VCD_TYPE_VCD2:
return false;
break;
case VCD_TYPE_SVCD:
case VCD_TYPE_HQVCD:
return true;
break;
}
break;
case _CAP_PAL_BITS:
return _vcd_obj_has_cap_p (obj, _CAP_PBC); /* for now */
break;
case _CAP_MPEG1:
return !_vcd_obj_has_cap_p (obj, _CAP_MPEG2); /* for now */
break;
case _CAP_TRACK_MARGINS:
return !_vcd_obj_has_cap_p (obj, _CAP_MPEG2); /* for now */
break;
}
vcd_assert_not_reached ();
return false;
}
/*
* public methods
*/
VcdObj *
vcd_obj_new (vcd_type_t vcd_type)
{
VcdObj *new_obj = NULL;
static bool _first = true;
if (_first)
{
#if defined(_DEVELOPMENT_)
vcd_warn ("initializing libvcd %s [%s]", VERSION, HOST_ARCH);
vcd_warn (" ");
vcd_warn (" this is the UNSTABLE development branch!");
vcd_warn (" use only if you know what you are doing");
vcd_warn (" see http://www.hvrlab.org/~hvr/vcdimager/ for more information");
vcd_warn (" ");
#else
vcd_debug ("initializing libvcd %s [%s]", VERSION, HOST_ARCH);
#endif
_first = false;
}
new_obj = _vcd_malloc (sizeof (VcdObj));
new_obj->type = vcd_type;
if (!_vcd_obj_has_cap_p (new_obj, _CAP_VALID))
{
vcd_error ("VCD type not supported");
free (new_obj);
return NULL;
}
if (vcd_type == VCD_TYPE_VCD)
vcd_warn ("VCD 1.0 support is experimental -- user feedback needed!");
new_obj->iso_volume_label = strdup ("");
new_obj->iso_publisher_id = strdup ("");
new_obj->iso_application_id = strdup ("");
new_obj->iso_preparer_id = _vcd_strdup_upper (DEFAULT_ISO_PREPARER_ID);
new_obj->info_album_id = strdup ("");
new_obj->info_volume_count = 1;
new_obj->info_volume_number = 1;
new_obj->custom_file_list = _vcd_list_new ();
new_obj->custom_dir_list = _vcd_list_new ();
new_obj->mpeg_sequence_list = _vcd_list_new ();
new_obj->mpeg_segment_list = _vcd_list_new ();
new_obj->pbc_list = _vcd_list_new ();
/* gap's defined by IEC-10149 / ECMA-130 */
/* pre-gap's for tracks but the first one */
new_obj->track_pregap = CDIO_PREGAP_SECTORS;
/* post-gap after last track */
new_obj->leadout_pregap = CDIO_POSTGAP_SECTORS;
if (_vcd_obj_has_cap_p (new_obj, _CAP_TRACK_MARGINS))
{
new_obj->track_front_margin = 30;
new_obj->track_rear_margin = 45;
}
else
{
new_obj->track_front_margin = 0;
new_obj->track_rear_margin = 0;
}
return new_obj;
}
int
vcd_obj_remove_item (VcdObj *obj, const char id[])
{
vcd_warn ("vcd_obj_remove_item('%s') not implemented yet!", id);
return -1;
}
static void
_vcd_obj_remove_mpeg_track (VcdObj *obj, int track_id)
{
int length;
mpeg_sequence_t *track = NULL;
VcdListNode *node = NULL;
vcd_assert (track_id >= 0);
node = _vcd_list_at (obj->mpeg_sequence_list, track_id);
vcd_assert (node != NULL);
track = (mpeg_sequence_t *) _vcd_list_node_data (node);
vcd_mpeg_source_destroy (track->source, true);
length = track->info->packets;
length += obj->track_pregap + obj->track_front_margin + 0 + obj->track_rear_margin;
/* fixup offsets */
没有合适的资源?快使用搜索试试~ 我知道了~
vcdimager-0.7.19-cdio.tar.gz_VCDImag_VCDImager
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 70 浏览量
2022-09-14
16:18:34
上传
评论
收藏 759KB GZ 举报
温馨提示
共195个文件
c:42个
h:35个
in:16个
它可以将MPEG档转成VCD或SVCD BIN/CUE型态的光盘映像文件
资源推荐
资源详情
资源评论
收起资源包目录
vcdimager-0.7.19-cdio.tar.gz_VCDImag_VCDImager (195个子文件)
vcd-info.1 3KB
vcdimager.1 3KB
vcdxgen.1 3KB
vcdxrip.1 2KB
vcdxbuild.1 2KB
vcdxminfo.1 1KB
cdxa2mpeg.1 1KB
configure.ac 8KB
Makefile.am 2KB
Makefile.am 1KB
Makefile.am 1KB
Makefile.am 942B
Makefile.am 821B
Makefile.am 729B
Makefile.am 702B
Makefile.am 124B
Makefile.am 110B
Makefile.am 18B
AUTHORS 71B
BUGS 1KB
vcd.c 64KB
vcd-info.c 49KB
info.c 45KB
vcd_xml_rip.c 35KB
mpeg.c 29KB
files.c 26KB
check_bitfield.c 20KB
vcd_xml_parse.c 20KB
pbc.c 19KB
vcd_xml_dump.c 16KB
inf.c 14KB
vcdimager.c 14KB
vcd_xml_gen.c 13KB
directory.c 12KB
vcd_xml_build.c 11KB
mpeg_stream.c 11KB
data_structures.c 10KB
vcd_xml_minfo.c 9KB
info_private.c 9KB
vcd_xml_master.c 8KB
cdxa2mpeg.c 8KB
image_nrg.c 8KB
sector.c 7KB
image_cdrdao.c 7KB
vcd_xml_common.c 7KB
image_bincue.c 5KB
stream.c 5KB
stream_stdio.c 5KB
salloc.c 4KB
check_sizeof.c 3KB
util.c 3KB
logging.c 3KB
vcd_read.c 3KB
mpegscan2.c 3KB
mpegscan.c 3KB
vcd_xml_dtd.c 2KB
image.c 2KB
testimage.c 2KB
xmalloc.c 2KB
rint.c 2KB
testassert.c 1KB
v_snprintf.c 667B
ChangeLog 108KB
changelog 3KB
check_common_fn 1KB
check_vcdimager_fn 772B
check_vcdinfo_fn 633B
check_vcdxbuild_fn 723B
check_vcdxrip_fn 665B
configure 370KB
control 657B
COPYING 18KB
copyright 1KB
depcomp 12KB
docs 28B
videocd.dtd 4KB
FAQ 126B
config.guess 38KB
info.h 22KB
files_private.h 21KB
sector_private.h 10KB
inf.h 10KB
bytesex.h 6KB
vcd.h 6KB
libiberty.h 5KB
obj.h 4KB
mpeg.h 4KB
data_structures.h 4KB
dict.h 4KB
pbc.h 3KB
vcdxml.h 3KB
sector.h 3KB
stream.h 3KB
bitvec.h 3KB
bytesex_asm.h 3KB
info_private.h 3KB
mpeg_stream.h 3KB
files.h 3KB
types.h 3KB
image_sink.h 2KB
共 195 条
- 1
- 2
资源评论
小贝德罗
- 粉丝: 70
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功