BAdapterIO: Add initial seeking support
* This is by default provided using a relative buffer. When the client request a seek over the range we currently have, we will ask the backend with a SeekRequested. When the backend operation ended successfully, the client is required to call SeekCompleted before to return. This will cause the offset to change and the buffer is cleaned as result. Next data received will be considered to be at a position equal to the offset plus the relative position.
This commit is contained in:
@@ -13,77 +13,82 @@
|
||||
|
||||
|
||||
class BAdapterIO;
|
||||
class RelativePositionIO;
|
||||
|
||||
|
||||
class BInputAdapter {
|
||||
public:
|
||||
virtual ssize_t Write(const void* buffer, size_t size);
|
||||
virtual ssize_t Write(const void* buffer, size_t size);
|
||||
|
||||
private:
|
||||
friend class BAdapterIO;
|
||||
|
||||
BInputAdapter(BAdapterIO* io);
|
||||
virtual ~BInputAdapter();
|
||||
BInputAdapter(BAdapterIO* io);
|
||||
virtual ~BInputAdapter();
|
||||
|
||||
BAdapterIO* fIO;
|
||||
BAdapterIO* fIO;
|
||||
|
||||
virtual void _ReservedInputAdapter1();
|
||||
virtual void _ReservedInputAdapter2();
|
||||
virtual void _ReservedInputAdapter1();
|
||||
virtual void _ReservedInputAdapter2();
|
||||
|
||||
uint32 _reserved[2];
|
||||
uint32 _reserved[2];
|
||||
};
|
||||
|
||||
|
||||
class BAdapterIO : public BMediaIO {
|
||||
public:
|
||||
BAdapterIO(int32 flags,
|
||||
bigtime_t timeout = B_INFINITE_TIMEOUT);
|
||||
virtual ~BAdapterIO();
|
||||
BAdapterIO(int32 flags,
|
||||
bigtime_t timeout = B_INFINITE_TIMEOUT);
|
||||
virtual ~BAdapterIO();
|
||||
|
||||
virtual void GetFlags(int32* flags) const;
|
||||
virtual void GetFlags(int32* flags) const;
|
||||
|
||||
virtual ssize_t ReadAt(off_t position, void* buffer,
|
||||
size_t size);
|
||||
virtual ssize_t WriteAt(off_t position,
|
||||
const void* buffer, size_t size);
|
||||
virtual ssize_t ReadAt(off_t position, void* buffer,
|
||||
size_t size);
|
||||
virtual ssize_t WriteAt(off_t position,
|
||||
const void* buffer, size_t size);
|
||||
|
||||
virtual off_t Seek(off_t position, uint32 seekMode);
|
||||
virtual off_t Position() const;
|
||||
virtual off_t Seek(off_t position, uint32 seekMode);
|
||||
virtual off_t Position() const;
|
||||
|
||||
virtual status_t SetSize(off_t size);
|
||||
virtual status_t GetSize(off_t* size) const;
|
||||
virtual status_t SetSize(off_t size);
|
||||
virtual status_t GetSize(off_t* size) const;
|
||||
|
||||
BInputAdapter* BuildInputAdapter();
|
||||
BInputAdapter* BuildInputAdapter();
|
||||
|
||||
protected:
|
||||
friend class BInputAdapter;
|
||||
|
||||
void SetBuffer(BPositionIO* io);
|
||||
void SetBuffer(BPositionIO* io);
|
||||
|
||||
ssize_t BackWrite(const void* buffer, size_t size);
|
||||
ssize_t BackWrite(const void* buffer, size_t size);
|
||||
|
||||
status_t SeekRequested(off_t position);
|
||||
status_t SeekCompleted(off_t position);
|
||||
|
||||
private:
|
||||
void _WaitForData(size_t size);
|
||||
status_t _EvaluateWait(off_t position);
|
||||
|
||||
int32 fFlags;
|
||||
bigtime_t fTimeout;
|
||||
int32 fFlags;
|
||||
bigtime_t fTimeout;
|
||||
|
||||
off_t fBackPosition;
|
||||
mutable RWLocker fLock;
|
||||
BPositionIO* fBuffer;
|
||||
off_t fBackPosition;
|
||||
mutable RWLocker fLock;
|
||||
|
||||
BInputAdapter* fInputAdapter;
|
||||
RelativePositionIO* fBuffer;
|
||||
|
||||
BAdapterIO(const BAdapterIO&);
|
||||
BAdapterIO& operator=(const BAdapterIO&);
|
||||
BInputAdapter* fInputAdapter;
|
||||
|
||||
virtual void _ReservedAdapterIO1();
|
||||
virtual void _ReservedAdapterIO2();
|
||||
virtual void _ReservedAdapterIO3();
|
||||
virtual void _ReservedAdapterIO4();
|
||||
virtual void _ReservedAdapterIO5();
|
||||
BAdapterIO(const BAdapterIO&);
|
||||
BAdapterIO& operator=(const BAdapterIO&);
|
||||
|
||||
uint32 _reserved[5];
|
||||
virtual void _ReservedAdapterIO1();
|
||||
virtual void _ReservedAdapterIO2();
|
||||
virtual void _ReservedAdapterIO3();
|
||||
virtual void _ReservedAdapterIO4();
|
||||
virtual void _ReservedAdapterIO5();
|
||||
|
||||
uint32 _reserved[5];
|
||||
};
|
||||
|
||||
#endif // _ADAPTER_IO_H
|
||||
|
||||
Reference in New Issue
Block a user