/* * 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*/