/*
* OMAP3430 support
*
* Author: Michael Barabanov <michael.barabanov@windriver.com>
* Author: Srini Gosangi <srini.gosangi@windriver.com>
* 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
*/
/* ------------------------------------------------------------------
* 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.
* -------------------------------------------------------------------
*/
#define LOG_NDEBUG 0
#define LOG_TAG "BufferAllocOmap34xx"
#include <utils/Log.h>
#include "buffer_alloc_omap34xx.h"
#include "oscl_mem.h" // needed for oscl_malloc / oscl_free
/* based on test code in pvmi/media_io/pvmiofileoutput/src/pvmi_media_io_fileoutput.cpp */
BufferAllocOmap34xx::BufferAllocOmap34xx(): refCount(0), bufferSize(0), maxBuffers(4), numAllocated(0)
{
}
BufferAllocOmap34xx::~BufferAllocOmap34xx()
{
}
OSCL_EXPORT_REF void BufferAllocOmap34xx::addRef()
{
++refCount;
}
OSCL_EXPORT_REF void BufferAllocOmap34xx::removeRef()
{
--refCount;
if (refCount <= 0)
{
LOGV("BufferAllocOmap34xx::removeRef()");
// this->~BufferAllocOmap34xx();
}
}
OSCL_EXPORT_REF OsclAny* BufferAllocOmap34xx::allocate()
{
if (numAllocated < maxBuffers)
{
OsclAny* ptr = buffer_address[numAllocated];
if (ptr) ++numAllocated;
return ptr;
}
return NULL;
}
OSCL_EXPORT_REF void BufferAllocOmap34xx::deallocate(OsclAny* ptr)
{
if (ptr)
{
--numAllocated;
}
}
OSCL_EXPORT_REF uint32 BufferAllocOmap34xx::getBufferSize()
{
return bufferSize;
}
OSCL_EXPORT_REF uint32 BufferAllocOmap34xx::getNumBuffers()
{
return maxBuffers;
}
OSCL_EXPORT_REF bool BufferAllocOmap34xx::queryInterface(const PVUuid& uuid, PVInterface*& aInterface)
{
aInterface = NULL; // initialize aInterface to NULL in case uuid is not supported
if (PVMFFixedSizeBufferAllocUUID == uuid)
{
// Send back ptr to the allocator interface object
PVMFFixedSizeBufferAlloc* myInterface = OSCL_STATIC_CAST(PVMFFixedSizeBufferAlloc*, this);
refCount++; // increment interface refcount before returning ptr
aInterface = OSCL_STATIC_CAST(PVInterface*, myInterface);
return true;
}
return false;
}