43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
import cffi
|
||
|
import os
|
||
|
import functools
|
||
|
import binascii
|
||
|
from datetime import timedelta
|
||
|
|
||
|
def loadlib(dll_path,*includes,**kwargs):
|
||
|
ffi = cffi.FFI()
|
||
|
for include in includes:
|
||
|
ffi.cdef(open(include).read(),**kwargs)
|
||
|
return ffi,ffi.dlopen(dll_path)
|
||
|
|
||
|
class DVDRead(object):
|
||
|
def __init__(self,path):
|
||
|
self.dvd=None
|
||
|
self.ffi,self.lib = loadlib("libdvdread-8.dll",
|
||
|
"dvd_types.h",
|
||
|
"dvd_reader.h",
|
||
|
"ifo_types.h",
|
||
|
"ifo_read.h",
|
||
|
"ifo_print.h",
|
||
|
"nav_types.h",
|
||
|
"nav_read.h",
|
||
|
"nav_print.h")
|
||
|
self.path=path
|
||
|
self.titles={}
|
||
|
self.open(path)
|
||
|
|
||
|
def __del__(self):
|
||
|
if self.dvd:
|
||
|
self.lib.DVDClose(self.dvd)
|
||
|
|
||
|
def open(self,path):
|
||
|
# self.dvd_css=self.css_lib.dvdcss_open()
|
||
|
self.dvd=self.lib.DVDOpen(bytes(path,"utf8"))
|
||
|
vol_id=self.ffi.new("unsigned char[]",32)
|
||
|
self.lib.DVDDiscID(self.dvd,vol_id)
|
||
|
self.disc_id=str(binascii.hexlify(self.ffi.buffer(vol_id,16)[:]),"utf8")
|
||
|
self.lib.DVDUDFVolumeInfo(self.dvd,vol_id,32,self.ffi.NULL,0)
|
||
|
self.udf_disc_name=str(self.ffi.string(vol_id),"utf8")
|
||
|
self.lib.DVDISOVolumeInfo(self.dvd,vol_id,32,self.ffi.NULL,0)
|
||
|
self.iso_disc_name=str(self.ffi.string(vol_id),"utf8")
|
||
|
self.ffi.release(vol_id)
|