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