📄 umc_splitter.h
字号:
/*
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright(c) 2003-2007 Intel Corporation. All Rights Reserved.
//
*/
#ifndef __UMC_SPLITTER_H__
#define __UMC_SPLITTER_H__
#include "umc_structures.h"
#include "umc_data_reader.h"
#include "umc_dynamic_cast.h"
#include "umc_memory_allocator.h"
#include "umc_media_data.h"
namespace UMC
{
class SplitterParams
{
DYNAMIC_CAST_DECL_BASE(SplitterParams)
public:
// Default constructor
SplitterParams();
// Destructor
virtual ~SplitterParams();
Ipp32u m_lFlags; // (Ipp32u) splitter's flags
DataReader *m_pDataReader; // (DataReader *) pointer to data reader
Ipp32u m_uiSelectedVideoPID; // ID for video stream chosen by user
Ipp32u m_uiSelectedAudioPID; // ID for audio stream chosen by user
MemoryAllocator *m_pMemoryAllocator; // (MemoryAllocator *) pointer to memory allocator object
};
enum TrackType
{
/* video types 0x0000XXXX */
TRACK_MPEG1V = 0x00000001,
TRACK_MPEG2V = 0x00000002,
TRACK_MPEG4V = 0x00000004,
TRACK_H261 = 0x00000008,
TRACK_H263 = 0x00000010,
TRACK_H264 = 0x00000020,
TRACK_DVSD = 0x00000040,
TRACK_DV50 = 0x00000080,
TRACK_DVHD = 0x00000100,
TRACK_DVSL = 0x00000200,
TRACK_VC1 = 0x00000400,
TRACK_WMV = 0x00000800,
TRACK_MJPEG = 0x00001000,
TRACK_YUV = 0x00002000,
TRACK_AVS = 0x00004000,
TRACK_ANY_VIDEO = 0x0000FFFF,
/* audio typTRACK 0x0XXX0000 */
TRACK_PCM = 0x00010000,
TRACK_LPCM = 0x00020000,
TRACK_AC3 = 0x00040000,
TRACK_AAC = 0x00080000,
TRACK_MPEGA = 0x00100000,
TRACK_TWINVQ = 0x00200000,
TRACK_DTS = 0x00400000,
TRACK_VORBIS = 0x00800000,
TRACK_AMR = 0x01000000,
TRACK_ANY_AUDIO = 0x0FFF0000,
TRACK_SUB_PIC = 0x10000000,
TRACK_DVD_NAV = 0x20000000,
TRACK_ANY_DVD = 0x30000000,
TRACK_VBI_TXT = 0x40000000,
TRACK_VBI_SPEC = 0x80000000,
TRACK_ANY_VBI = 0xC0000000,
TRACK_ANY_SPECIAL = 0xF0000000,
TRACK_UNKNOWN = 0x00000000
};
struct TrackInfo
{
DYNAMIC_CAST_DECL_BASE(TrackInfo)
TrackInfo()
{
m_Type = TRACK_UNKNOWN;
m_PID = 0;
m_isSelected = 0;
m_pDecSpecInfo = NULL;
m_pStreamInfo = NULL;
}
TrackType m_Type; // common type (all audio/video/other in one enum)
Ipp32u m_PID; //
Ipp32s m_isSelected; // if Track is on or off
MediaData *m_pDecSpecInfo; // Keeps DecSpecInfo and its length
StreamInfo *m_pStreamInfo; // Base for AudioStreamInfo, VideoStreamInfo, etc
};
class SplitterInfo
{
DYNAMIC_CAST_DECL_BASE(SplitterInfo)
public:
// Default constructor
SplitterInfo();
// Destructor
virtual ~SplitterInfo();
// common fields
Ipp32u m_splitter_flags;
SystemStreamType m_SystemType; // system type (MPEG4, MPEG2, AVI, pure)
Ipp32u m_nOfTracks; // number of tracks detected
Ipp64f m_dRate; // current playback rate
Ipp64f m_dDuration; // duration of stream
TrackInfo **m_ppTrackInfo; // array of pointers to TrackInfo(s)
/******************* below is DEPRECATED fields ***********************/
AudioStreamInfo m_audio_info; // DEPRECATED!!! (AudioStreamInfo) audio track 0 info
VideoStreamInfo m_video_info; // DEPRECATED!!! (VideoStreamInfo) video track 0 info
SystemStreamInfo m_system_info; // DEPRECATED!!! (SystemStreamInfo) media stream info
// memory for auxilary tracks will be allocated inside
// GetInfo method user should free it then
AudioStreamInfo *m_audio_info_aux; // DEPRECATED!!! auxilary audio tracks 1..
VideoStreamInfo *m_video_info_aux; // DEPRECATED!!! auxilary video tracks 1..
Ipp32s number_audio_tracks; // DEPRECATED!!! (Ipp32s) number of available audio tracks
Ipp32s number_video_tracks; // DEPRECATED!!! (Ipp32s) number of available video tracks
};
/*
// Class: Splitter
//
// Notes: Base abstract class of splitter. Class describes
// the high level interface of abstract splitter of media stream.
// All specific ( avi, mpeg2, mpeg4 etc ) must be implemented in
// derevied classes.
// Splitter uses this class to obtain data
//
*/
class Splitter
{
DYNAMIC_CAST_DECL_BASE(Splitter)
public:
// constructor
Splitter();
// decstructor
virtual ~Splitter() {}
// Get media data type
static SystemStreamType GetStreamType(DataReader *dr);
// Initialize splitter
virtual Status Init(SplitterParams& rInit) = 0;
// Close splitter and free all resources
virtual Status Close() = 0;
// Get next data, unlocks previously returned
virtual Status GetNextData(MediaData* /*data*/, Ipp32u /*nTrack*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Get next data without moving DataReader
virtual Status CheckNextData(MediaData* /*data*/, Ipp32u /*nTrack*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Set time position
virtual Status SetTimePosition(Ipp64f /*timePos*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Get time position
virtual Status GetTimePosition(Ipp64f& timePos)
{timePos = 0; return UMC_ERR_NOT_IMPLEMENTED;}
// Get splitter info
virtual Status GetInfo(SplitterInfo** /*ppInfo*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Set playback rate
virtual Status SetRate(Ipp64f /*rate*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// changes state of track
// iState = 0 means disable, iState = 1 means enable
virtual Status EnableTrack(Ipp32u /*nTrack*/, Ipp32s /*iState*/)
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Runs reading threads
virtual Status Run()
{
return UMC_ERR_NOT_IMPLEMENTED;
}
// Stops reading threads
virtual Status Stop() = 0;
/******************* below is DEPRECATED methods ***********************/
// DEPRECATED!!! Get next video data from track
virtual Status GetNextVideoData(MediaData* data, Ipp32u track_idx);
// DEPRECATED!!! Get next audio data from track
virtual Status GetNextAudioData(MediaData* data, Ipp32u track_idx);
// DEPRECATED!!! Get next video data
virtual Status GetNextVideoData(MediaData* data);
// DEPRECATED!!! Get next audio data
virtual Status GetNextAudioData(MediaData* data);
// DEPRECATED!!! Get next video data
virtual Status CheckNextVideoData(MediaData* data,Ipp32u track_idx=0);
// DEPRECATED!!! Get next audio data
virtual Status CheckNextAudioData(MediaData* data,Ipp32u track_idx=0);
// DEPRECATED!!! Set position
virtual Status SetPosition(Ipp64f) { return UMC_OK; }
// DEPRECATED!!! Get position
virtual Status GetPosition(Ipp64f) { return UMC_OK; }
// DEPRECATED!!! Get splitter info
virtual Status GetInfo(SplitterInfo* pInfo);
// DEPRECATED!!!
virtual Status PrepareForRePosition()
{return UMC_OK;};
protected:
DataReader *m_pDataReader; // (DataReader *) pointer to data reader
SplitterInfo m_info; // (SplitterInfo *) splitter info
Status GetBaseNextData(MediaData* data, Ipp32u nTrack, bool bCheck); // !!! TEMPORAL
Ipp8u pFirstFrame[32]; // !!! TEMPORAL
Ipp8u pAudioTrTbl[32];
Ipp8u pVideoTrTbl[32];
SplitterInfo *pNewSplInfo;
};
} // namespace UMC
#endif /* __UMC_SPLITTER_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -