123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- #ifndef _SVC_BURNER_H
- #define _SVC_BURNER_H
- #include <bfc/dispatch.h>
- #include <bfc/depend.h>
- #include <bfc/string/string.h>
- #include <api/service/services.h>
- namespace MediaRecorder {
- class Session : public Dispatchable {
- protected:
- Session() {} // protect constructor
- public:
- int getSessionType() { return _call(GETSESSIONTYPE,0); }
- enum {
- Session_REDBOOK, Session_DATA, Session_ISO
- };
- int closeSession() { return _call(CLOSESESSION,0); }
- int getNumEntries() { return _call(GETNUMENTRIES,0); }
- const char *enumEntry(int n) { return _call(ENUMENTRY,(const char *)NULL,n); }
- int getTotalBytes() { return _call(GETTOTALBYTES,0); }
- int getTotalTime() { return _call(GETTOTALTIME,0); }
- enum {
- GETSESSIONTYPE=10,
- CLOSESESSION=20,
- GETNUMENTRIES=30,
- ENUMENTRY=40,
- GETTOTALBYTES=50,
- GETTOTALTIME=60,
- };
- };
- // this represents one session on the cd
- // normal audio cds have 1 redbook session, mixed mode has 2 (or more), with
- // 1 audio followed by 1 or more data
- class SessionI : public Session {
- public:
- virtual int getSessionType()=0;
- virtual int closeSession()=0;
- virtual int getNumEntries()=0;
- virtual const char *enumEntry(int n)=0;
- virtual int getTotalBytes()=0; //total space used in bytes
- virtual int getTotalTime()=0; //total time used in ms
- protected:
- RECVS_DISPATCH;
- };
- class RedbookSession : public SessionI {
- public:
- virtual ~RedbookSession() { m_tracks.deleteAll(); }
- int getSessionType() { return Session_REDBOOK; }
- int closeSession() { return 1; }
- void addEntry(const char *file) { m_tracks.addItem(new String(file)); }
- int getNumEntries() { return m_tracks.getNumItems(); }
- void removeEntry(int n) { m_tracks.deleteItem(n); }
- void clearEntries() { m_tracks.deleteAll(); }
-
- const char *enumEntry(int n);
- int getTotalBytes();
- int getTotalTime();
- protected:
- PtrList<String> m_tracks;
- };
- // this is the physical device
- class Device : public Dispatchable {
- protected:
- Device() {} // protect constructor
- public:
- static const GUID *depend_getClassGuid() {
- // {23F48039-455D-4348-86D5-0A82754678FC}
- static const GUID ret =
- { 0x23f48039, 0x455d, 0x4348, { 0x86, 0xd5, 0xa, 0x82, 0x75, 0x46, 0x78, 0xfc } };
- return &ret;
- }
- api_dependent *getDependencyPtr() { return _call(GETDEPENDENCYPTR,(api_dependent *)NULL); }
- const char *getDeviceName() { return _call(GETDEVICENAME,(const char *)NULL); }
- const char *getDeviceType() { return _call(GETDEVICETYPE,(const char *)NULL); }
- const char *getDeviceDescription() { return _call(GETDEVICEDESCRIPTION,(const char *)NULL); }
- int enumDeviceSpeeds(int n) { return _call(ENUMDEVICESPEEDS,0,n); }
- int getMediaSize() { return _call(GETMEDIASIZE,0); }
- int getMediaFree() { return _call(GETMEDIAFREE,0); }
- void clearSessions() { _voidcall(CLEARSESSIONS); }
- int addSession(Session *session) { return _call(ADDSESSION,0,session); }
- Session *getSession(int num) { return _call(GETSESSION,(Session *)NULL,num); }
- int setRecordSpeed(int kbps) { return _call(SETRECORDSPEED,0,kbps); }
- int setTest(int testmode) { return _call(SETTEST,0,testmode); }
- int setCloseDisc(int closedisc) { return _call(SETCLOSEDISC,0,closedisc); }
- int canBurnNow() { return _call(CANBURNNOW,0); }
- int canCancel() { return _call(CANCANCEL,0); }
- int begin() { return _call(BEGIN,0); }
- int end() { return _call(END,0); }
- int cancel() { return _call(CANCEL,0); }
- int getStatus() { return _call(GETSTATUS,0); }
- enum {
- Status_IDLE, Status_PREPARING, Status_BURNING, Status_DONE,
- };
- int getProgress() { return _call(GETPROGRESS,0); }
- const char *getStatusText() { return _call(GETSTATUSTEXT,(const char *)NULL); }
- const char *getLastError() { return _call(GETLASTERROR,(const char *)NULL); }
- enum {
- Event_PREPAREBEGIN=100,
- Event_MEDIATRANSCODED=200, // params is item #
- Event_PREPAREEND=300,
- Event_BURNBEGIN=400,
- Event_ENTRYCOMPLETE=500, // param is the position in bytes
- Event_SESSIONCOMPLETE=600,
- Event_BURNEND=700,
- Event_ERROR=800,
- Event_MEDIACHANGE=900, // user put in a different disc
- };
- enum {
- GETDEPENDENCYPTR=10,
- GETDEVICENAME=20,
- GETDEVICETYPE=30,
- GETDEVICEDESCRIPTION=40,
- ENUMDEVICESPEEDS=50,
- GETMEDIASIZE=60,
- GETMEDIAFREE=70,
- CLEARSESSIONS=80,
- ADDSESSION=90,
- GETSESSION=100,
- SETRECORDSPEED=110,
- SETTEST=120,
- SETCLOSEDISC=130,
- CANBURNNOW=140,
- CANCANCEL=150,
- BEGIN=160,
- END=170,
- CANCEL=180,
- GETSTATUS=190,
- GETPROGRESS=200,
- GETSTATUSTEXT=210,
- GETLASTERROR=220,
- };
- };
- class DeviceI : public Device {
- public:
- virtual api_dependent *getDependencyPtr()=0; // for events
- virtual const char *getDeviceName()=0; // internal device name
- virtual const char *getDeviceType()=0; // "CD-R", "CD-RW", "DVD-R" etc
- virtual const char *getDeviceDescription()=0; // user readable string
- virtual int enumDeviceSpeeds(int n)=0; // in kb/s
- virtual int getMediaSize()=0; // total space in bytes
- virtual int getMediaFree()=0; // free space in bytes
- virtual void clearSessions()=0;
- virtual int addSession(Session *session)=0;
- virtual Session *getSession(int num)=0;
- virtual int setRecordSpeed(int kbps)=0; //kbps==0 means max speed
- virtual int setTest(int testmode)=0; // if true, don't really burn
- virtual int setCloseDisc(int closedisc)=0; // if true, close entire disc at end
- virtual int canBurnNow()=0; // return 1 if everything's ready
- virtual int canCancel()=0; // return 1 if we can cancel (during burning)
- virtual int begin()=0;
- virtual int end()=0;
- virtual int cancel()=0;
- virtual int getStatus()=0;
- virtual int getProgress()=0; // # of bytes written
- virtual const char *getStatusText()=0; // like "xx% complete" or something
- virtual const char *getLastError()=0;
- protected:
- RECVS_DISPATCH;
- };
- }; // end namespace MediaRecorder
- //don't override this one
- class NOVTABLE svc_mediaRecorder : public Dispatchable {
- protected:
- svc_mediaRecorder() {} // protect constructor
- public:
- static FOURCC getServiceType() { return WaSvc::MEDIARECORDER; }
- int isSessionSupported(MediaRecorder::Session *session) { return _call(ISSESSIONSUPPORTED,0,session); }
- int isMediaSupported(const char *medianame) { return _call(ISMEDIASUPPORTED,0,medianame); }
- int getNumDevices() { return _call(GETNUMDEVICES,0); }
- MediaRecorder::Device *enumDevice(int n) { return _call(ENUMDEVICE,(MediaRecorder::Device*)NULL,n); }
- void refreshDevices() { _voidcall(REFRESHDEVICES); }
- enum {
- ISSESSIONSUPPORTED=10,
- ISMEDIASUPPORTED=20,
- GETNUMDEVICES=30,
- ENUMDEVICE=40,
- REFRESHDEVICES=50,
- };
- };
- // this should be implemented by a given burning lib
- class NOVTABLE svc_mediaRecorderI : public svc_mediaRecorder {
- public:
- static FOURCC getServiceType() { return WaSvc::MEDIARECORDER; }
- virtual int isSessionSupported(MediaRecorder::Session *session)=0;
- virtual int isMediaSupported(const char *medianame)=0;// "CD-R", "DVD-R", etc.
- virtual int getNumDevices()=0;
- virtual MediaRecorder::Device *enumDevice(int n)=0;
- virtual void refreshDevices()=0;
- protected:
- RECVS_DISPATCH;
- };
- #endif
|