/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
************************************************************************
* @file M4SYS_Stream.h
* @brief Stream manipulation
* @note This file defines the stream structure.
************************************************************************
*/
#ifndef M4SYS_STREAM_H
#define M4SYS_STREAM_H
#include "M4OSA_Types.h"
#include "M4OSA_Memory.h"
#include "M4OSA_Time.h"
typedef M4OSA_UInt32 M4SYS_StreamID;
/** The streamType type provides a way to distinguish all streams (AAC, AMR, YUV420, MPEG-4 Video,
H263). Stream types can be sorted in 2 ways:
@arg Some of them are raw data, others are encoded
@arg Some of them are related to an audio media, a video media...
@n So a specific naming convention has been designed to allow a quick parsing of the streamType
value to return the above categories. StreamType is an un-signed integer on 16 bits.
@arg The first byte (MSB) defines the codec type. It can be either Audio,Video, Picture,
Text or Scene.
@arg The second byte (LSB) defines the sub-codecs type (ie YUV420, PCM_16 bits, AMR...).
Moreover if this value is greater than 0x80 the stream is a raw stream, else the stream
is an encoded one
@n 0x0000 is a forbidden value, it describes an unknown stream */
typedef enum {
M4SYS_kUnknown = 0x0000,
/* Stream type definition
0xYYZZ : YY is the codec type (Audio, Video, Picture, Scene ...)
ZZ is the sub-codec type (AAC, AMR , ...)
if ZZ is greater than 0x80 it is a raw format*/
/* Audio ones : Range from [0x0100-0x01FF]*/
M4SYS_kAudioUnknown = 0x0100,
M4SYS_kAAC = 0x0101,
M4SYS_kCELP = 0x0102,
M4SYS_kAMR = 0x0103,
M4SYS_kAMR_WB = 0x0104,
M4SYS_kMP3 = 0x0105,
M4SYS_kMIDI = 0x0106,
M4SYS_kWMA = 0x0107,
M4SYS_kREALAUDIO = 0x0108,
M4SYS_kEVRC = 0x0109,
M4SYS_kPCM_16bitsS = 0x0181, /* PCM 16 bits Signed */
M4SYS_kPCM_16bitsU = 0x0182, /* PCM 16 bits Un-signed */
M4SYS_kPCM_8bitsU = 0x0183, /* PCM 8 bits Un-signed */
/* FixAA 2008/03/03 types: M4SYS_kPCM_16bitsS, M4SYS_kPCM_16bitsU and M4SYS_kPCM_8bitsU
are now only used by AudioMixer and ReaderAVI => An update is necessary in the future for use
type M4SYS_kPCM */
M4SYS_kXMF = 0x0184,
M4SYS_kSMAF = 0x0185,
M4SYS_kIMEL = 0x0186,
M4SYS_kBBA = 0x0187,
M4SYS_kBPC = 0x0188,
M4SYS_kADPCM = 0x0189, /* ADPCM added */
M4SYS_kPCM = 0x0190, /* stream type added: PCM; PR2569 fixAA */
M4SYS_kAudioAll = 0x01FF, /* all audio streams */
/* Video ones : Range [0x0200-0x02FF]*/
M4SYS_kVideoUnknown = 0x0200,
M4SYS_kMPEG_4 = 0x0201,
M4SYS_kH263 = 0x0202,
M4SYS_kH263pp = 0x0203,
M4SYS_kH264 = 0x0204,
M4SYS_kREALVIDEO = 0x0205,
M4SYS_kYUV420 = 0x0281,
M4SYS_kRGB32 = 0x0282,
M4SYS_kBGR32 = 0x0283,
M4SYS_kRGB24 = 0x0284,
M4SYS_kBGR24 = 0x0285,
M4SYS_kVideoAll = 0x02FF, /* all video streams */
/* Picture ones : Range [0x0300-0x03FF]*/
M4SYS_kPictureUnknown = 0x0300,
M4SYS_kJPEG = 0x0301,
M4SYS_kGIF = 0x0302,
M4SYS_kBMP = 0x0383,
M4SYS_kStillAll = 0x03FF, /* all still picture streams */
/* Text ones : Range [0x0400-0x04FF]*/
M4SYS_kTextUnknown = 0x0400,
M4SYS_kTimedText = 0x0401,
M4SYS_kUTF8 = 0x0481,
M4SYS_kUTF16 = 0x0482,
M4SYS_kUCS2 = 0x0483,
M4SYS_kTextAll = 0x04FF, /* all text streams */
/* Scene & Graphics ones : Range [0x0500-0x05FF]*/
M4SYS_kSceneUnknown = 0x0500,
M4SYS_kSMIL = 0x0501,
M4SYS_kBIFS = 0x0502,
M4SYS_kSceneAll = 0x05FF, /* all scene streams */
/* hinted ones : Range [0x0600-0x06FF]*/
M4SYS_kHintedUnknown = 0x0600,
M4SYS_kRTP = 0x0601,
M4SYS_kMPEG2_TS = 0x0602,
M4SYS_kHintedAll = 0x06FF, /* all packetized streams */
/* MPEG-4 system ones : Range [0x0700-0x07FF]*/
M4SYS_kSysUnknown = 0x0700,
M4SYS_kODS = 0x0701,
M4SYS_kIPMP = 0x0702,
M4SYS_kOCI = 0x0703,
M4SYS_kSysAll = 0x07FF /* all system streams*/
} M4SYS_StreamType ;
typedef struct {
M4SYS_StreamID streamID ;
M4OSA_UInt32 value ;
} M4SYS_StreamIDValue ;
typedef struct {
M4SYS_StreamID streamID ;
M4OSA_UInt32 size ;
M4OSA_MemAddr32 addr ;
} M4SYS_StreamIDmemAddr ;
/** This strucure defines a set of properties associated to a stream*/
typedef struct {
M4SYS_StreamID streamID; /**< The ID of the stream. It must be unique for a media
(ie in a MP4 file, two tracks can not have two times the same ID).
0 is forbidden.*/
M4SYS_StreamType streamType; /**< The stream type of the stream*/
M4OSA_UInt8 profileLevel; /**< The profile & level of a stream. It is related to the
stream type & the definition comes from the standard bodies
(i.e. MPEG-4 Video & MPEG-4 Audio). Some values are
pre-defined: 0xFE=userPrivate 0xFF=no Profile &
Level specified*/
M4OSA_UInt32 decoderSpecificInfoSize; /**< The decoder configuration. These bytes are
needed to initialise a decoder.*/
M4OSA_MemAddr32 decoderSpecificInfo; /**< The size (in bytes) of the decoder specific info.*/
M4OSA_UInt32 timeScale; /**< The time scale of the stream. It means that all timing
duration of this stream are computed in this timescale
(ie timeScale = 8000, means there are 8000 ticks in
one second)*/
M4OSA_Time duration; /**< The stream duration of this stream. The time unit is the
time scale. The value can be set to M4SYS_UnknownTime if
the duration is not known.*/
M4OSA_Int32 averageBitrate; /**< The average bitrate (in bit per second) of this stream.
The average bitrate is computed on the stream duration.
-1 value means either there is no average bitrate or no
average bitrate is provided.*/
M4OSA_Int32 maxBitrate; /**< The maximum bitrate (in bit per second) of this stream.
The maximum bitrate is computed on a sliding window of 1
second. -1 value means either there is no max. bitrate or
no max. bitrate is provided.*/
} M4SYS_StreamDescription;
typedef enum {
M4SYS_kPreviousRAP = 0x01 ,
M4SYS_kNextRAP = 0x02 ,
M4SYS_kClosestRAP = 0x03 ,
M4SYS_kNoRAPprevious = 0x11 ,
M4SYS_kNoRAPnext = 0x12 ,
M4SYS_kNoRAPclosest = 0x13 ,
M4SYS_kBeginning = 0x20
} M4SYS_SeekAccessMode ;
#endif /*M4SYS_STREAM_H*/