| /* ------------------------------------------------------------------ |
| * Copyright (C) 2008 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| // -*- c++ -*- |
| // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |
| |
| // A U D I O M P 3 G E T I D 3 I N F O |
| |
| // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |
| |
| |
| /** |
| * @file pvfile.h |
| * @brief This include file contains the definitions and classes needed |
| * to access a file either through Oscl File I/O or CPM. |
| */ |
| |
| |
| #ifndef PVFILE_H_INCLUDED |
| #define PVFILE_H_INCLUDED |
| |
| #ifndef OSCL_TYPES_H_INCLUDED |
| #include "oscl_types.h" |
| #endif |
| #ifndef OSCL_FILE_IO_H_INCLUDED |
| #include "oscl_file_io.h" |
| #endif |
| |
| /** |
| * PVFile is a class with an API similar to Oscl File I/O. |
| * It allows the parser libraries to access a local file |
| * source either through CPM or through Oscl File I/O, depending |
| * on the parameters provided in the local source data. |
| */ |
| |
| class PVMFCPMPluginAccessInterfaceFactory; |
| class PVMFCPMPluginLocalSyncAccessInterface; |
| class PVMIDataStreamSyncInterface; |
| class PvmiDataStreamObserver; |
| |
| class PVFile |
| { |
| public: |
| //default constructor. |
| PVFile() |
| { |
| iFile = NULL; |
| iFileHandle = NULL; |
| iCPMAccessFactory = NULL; |
| iCPMAccess = NULL; |
| iFilePtr = NULL; |
| iDataStreamAccess = NULL; |
| iFileSize = 0; |
| iFileSizeAvailable = false; |
| iRequestReadCapacityNotificationID = 0; |
| } |
| |
| //API to copy all fields from another object. |
| void Copy(const PVFile&a) |
| { |
| iFile = a.iFile; |
| iFilePtr = a.iFilePtr; |
| iFileHandle = a.iFileHandle; |
| iCPMAccessFactory = a.iCPMAccessFactory; |
| iCPMAccess = a.iCPMAccess; |
| iDataStreamAccess = a.iDataStreamAccess; |
| iFileSize = a.iFileSize; |
| iFileSizeAvailable = a.iFileSizeAvailable; |
| iDataStreamSession = a.iDataStreamSession; |
| iRequestReadCapacityNotificationID = a.iRequestReadCapacityNotificationID; |
| } |
| |
| //copy constructor. |
| PVFile(const PVFile&a) |
| { |
| Copy(a); |
| } |
| |
| ~PVFile() |
| { |
| } |
| |
| //API to set the CPM access interface. |
| //The CPM access interface is provided in the |
| //local file source data. |
| void SetCPM(PVMFCPMPluginAccessInterfaceFactory*a) |
| { |
| iCPMAccessFactory = a; |
| } |
| |
| //API to get the CPM access interface factory |
| PVMFCPMPluginAccessInterfaceFactory* GetCPM() |
| { |
| return iCPMAccessFactory; |
| } |
| |
| //API to set the internal file handle. |
| //The file handle is provided in the local file source data. |
| void SetFileHandle(OsclFileHandle*a) |
| { |
| iFileHandle = a; |
| } |
| |
| //To support access through an existing, open Oscl_File object. |
| //This was an add-on for some MP4 file parser libraries-- not |
| //used with the normal local file source access. |
| //With this access mode, Open/Close should not be called. |
| void SetFilePtr(Oscl_File*a) |
| { |
| iFilePtr = a; |
| } |
| |
| //API to copy the access parameters from another object |
| void SetAccess(const PVFile& a) |
| { |
| iCPMAccessFactory = a.iCPMAccessFactory; |
| iFileHandle = a.iFileHandle; |
| iFilePtr = a.iFilePtr; |
| iFile = a.iFile; |
| } |
| |
| //API to tell whether file is open. |
| bool IsOpen() |
| { |
| if ((iFilePtr != NULL) || |
| (iFile != NULL) || |
| (iCPMAccess != NULL) || |
| (iDataStreamAccess != NULL)) |
| { |
| return true; |
| } |
| return false; |
| } |
| |
| //Access APIs, same functionality as Oscl File I/O. |
| OSCL_IMPORT_REF int32 Seek(int32 offset, Oscl_File::seek_type origin); |
| OSCL_IMPORT_REF int32 Tell(); |
| OSCL_IMPORT_REF uint32 Read(OsclAny *buffer, uint32 size, uint32 numelements) ; |
| OSCL_IMPORT_REF int32 Close(); |
| OSCL_IMPORT_REF int32 Flush(); |
| OSCL_IMPORT_REF int32 Open(const oscl_wchar *filename, |
| uint32 mode, |
| Oscl_FileServer& fileserv); |
| OSCL_IMPORT_REF bool GetRemainingBytes(uint32& aNumBytes); |
| |
| OSCL_IMPORT_REF bool RequestReadCapacityNotification(PvmiDataStreamObserver& aObserver, |
| uint32 aCapacity, |
| OsclAny* aContextData = NULL); |
| |
| OSCL_IMPORT_REF bool CancelNotificationSync(); |
| |
| // For memory buffer data stream |
| // file size is content length from HTTP HEAD response |
| OSCL_IMPORT_REF uint32 GetContentLength(); |
| |
| // memory cache size, is 0 if not MBDS |
| OSCL_IMPORT_REF uint32 GetFileBufferingCapacity(); |
| |
| // For memory buffer data stream |
| // portion of the data can be copied to persistent storage for the duration of playback |
| OSCL_IMPORT_REF bool MakePersistent(int32 offset, uint32 size); |
| |
| // For memory buffer data stream |
| // to trigger a http GET request |
| // like a seek but read pointer doesn't change |
| OSCL_IMPORT_REF int32 Skip(int32 offset, Oscl_File::seek_type origin); |
| |
| // For memory buffer data stream |
| // returns the byte range availabe in the stream cache |
| OSCL_IMPORT_REF void GetCurrentByteRange(uint32& aCurrentFirstByteOffset, uint32& aCurrentLastByteOffset); |
| |
| private: |
| //Access parameters from local source data |
| PVMFCPMPluginAccessInterfaceFactory* iCPMAccessFactory; |
| OsclFileHandle* iFileHandle; |
| |
| //Internal implementation. |
| Oscl_File* iFile; |
| PVMFCPMPluginLocalSyncAccessInterface *iCPMAccess; |
| PVMIDataStreamSyncInterface* iDataStreamAccess; |
| int32 iDataStreamSession; |
| |
| //For the alternate access method-- through an existing file object. |
| Oscl_File* iFilePtr; |
| uint32 iFileSize; |
| bool iFileSizeAvailable; |
| uint32 iRequestReadCapacityNotificationID; |
| }; |
| |
| |
| |
| #endif // PVFILE_H_INCLUDED |
| |