CUERipper revamp

This commit is contained in:
chudov
2010-02-28 21:04:34 +00:00
parent 31048cb63c
commit 749f96ed8a
92 changed files with 6410 additions and 440 deletions

View File

@@ -6,6 +6,8 @@ class phpCTDB{
private $fpstats;
private $atoms;
public $db;
public $fulltoc;
public $mbid;
function __construct($target_file) {
$this->fp = fopen($target_file, 'rb');
@@ -19,6 +21,32 @@ class phpCTDB{
fclose($this->fp);
}
function ParseTOC()
{
$disc = $this->db['discs'][0];
$this->fulltoc = '';
$mbtoc = '';
foreach ($disc['TOC ']['subatoms'] as $track)
{
if ($track['name']=='INFO') {
$trackcount = phpCTDB::BigEndian2Int(substr($track['value'],0,4));
$pregap = phpCTDB::BigEndian2Int(substr($track['value'],4,4));
$pos = $pregap + 150;
}
if ($track['name']=='TRAK') {
$isaudio = phpCTDB::BigEndian2Int(substr($track['value'],0,4));
$length = phpCTDB::BigEndian2Int(substr($track['value'],4,4));
$this->fulltoc = sprintf('%s %d', $this->fulltoc, $pos);
$mbtoc = sprintf('%s%08X', $mbtoc, $pos);
$pos += $length;
}
}
$this->fulltoc = sprintf('1 %d %d%s', $trackcount, $pos, $this->fulltoc);
$mbtoc = sprintf('01%02X%08X%s', $trackcount, $pos, $mbtoc);
$mbtoc = str_pad($mbtoc,804,'0');
$this->mbid = str_replace('+', '.', str_replace('/', '_', str_replace('=', '-', base64_encode(pack("H*" , sha1($mbtoc))))));
}
static function BigEndian2Int($byte_word, $signed = false) {
$int_value = 0;
@@ -56,6 +84,25 @@ class phpCTDB{
return strrev(phpCTDB::LittleEndian2String($number, $minbytes, $synchsafe));
}
static function discid2path($id)
{
$err = sscanf($id, "%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb);
$parsedid = sprintf("%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb);
if ($id != $parsedid)
die("bad id ". $id);
return sprintf("parity/%x/%x/%x/%s", $id1b & 15, ($id1b >> 4) & 15, ($id1b >> 8) & 15, $parsedid);
}
static function ctdbid2path($discid, $ctdbid)
{
$path = phpCTDB::discid2path($discid);
sscanf($ctdbid, "%04x%04x", $ctdbida, $ctdbidb);
$parsedctdbid = sprintf("%04x%04x", $ctdbida, $ctdbidb);
if ($ctdbid != $parsedctdbid)
die("bad id ". $ctdbid);
return sprintf("%s/%s.bin", $path, $ctdbid);
}
static function unparse_atom($fp, $atom)
{
// printf('unparse_atom(%s)<br>', $atom['name']);
@@ -105,6 +152,7 @@ class phpCTDB{
foreach ($atom['subatoms'] as $param)
switch ($param['name']) {
case 'HEAD':
case 'TOC ':
case 'CRC ':
case 'MBID':
case 'ART ':