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 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4SYS_Stream.h 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Stream manipulation 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file defines the stream structure. 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4SYS_STREAM_H 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4SYS_STREAM_H 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Time.h" 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef M4OSA_UInt32 M4SYS_StreamID; 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** The streamType type provides a way to distinguish all streams (AAC, AMR, YUV420, MPEG-4 Video, 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi H263). Stream types can be sorted in 2 ways: 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@arg Some of them are raw data, others are encoded 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@arg Some of them are related to an audio media, a video media... 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@n So a specific naming convention has been designed to allow a quick parsing of the streamType 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi value to return the above categories. StreamType is an un-signed integer on 16 bits. 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@arg The first byte (MSB) defines the codec type. It can be either Audio,Video, Picture, 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Text or Scene. 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@arg The second byte (LSB) defines the sub-codecs type (ie YUV420, PCM_16 bits, AMR...). 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Moreover if this value is greater than 0x80 the stream is a raw stream, else the stream 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is an encoded one 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi@n 0x0000 is a forbidden value, it describes an unknown stream */ 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum { 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kUnknown = 0x0000, 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Stream type definition 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0xYYZZ : YY is the codec type (Audio, Video, Picture, Scene ...) 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ZZ is the sub-codec type (AAC, AMR , ...) 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ZZ is greater than 0x80 it is a raw format*/ 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Audio ones : Range from [0x0100-0x01FF]*/ 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kAudioUnknown = 0x0100, 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kAAC = 0x0101, 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kCELP = 0x0102, 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kAMR = 0x0103, 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kAMR_WB = 0x0104, 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kMP3 = 0x0105, 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kMIDI = 0x0106, 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kWMA = 0x0107, 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kREALAUDIO = 0x0108, 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kEVRC = 0x0109, 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPCM_16bitsS = 0x0181, /* PCM 16 bits Signed */ 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPCM_16bitsU = 0x0182, /* PCM 16 bits Un-signed */ 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPCM_8bitsU = 0x0183, /* PCM 8 bits Un-signed */ 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FixAA 2008/03/03 types: M4SYS_kPCM_16bitsS, M4SYS_kPCM_16bitsU and M4SYS_kPCM_8bitsU 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi are now only used by AudioMixer and ReaderAVI => An update is necessary in the future for use 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi type M4SYS_kPCM */ 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kXMF = 0x0184, 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSMAF = 0x0185, 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kIMEL = 0x0186, 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBBA = 0x0187, 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBPC = 0x0188, 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kADPCM = 0x0189, /* ADPCM added */ 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPCM = 0x0190, /* stream type added: PCM; PR2569 fixAA */ 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kAudioAll = 0x01FF, /* all audio streams */ 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Video ones : Range [0x0200-0x02FF]*/ 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kVideoUnknown = 0x0200, 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kMPEG_4 = 0x0201, 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kH263 = 0x0202, 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kH263pp = 0x0203, 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kH264 = 0x0204, 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kREALVIDEO = 0x0205, 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kYUV420 = 0x0281, 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kRGB32 = 0x0282, 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBGR32 = 0x0283, 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kRGB24 = 0x0284, 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBGR24 = 0x0285, 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kVideoAll = 0x02FF, /* all video streams */ 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Picture ones : Range [0x0300-0x03FF]*/ 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPictureUnknown = 0x0300, 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kJPEG = 0x0301, 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kGIF = 0x0302, 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBMP = 0x0383, 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kStillAll = 0x03FF, /* all still picture streams */ 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Text ones : Range [0x0400-0x04FF]*/ 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kTextUnknown = 0x0400, 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kTimedText = 0x0401, 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kUTF8 = 0x0481, 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kUTF16 = 0x0482, 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kUCS2 = 0x0483, 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kTextAll = 0x04FF, /* all text streams */ 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Scene & Graphics ones : Range [0x0500-0x05FF]*/ 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSceneUnknown = 0x0500, 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSMIL = 0x0501, 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBIFS = 0x0502, 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSceneAll = 0x05FF, /* all scene streams */ 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* hinted ones : Range [0x0600-0x06FF]*/ 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kHintedUnknown = 0x0600, 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kRTP = 0x0601, 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kMPEG2_TS = 0x0602, 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kHintedAll = 0x06FF, /* all packetized streams */ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* MPEG-4 system ones : Range [0x0700-0x07FF]*/ 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSysUnknown = 0x0700, 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kODS = 0x0701, 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kIPMP = 0x0702, 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kOCI = 0x0703, 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kSysAll = 0x07FF /* all system streams*/ 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_StreamType ; 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamID ; 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 value ; 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_StreamIDValue ; 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamID ; 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 size ; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr32 addr ; 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_StreamIDmemAddr ; 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** This strucure defines a set of properties associated to a stream*/ 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamID; /**< The ID of the stream. It must be unique for a media 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (ie in a MP4 file, two tracks can not have two times the same ID). 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0 is forbidden.*/ 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamType streamType; /**< The stream type of the stream*/ 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 profileLevel; /**< The profile & level of a stream. It is related to the 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi stream type & the definition comes from the standard bodies 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (i.e. MPEG-4 Video & MPEG-4 Audio). Some values are 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pre-defined: 0xFE=userPrivate 0xFF=no Profile & 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Level specified*/ 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 decoderSpecificInfoSize; /**< The decoder configuration. These bytes are 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi needed to initialise a decoder.*/ 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr32 decoderSpecificInfo; /**< The size (in bytes) of the decoder specific info.*/ 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 timeScale; /**< The time scale of the stream. It means that all timing 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi duration of this stream are computed in this timescale 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (ie timeScale = 8000, means there are 8000 ticks in 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi one second)*/ 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time duration; /**< The stream duration of this stream. The time unit is the 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time scale. The value can be set to M4SYS_UnknownTime if 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the duration is not known.*/ 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 averageBitrate; /**< The average bitrate (in bit per second) of this stream. 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The average bitrate is computed on the stream duration. 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -1 value means either there is no average bitrate or no 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi average bitrate is provided.*/ 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 maxBitrate; /**< The maximum bitrate (in bit per second) of this stream. 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The maximum bitrate is computed on a sliding window of 1 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi second. -1 value means either there is no max. bitrate or 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi no max. bitrate is provided.*/ 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_StreamDescription; 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum { 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kPreviousRAP = 0x01 , 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kNextRAP = 0x02 , 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kClosestRAP = 0x03 , 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kNoRAPprevious = 0x11 , 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kNoRAPnext = 0x12 , 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kNoRAPclosest = 0x13 , 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_kBeginning = 0x20 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4SYS_SeekAccessMode ; 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4SYS_STREAM_H*/ 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 186