feat(v5): Disc-Typ aus dem Dateisystem — INDX0300 ist UHD, VIDEO_TS ist DVD
WAS: laufwerke.typVerfeinern liest je Disc einmal BDMV/index.bdmv (Kopf „INDX" + Fassung: 0300 = UHD-Format, 0100/0200 = Blu-ray) bzw. sieht VIDEO_TS (DVD) und überschreibt damit, was Steuercode und Größe sagten; das Ergebnis wird je Laufwerk und Disc-Größe gemerkt (die Wache fragt alle 3 s). Gemessen am Akira-UHD-Abbild unter F:\Video\backup\UHD_AKIRA (12.09.2026): INDX0300. WARUM: Durchsicht 12.09.2026, Fund F10 — bei manchen USB-Brücken antwortet IOCTL_CDROM_DISK_TYPE nicht („unbekannt" → ISO), und die Größe allein machte aus einer 4K-Disc mit 48 GB Daten eine „bluray" (falsches Preset). Am echten Laufwerk mit einer gewöhnlichen Blu-ray noch zu messen, dass dort 0200 steht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0fc87aa022
commit
fc2d16ca38
@@ -0,0 +1,44 @@
|
||||
// 5.7.0 (Durchsicht F10): Der Disc-Typ aus dem Dateisystem — BDMV/index.bdmv
|
||||
// mit „INDX0300" ist UHD (am Akira-UHD-Abbild gemessen), „0200"/„0100" eine
|
||||
// Blu-ray, VIDEO_TS eine DVD. Der Windows-Steuercode antwortet bei manchen
|
||||
// USB-Brücken nicht, und die Größe allein machte aus einer 4K-Disc mit
|
||||
// 48 GB Daten „bluray".
|
||||
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { typAusIndexKopf } from '../src/kern/metadaten/discmerkmale'
|
||||
|
||||
let wegwerf: string[] = []
|
||||
afterEach(() => {
|
||||
for (const o of wegwerf.splice(0)) rmSync(o, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
describe('typAusIndexKopf', () => {
|
||||
it('INDX0300 ist UHD, INDX0200/0100 Blu-ray, alles andere nichts', () => {
|
||||
expect(typAusIndexKopf(Buffer.from('INDX0300\0\0\0N', 'latin1'))).toBe('uhd')
|
||||
expect(typAusIndexKopf(Buffer.from('INDX0200xxxx', 'latin1'))).toBe('bluray')
|
||||
expect(typAusIndexKopf(Buffer.from('INDX0100xxxx', 'latin1'))).toBe('bluray')
|
||||
expect(typAusIndexKopf(Buffer.from('MOBJ0200', 'latin1'))).toBe(null)
|
||||
expect(typAusIndexKopf(Buffer.from('IND', 'latin1'))).toBe(null)
|
||||
})
|
||||
})
|
||||
|
||||
describe('typAusDateisystem an einem nachgebauten Laufzeit-Ordner', () => {
|
||||
// discWurzel() rechnet aus \\.\G: den Buchstaben — das geht nur unter
|
||||
// Windows an einem echten Laufwerk. Hier wird deshalb die Kopf-Funktion
|
||||
// über eine echte Datei geprüft, so wie typAusDateisystem sie liest.
|
||||
it('liest die ersten acht Bytes einer echten index.bdmv', () => {
|
||||
const wurzel = mkdtempSync(join(tmpdir(), 'rippy-bdmv-'))
|
||||
wegwerf.push(wurzel)
|
||||
mkdirSync(join(wurzel, 'BDMV'), { recursive: true })
|
||||
const index = join(wurzel, 'BDMV', 'index.bdmv')
|
||||
writeFileSync(index, Buffer.concat([Buffer.from('INDX0300', 'latin1'), Buffer.alloc(64)]))
|
||||
const { openSync, readSync, closeSync } = require('node:fs') as typeof import('node:fs')
|
||||
const fd = openSync(index, 'r')
|
||||
const kopf = Buffer.alloc(8)
|
||||
readSync(fd, kopf, 0, 8, 0)
|
||||
closeSync(fd)
|
||||
expect(typAusIndexKopf(kopf)).toBe('uhd')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user