17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file         M4SYS_AccessUnit.h
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Access unit manipulation
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note         This file defines the access unit structure,
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *               and declares functions to manipulate it.
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4SYS_ACCESSUNIT_H
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4SYS_ACCESSUNIT_H
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h"
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h"
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Time.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4SYS_Stream.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** The attribute of a fragment*/
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum {
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_kFragAttrOk        = 01, /**< The fragment is correct, there is no error
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                         (size cannot be 0)*/
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_kFragAttrCorrupted = 02, /**< The fragment is corrupted (there is at least a bit or byte
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        error somewhere in the fragment (size cannot be 0)*/
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_kFragAttrLost      = 03  /**< The fragment is lost, so the size must be 0.*/
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_FragAttr;
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** A Fragment is a piece of access unit. It can be decoded without decoding the others*/
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct {
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_MemAddr8  fragAddress;   /**< The data pointer. All fragments of the same access unit
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        must be contiguous in memory*/
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_UInt32    size;          /**< The size of the fragment. It must be 0 if fragment is
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        flagged 'lost'*/
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_FragAttr  isCorrupted;   /**< The attribute of this fragment*/
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_Frag;
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**< The attribute of an access unit*/
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef M4OSA_UInt8 M4SYS_AU_Attr;
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define AU_Corrupted   0x01 /**< At least one fragment of the access unit is flagged corrupted.*/
575e61cfe5bb05d061ee4ef951b43156e68ff710afDheeraj Sharma#define AU_P_Frame     0x02 /**< The access unit is a P_frame*/
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define AU_RAP         0x04 /**< The access unit is a random access point.*/
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** An access unit is the smallest piece of data with timing information.*/
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct {
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_StreamDescription*    stream ;
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_MemAddr32             dataAddress; /**< The data pointer. The size of this block
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            (allocated size) must be a 32-bits integer multiple*/
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_UInt32                size;        /**< The size in bytes of the dataAddress. The size may
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                 not match a 32-bits word boundary.*/
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_Time                  CTS;         /**< The Composition Time Stamp*/
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_Time                  DTS;         /**< The Decoded Time Stamp*/
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_AU_Attr               attribute;   /**< The attribute of the access unit*/
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4OSA_UInt8                 nbFrag;      /**< The number of fragments. It can be 0 if there is
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                no fragment.*/
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  M4SYS_Frag**                frag;        /**< An array of 'nbFrag' fragments. It stores the
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                fragments structure. The original definition
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              < of frag has been changed from M4SYS_Frag* frag[]
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                to M4SYS_Frag** frag since the support
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              < of such syntax is only a Microsoft extension of
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                the C compiler. */
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_AccessUnit;
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Error codes */
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_AU_NO_MORE_FRAG      M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000001)
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_AU_BUFFER_OVERFLOW   M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000002)
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_AU_BAD_INDEX         M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000003)
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_NOT_ENOUGH_FRAG      M4OSA_ERR_CREATE(M4_ERR,M4SYS_CMAPI,0x000004)
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4SYS_ACCESSUNIT_H*/
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
91