• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /**
17  ************************************************************************
18  * @file         M4SYS_AccessUnit.h
19  * @brief        Access unit manipulation
20  * @note         This file defines the access unit structure,
21  *               and declares functions to manipulate it.
22  ************************************************************************
23 */
24 
25 #ifndef M4SYS_ACCESSUNIT_H
26 #define M4SYS_ACCESSUNIT_H
27 
28 #include "M4OSA_Types.h"
29 #include "M4OSA_Error.h"
30 #include "M4OSA_Memory.h"
31 #include "M4OSA_Time.h"
32 #include "M4SYS_Stream.h"
33 
34 /** The attribute of a fragment*/
35 typedef enum {
36   M4SYS_kFragAttrOk        = 01, /**< The fragment is correct, there is no error
37                                          (size cannot be 0)*/
38   M4SYS_kFragAttrCorrupted = 02, /**< The fragment is corrupted (there is at least a bit or byte
39                                         error somewhere in the fragment (size cannot be 0)*/
40   M4SYS_kFragAttrLost      = 03  /**< The fragment is lost, so the size must be 0.*/
41 } M4SYS_FragAttr;
42 
43 
44 /** A Fragment is a piece of access unit. It can be decoded without decoding the others*/
45 typedef struct {
46   M4OSA_MemAddr8  fragAddress;   /**< The data pointer. All fragments of the same access unit
47                                         must be contiguous in memory*/
48   M4OSA_UInt32    size;          /**< The size of the fragment. It must be 0 if fragment is
49                                         flagged 'lost'*/
50   M4SYS_FragAttr  isCorrupted;   /**< The attribute of this fragment*/
51 } M4SYS_Frag;
52 
53 /**< The attribute of an access unit*/
54 typedef M4OSA_UInt8 M4SYS_AU_Attr;
55 
56 #define AU_Corrupted   0x01 /**< At least one fragment of the access unit is flagged corrupted.*/
57 #define AU_P_Frame     0x02 /**< The access unit is a P_frame*/
58 #define AU_RAP         0x04 /**< The access unit is a random access point.*/
59 
60 
61 /** An access unit is the smallest piece of data with timing information.*/
62 typedef struct {
63   M4SYS_StreamDescription*    stream ;
64   M4OSA_MemAddr32             dataAddress; /**< The data pointer. The size of this block
65                                             (allocated size) must be a 32-bits integer multiple*/
66   M4OSA_UInt32                size;        /**< The size in bytes of the dataAddress. The size may
67                                                  not match a 32-bits word boundary.*/
68   M4OSA_Time                  CTS;         /**< The Composition Time Stamp*/
69   M4OSA_Time                  DTS;         /**< The Decoded Time Stamp*/
70   M4SYS_AU_Attr               attribute;   /**< The attribute of the access unit*/
71   M4OSA_UInt8                 nbFrag;      /**< The number of fragments. It can be 0 if there is
72                                                 no fragment.*/
73   M4SYS_Frag**                frag;        /**< An array of 'nbFrag' fragments. It stores the
74                                                 fragments structure. The original definition
75                                               < of frag has been changed from M4SYS_Frag* frag[]
76                                                 to M4SYS_Frag** frag since the support
77                                               < of such syntax is only a Microsoft extension of
78                                                 the C compiler. */
79 } M4SYS_AccessUnit;
80 
81 /* Error codes */
82 #define M4ERR_AU_NO_MORE_FRAG      M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000001)
83 #define M4ERR_AU_BUFFER_OVERFLOW   M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000002)
84 #define M4ERR_AU_BAD_INDEX         M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000003)
85 #define M4ERR_NOT_ENOUGH_FRAG      M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000004)
86 
87 
88 
89 #endif /*M4SYS_ACCESSUNIT_H*/
90 
91