[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[VCDImager Bugs/Devel] EXT/SCANDATA for VCD2
From: |
matthias |
Subject: |
[VCDImager Bugs/Devel] EXT/SCANDATA for VCD2 |
Date: |
Mon, 04 Feb 2002 08:34:03 +0100 (CET) |
Hello,
thanx for the great program. Now I finally got it up and running
and have produced some VCD2's for my Phillips CDI 450/83 Player.
Alas, it seems that it really needs EXT/SCANDATA.DAT for FF/REW
and for error correction. So I've reenabled it for VCD2 and am
enclosing a patch for 0.7.12. Maybe it's not the most elegant
coding possible, but at least it works for me under Linux 2.4.x.
Regards
Matthias
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff -Naur vcdimager-0.7.12/libvcd/vcd.c vcdimager-0.7.12-extpat/libvcd/vcd.c
--- vcdimager-0.7.12/libvcd/vcd.c Fri Jan 4 03:50:05 2002
+++ vcdimager-0.7.12-extpat/libvcd/vcd.c Wed Jan 30 16:28:39 2002
@@ -197,6 +197,22 @@
break;
}
break;
+ case _CAP_EXT:
+ 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_4C_SVCD:
switch (obj->type)
@@ -1112,7 +1128,7 @@
/* go on with EXT area */
- if (_vcd_obj_has_cap_p (obj, _CAP_4C_SVCD))
+ if (_vcd_obj_has_cap_p (obj, _CAP_EXT))
{
_dict_insert (obj, "scandata", SECTOR_NIL,
_vcd_len2blocks (get_scandata_dat_size (obj),
@@ -1307,7 +1323,7 @@
vcd_assert (obj->type == VCD_TYPE_VCD2);
}
- if (_vcd_obj_has_cap_p (obj, _CAP_4C_SVCD))
+ if (_vcd_obj_has_cap_p (obj, _CAP_EXT))
{
/* scandata.dat -- scanpoints */
_vcd_directory_mkfile (obj->dir, "EXT/SCANDATA.DAT",
@@ -2034,6 +2050,11 @@
set_tracks_svd (obj, _dict_get_bykey (obj, "tracks")->buf);
set_search_dat (obj, _dict_get_bykey (obj, "search")->buf);
set_scandata_dat (obj, _dict_get_bykey (obj, "scandata")->buf);
+ }
+ if (_vcd_obj_has_cap_p (obj, _CAP_PBC_X))
+ {
+ set_scandata_dat_v2 (obj, _dict_get_bykey (obj, "scandata")->buf);
+
}
/* start actually writing stuff */
diff -Naur vcdimager-0.7.12/libvcd/vcd_files.c
vcdimager-0.7.12-extpat/libvcd/vcd_files.c
--- vcdimager-0.7.12/libvcd/vcd_files.c Tue Nov 27 18:33:51 2001
+++ vcdimager-0.7.12-extpat/libvcd/vcd_files.c Wed Jan 30 16:30:01 2002
@@ -920,6 +920,69 @@
}
+void
+set_scandata_dat_v2 (VcdObj *obj, void *buf)
+{
+ const unsigned tracks = _vcd_list_length (obj->mpeg_track_list);
+
+ ScandataDat_v2 *scandata_dat1 = (ScandataDat_v2 *) buf;
+ const uint16_t _begin_offset = 0;
+
+ VcdListNode *node;
+ unsigned n;
+ uint16_t _tmp_offset;
+
+ vcd_assert (_vcd_obj_has_cap_p (obj, _CAP_EXT));
+
+ /* memset (buf, 0, get_scandata_dat_size (obj)); */
+
+ /* struct 1 */
+ strncpy (scandata_dat1->file_id, SCANDATA_FILE_ID, sizeof
(SCANDATA_FILE_ID));
+
+ scandata_dat1->version = ENTRIES_VERSION_VCD2 ;
+ scandata_dat1->reserved = 0x00;
+ scandata_dat1->scan_points = uint16_to_be (_get_scanpoint_count (obj));
+
+
+ _tmp_offset = 0;
+
+
+ n = 0;
+ _VCD_LIST_FOREACH (node, obj->mpeg_track_list)
+ {
+ const mpeg_track_t *track = _vcd_list_node_data (node);
+ uint32_t *_table;
+ const unsigned scanpoints = _get_scandata_count (track->info);
+ const unsigned _table_ofs =
+ (_tmp_offset * sizeof (msf_t)) + _begin_offset;
+ unsigned point;
+
+
+ _table = _get_scandata_table (track->info);
+
+ for (point = 0; point < scanpoints; point++)
+ {
+ uint32_t lsect = _table[point];
+
+ lsect += obj->iso_size;
+ lsect += track->relative_start_extent;
+ lsect += obj->track_front_margin;
+
+ /* vcd_debug ("lsect %d %d", point, lsect); */
+
+ lba_to_msf(lsect + 150,
+ &(scandata_dat1->points[_tmp_offset + point]));
+ }
+
+ free (_table);
+
+ _tmp_offset += scanpoints;
+ n++;
+ }
+
+}
+
+
vcd_type_t
vcd_files_info_detect_type (const void *info_buf)
{
diff -Naur vcdimager-0.7.12/libvcd/vcd_files.h
vcdimager-0.7.12-extpat/libvcd/vcd_files.h
--- vcdimager-0.7.12/libvcd/vcd_files.h Tue Jul 31 02:20:59 2001
+++ vcdimager-0.7.12-extpat/libvcd/vcd_files.h Wed Jan 30 16:18:17 2002
@@ -66,6 +66,8 @@
void
set_scandata_dat (VcdObj *obj, void *buf);
+void
+set_scandata_dat_v2 (VcdObj *obj, void *buf);
vcd_type_t
diff -Naur vcdimager-0.7.12/libvcd/vcd_obj.h
vcdimager-0.7.12-extpat/libvcd/vcd_obj.h
--- vcdimager-0.7.12/libvcd/vcd_obj.h Fri Sep 28 22:32:53 2001
+++ vcdimager-0.7.12-extpat/libvcd/vcd_obj.h Mon Jan 28 21:08:47 2002
@@ -178,6 +178,7 @@
_CAP_MPEG2,
_CAP_PBC,
_CAP_PBC_X,
+ _CAP_EXT,
_CAP_TRACK_MARGINS,
_CAP_4C_SVCD,
_CAP_PAL_BITS
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [VCDImager Bugs/Devel] EXT/SCANDATA for VCD2,
matthias <=