blob: db4a82e29dd9a02e061cf8be8c61238f5375779b [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 PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
#define PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
#ifndef PVMF_MEDIA_DATA_IMPL_H_INCLUDED
#include "pvmf_media_data_impl.h"
#endif
#ifndef OSCL_SHARED_PTR_H_INCLUDED
#include "oscl_shared_ptr.h"
#endif
#ifndef OSCL_MEM_H_INCLUDED
#include "oscl_mem.h"
#endif
/**
* The PVMFSimpleMediaBuffer class is a basic MediaDataImpl
* implementation that allows for a single buffer memory
* fragment. The buffer itself can be allocated from the
* general memory pool or any method since the contructor
* accepts a ptr to the data and the corresponding refcnt object
* to handle freeing the memory.
*/
class PVMFSimpleMediaBuffer : public PVMFMediaDataImpl
{
public:
OSCL_IMPORT_REF virtual uint32 getMarkerInfo();
OSCL_IMPORT_REF virtual bool isRandomAccessPoint();
OSCL_IMPORT_REF virtual uint32 getErrorsFlag();
OSCL_IMPORT_REF virtual uint32 getNumFragments();
OSCL_IMPORT_REF virtual bool getMediaFragment(uint32 index, OsclRefCounterMemFrag& memfrag);
OSCL_IMPORT_REF virtual bool getMediaFragmentSize(uint32 index, uint32& size);
OSCL_IMPORT_REF virtual uint32 getFilledSize();
OSCL_IMPORT_REF virtual uint32 getCapacity();
OSCL_IMPORT_REF virtual void setCapacity(uint32 aCapacity);
OSCL_IMPORT_REF virtual bool setMediaFragFilledLen(uint32 index, uint32 len);
OSCL_IMPORT_REF virtual bool setMarkerInfo(uint32 marker);
OSCL_IMPORT_REF virtual bool setRandomAccessPoint(bool flag);
OSCL_IMPORT_REF virtual bool setErrorsFlag(uint32 flag);
OSCL_IMPORT_REF virtual bool appendMediaFragment(OsclRefCounterMemFrag& memfrag);
OSCL_IMPORT_REF virtual bool clearMediaFragments();
/* NOTE!!: The constructor assumes the refcnt has already been incremented
* to reflect this class holding a reference to the buffer. Increment it
* externally if you aren't simply passing ownership of a reference
*/
OSCL_IMPORT_REF PVMFSimpleMediaBuffer(void *ptr,
uint32 capacity,
OsclRefCounter *my_refcnt);
OSCL_IMPORT_REF virtual ~PVMFSimpleMediaBuffer();
private:
uint32 marker_info;
bool random_access_point;
uint32 errors_flag;
OsclMemoryFragment buffer;
uint32 capacity;
OsclRefCounter* refcnt;
};
/**
* The PVMFSimpleMediaBufferCombinedAlloc allocator class
* takes care of allocating the refcounter, PVMFSimpleMediaBuffer container,
* and the actual buffer space in a single block of memory.
*/
class PVMFSimpleMediaBufferCombinedAlloc : public HeapBase
{
public:
PVMFSimpleMediaBufferCombinedAlloc(Oscl_DefAlloc* opt_gen_alloc):
gen_alloc(opt_gen_alloc)
{
if (opt_gen_alloc == NULL)
{
OSCL_ASSERT(false);
}
};
OSCL_IMPORT_REF OsclSharedPtr<PVMFMediaDataImpl> allocate(uint32 requested_buffer_capacity = 0);
private:
Oscl_DefAlloc* gen_alloc;
};
#endif