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