blob: 659ab62de995804fd0dd3aeaedc5fe760af955bf [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 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.
* -------------------------------------------------------------------
*/
#ifndef PVMI_DATASTREAMSYNCINTERFACE_REF_IMPL_H_INCLUDED
#include "pvmi_datastreamsyncinterface_ref_impl.h"
#endif
#define LOGDEBUG(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_DEBUG,m);
OSCL_EXPORT_REF PVMIDataStreamSyncInterface* PVMIDataStreamSyncInterfaceRefImpl::CreateDataStreamSyncInterfaceRefImpl(OSCL_wString& aFileName)
{
PVMIDataStreamSyncInterfaceRefImpl* newsyncif = OSCL_NEW(PVMIDataStreamSyncInterfaceRefImpl, (aFileName));
return OSCL_STATIC_CAST(PVMIDataStreamSyncInterface*, newsyncif);
}
OSCL_EXPORT_REF PVMIDataStreamSyncInterface* PVMIDataStreamSyncInterfaceRefImpl::CreateDataStreamSyncInterfaceRefImpl(OsclFileHandle* aFileHandle)
{
PVMIDataStreamSyncInterfaceRefImpl* newsyncif = OSCL_NEW(PVMIDataStreamSyncInterfaceRefImpl, (aFileHandle));
return OSCL_STATIC_CAST(PVMIDataStreamSyncInterface*, newsyncif);
}
OSCL_EXPORT_REF void PVMIDataStreamSyncInterfaceRefImpl::DestroyDataStreamSyncInterfaceRefImpl(PVMIDataStreamSyncInterface* aInterface)
{
PVMIDataStreamSyncInterfaceRefImpl* syncif = OSCL_STATIC_CAST(PVMIDataStreamSyncInterfaceRefImpl*, aInterface);
OSCL_DELETE(syncif);
}
PVMIDataStreamSyncInterfaceRefImpl::PVMIDataStreamSyncInterfaceRefImpl(OSCL_wString& aFileName)
{
iSessionID = 0;
iFileName = aFileName;
iFileHandle = NULL;
iFileObject = NULL;
iLogger = PVLogger::GetLoggerObject("PVMIDataStreamSyncInterfaceRefImpl");
iFs.Connect();
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::PVMIDataStreamSyncInterfaceRefImpl"));
}
PVMIDataStreamSyncInterfaceRefImpl::PVMIDataStreamSyncInterfaceRefImpl(OsclFileHandle* aFileHandle)
{
iSessionID = 0;
iFileHandle = aFileHandle;
iFileObject = NULL;
iLogger = PVLogger::GetLoggerObject("PVMIDataStreamSyncInterfaceRefImpl");
iFs.Connect();
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::PVMIDataStreamSyncInterfaceRefImpl"));
}
PVMIDataStreamSyncInterfaceRefImpl::~PVMIDataStreamSyncInterfaceRefImpl()
{
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::~PVMIDataStreamSyncInterfaceRefImpl"));
if (iFileObject)
OSCL_DELETE(iFileObject);
iFileObject = NULL;
iFs.Close();
iLogger = NULL;
}
OSCL_EXPORT_REF bool
PVMIDataStreamSyncInterfaceRefImpl::queryInterface(const PVUuid& uuid,
PVInterface*& iface)
{
iface = NULL;
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::queryInterface"));
if (uuid == PVMIDataStreamSyncInterfaceUuid)
{
PVMIDataStreamSyncInterface* myInterface
= OSCL_STATIC_CAST(PVMIDataStreamSyncInterface*, this);
iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
return true;
}
return false;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::OpenSession(PvmiDataStreamSession& aSessionID,
PvmiDataStreamMode aMode,
bool nonblocking)
{
OSCL_UNUSED_ARG(nonblocking);
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::OpenSession"));
if (!iFileObject)
iFileObject = OSCL_NEW(Oscl_File, (OSCL_FILE_BUFFER_MAX_SIZE, iFileHandle));
int32 result;
if (iFileHandle)
{
result = 0;
}
else
{
if (aMode == PVDS_READ_ONLY)
{
result = iFileObject->Open(iFileName.get_cstr(), Oscl_File::MODE_READ, iFs);
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::OpenSession - File Open returning %d", result));
}
else
{
return PVDS_UNSUPPORTED_MODE;
}
}
if (result == 0)
{
iFileNumBytes = 0;
int32 res = iFileObject->Seek(0, Oscl_File::SEEKEND);
if (res == 0)
{
iFileNumBytes = (TOsclFileOffsetInt32)iFileObject->Tell();
iFileObject->Seek(0, Oscl_File::SEEKSET);
}
aSessionID = iSessionID;
return PVDS_SUCCESS;
}
return PVDS_FAILURE;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::CloseSession(PvmiDataStreamSession sessionID)
{
OSCL_UNUSED_ARG(sessionID);
if (!iFileObject)
{
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::CloseSession returning %d", -1));
return PVDS_FAILURE;
}
int32 result = 0;
if (!iFileHandle)
result = iFileObject->Close();
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::CloseSession returning %d", result));
OSCL_DELETE(iFileObject);
iFileObject = NULL;
if (result == 0)
return PVDS_SUCCESS;
return PVDS_FAILURE;
}
OSCL_EXPORT_REF PvmiDataStreamRandomAccessType
PVMIDataStreamSyncInterfaceRefImpl::QueryRandomAccessCapability()
{
return PVDS_FULL_RANDOM_ACCESS;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::QueryReadCapacity(PvmiDataStreamSession sessionID,
uint32& capacity)
{
OSCL_UNUSED_ARG(sessionID);
uint32 currFilePosition = GetCurrentPointerPosition(iSessionID);
capacity = ((uint32)iFileNumBytes - currFilePosition);
return PVDS_SUCCESS;
}
OSCL_EXPORT_REF PvmiDataStreamCommandId
PVMIDataStreamSyncInterfaceRefImpl::RequestReadCapacityNotification(PvmiDataStreamSession sessionID,
PvmiDataStreamObserver& observer,
uint32 capacity,
OsclAny* aContextData)
{
OSCL_UNUSED_ARG(sessionID);
OSCL_UNUSED_ARG(observer);
OSCL_UNUSED_ARG(capacity);
OSCL_UNUSED_ARG(aContextData);
OSCL_LEAVE(OsclErrNotSupported);
return 0;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::QueryWriteCapacity(PvmiDataStreamSession sessionID,
uint32& capacity)
{
OSCL_UNUSED_ARG(sessionID);
OSCL_UNUSED_ARG(capacity);
return PVDS_NOT_SUPPORTED;
}
OSCL_EXPORT_REF PvmiDataStreamCommandId
PVMIDataStreamSyncInterfaceRefImpl::RequestWriteCapacityNotification(PvmiDataStreamSession sessionID,
PvmiDataStreamObserver& observer,
uint32 capacity,
OsclAny* aContextData)
{
OSCL_UNUSED_ARG(sessionID);
OSCL_UNUSED_ARG(observer);
OSCL_UNUSED_ARG(capacity);
OSCL_UNUSED_ARG(aContextData);
OSCL_LEAVE(OsclErrNotSupported);
return 0;
}
OSCL_EXPORT_REF PvmiDataStreamCommandId
PVMIDataStreamSyncInterfaceRefImpl::CancelNotification(PvmiDataStreamSession sessionID,
PvmiDataStreamObserver& observer,
PvmiDataStreamCommandId aID,
OsclAny* aContextData)
{
OSCL_UNUSED_ARG(sessionID);
OSCL_UNUSED_ARG(observer);
OSCL_UNUSED_ARG(aID);
OSCL_UNUSED_ARG(aContextData);
OSCL_LEAVE(OsclErrNotSupported);
return 0;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::Read(PvmiDataStreamSession sessionID,
uint8* buffer,
uint32 size,
uint32& numelements)
{
OSCL_UNUSED_ARG(sessionID);
if (!iFileObject)
return PVDS_FAILURE;
uint32 result = iFileObject->Read(buffer, size, numelements);
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::ReadAndUnlockContent returning %d", result));
numelements = result;
return PVDS_SUCCESS;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::Write(PvmiDataStreamSession sessionID,
uint8* buffer,
uint32 size,
uint32& numelements)
{
OSCL_UNUSED_ARG(sessionID);
OSCL_UNUSED_ARG(buffer);
OSCL_UNUSED_ARG(size);
OSCL_UNUSED_ARG(numelements);
return PVDS_NOT_SUPPORTED;
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::Seek(PvmiDataStreamSession sessionID,
int32 offset,
PvmiDataStreamSeekType origin)
{
OSCL_UNUSED_ARG(sessionID);
if (!iFileObject)
return PVDS_FAILURE;
Oscl_File::seek_type seekType = Oscl_File::SEEKCUR;
if (origin == PVDS_SEEK_SET)
{
seekType = Oscl_File::SEEKSET;
}
if (origin == PVDS_SEEK_CUR)
{
seekType = Oscl_File::SEEKCUR;
}
if (origin == PVDS_SEEK_END)
{
seekType = Oscl_File::SEEKEND;
}
int32 result = iFileObject->Seek(offset, seekType);
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::SeekContent returning %d", result));
if (result != 0)
{
return PVDS_FAILURE;
}
return PVDS_SUCCESS;
}
OSCL_EXPORT_REF uint32
PVMIDataStreamSyncInterfaceRefImpl::GetCurrentPointerPosition(PvmiDataStreamSession sessionID)
{
OSCL_UNUSED_ARG(sessionID);
if (!iFileObject)
return 0;
int32 result = (TOsclFileOffsetInt32)iFileObject->Tell();
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::GetCurrentContentPosition returning %d", result));
return (uint32)(result);
}
OSCL_EXPORT_REF PvmiDataStreamStatus
PVMIDataStreamSyncInterfaceRefImpl::Flush(PvmiDataStreamSession sessionID)
{
OSCL_UNUSED_ARG(sessionID);
if (!iFileObject)
{
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::Flush returning %d", -1));
return PVDS_FAILURE;
}
int32 result;
result = iFileObject->Flush();
LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::Flush returning %d", result));
if (result == 0) //Flush will return 0 when successful
return PVDS_SUCCESS;
else
return PVDS_FAILURE;
}