/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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.
*/
/**
************************************************************************
* @file M4SYS_AccessUnit.h
* @brief Access unit manipulation
* @note This file defines the access unit structure,
* and declares functions to manipulate it.
************************************************************************
*/
#ifndef M4SYS_ACCESSUNIT_H
#define M4SYS_ACCESSUNIT_H
#include "M4OSA_Types.h"
#include "M4OSA_Error.h"
#include "M4OSA_Memory.h"
#include "M4OSA_Time.h"
#include "M4SYS_Stream.h"
/** The attribute of a fragment*/
typedef enum {
M4SYS_kFragAttrOk = 01, /**< The fragment is correct, there is no error
(size cannot be 0)*/
M4SYS_kFragAttrCorrupted = 02, /**< The fragment is corrupted (there is at least a bit or byte
error somewhere in the fragment (size cannot be 0)*/
M4SYS_kFragAttrLost = 03 /**< The fragment is lost, so the size must be 0.*/
} M4SYS_FragAttr;
/** A Fragment is a piece of access unit. It can be decoded without decoding the others*/
typedef struct {
M4OSA_MemAddr8 fragAddress; /**< The data pointer. All fragments of the same access unit
must be contiguous in memory*/
M4OSA_UInt32 size; /**< The size of the fragment. It must be 0 if fragment is
flagged 'lost'*/
M4SYS_FragAttr isCorrupted; /**< The attribute of this fragment*/
} M4SYS_Frag;
/**< The attribute of an access unit*/
typedef M4OSA_UInt8 M4SYS_AU_Attr;
#define AU_Corrupted 0x01 /**< At least one fragment of the access unit is flagged corrupted.*/
#define AU_P_Frame 0x02 /**< The access unit is a P_frame*/
#define AU_RAP 0x04 /**< The access unit is a random access point.*/
/** An access unit is the smallest piece of data with timing information.*/
typedef struct {
M4SYS_StreamDescription* stream ;
M4OSA_MemAddr32 dataAddress; /**< The data pointer. The size of this block
(allocated size) must be a 32-bits integer multiple*/
M4OSA_UInt32 size; /**< The size in bytes of the dataAddress. The size may
not match a 32-bits word boundary.*/
M4OSA_Time CTS; /**< The Composition Time Stamp*/
M4OSA_Time DTS; /**< The Decoded Time Stamp*/
M4SYS_AU_Attr attribute; /**< The attribute of the access unit*/
M4OSA_UInt8 nbFrag; /**< The number of fragments. It can be 0 if there is
no fragment.*/
M4SYS_Frag** frag; /**< An array of 'nbFrag' fragments. It stores the
fragments structure. The original definition
< of frag has been changed from M4SYS_Frag* frag[]
to M4SYS_Frag** frag since the support
< of such syntax is only a Microsoft extension of
the C compiler. */
} M4SYS_AccessUnit;
/* Error codes */
#define M4ERR_AU_NO_MORE_FRAG M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000001)
#define M4ERR_AU_BUFFER_OVERFLOW M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000002)
#define M4ERR_AU_BAD_INDEX M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000003)
#define M4ERR_NOT_ENOUGH_FRAG M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000004)
#endif /*M4SYS_ACCESSUNIT_H*/