📄 umc_splitter.cpp
字号:
/*//// 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-2005 Intel Corporation. All Rights Reserved.//*/#include <string.h>#include "umc_splitter.h"namespace UMC{SplitterParams::SplitterParams(){ m_lFlags = 0; m_pDataReader = NULL; m_uiSelectedVideoPID = SELECT_ANY_VIDEO_PID; m_uiSelectedAudioPID = SELECT_ANY_AUDIO_PID;} // SplitterParams::SplitterParams()SplitterParams::~SplitterParams(){} // SplitterParams::~SplitterParams()SplitterInfo::SplitterInfo(){ m_splitter_flags = 0; m_audio_info_aux = NULL; m_video_info_aux = NULL; number_audio_tracks = 1; number_video_tracks = 1; memset(&m_audio_info, 0, sizeof(m_audio_info)); memset(&m_video_info, 0, sizeof(m_video_info)); memset(&m_system_info, 0, sizeof(m_system_info));} // SplitterInfo::SplitterInfo()SplitterInfo::~SplitterInfo(){} // SplitterInfo::~SplitterInfo()SystemStreamType Splitter::GetStreamType(DataReader* dr){ vm_var32 long_code; vm_byte byte_code; Status umcSts = UMC_OK; if (NULL == dr) return UNDEF_STREAM; else dr->Reset(); umcSts = dr->CheckUInt(&long_code, 0); if (UMC_OK != umcSts) return UNDEF_STREAM; if (long_code == 'RIFF') // RIFF { //avi RIFF container return AVI_STREAM; } umcSts = dr->CheckUInt(&long_code, 4); if (UMC_OK != umcSts) return UNDEF_STREAM; if (long_code == 'ftyp') { umcSts = dr->CheckUInt(&long_code,8); if (UMC_OK != umcSts) return UNDEF_STREAM; // mp42 if (long_code == 'mp42' || long_code == 'mp41' || long_code == 'isom' || long_code == 'MSNV' || long_code == 'M4A ') { //MP4 container return MP4_ATOM_STREAM; } } umcSts = dr->CheckUInt(&long_code,4); if (UMC_OK != umcSts) return UNDEF_STREAM; if (long_code == 'moov') { return MP4_ATOM_STREAM; } umcSts = dr->CheckByte(&byte_code,0); if (UMC_OK != umcSts) return UNDEF_STREAM; umcSts = dr->CheckUInt(&long_code,0); if (UMC_OK != umcSts) return UNDEF_STREAM; if ((byte_code == 0x47) || ((long_code & 0xffffff00) == 0x00000100) || (long_code == 0x00000001)) { //mpeg 1 ,2, 4 programm stream system return MPEGx_SYSTEM_STREAM; } if (((long_code & 0xfff00000) == 0xfff00000) || ((long_code & 0xffffff00) == 0x49443300) || ((long_code & 0xffff0000) == 0x0b770000)) { return MPEGx_SYSTEM_STREAM; } if (((long_code & 0xfffffc00) == 0x00008000)) { //H.263 pure video return MPEGx_SYSTEM_STREAM; } if (((long_code & 0xfffff000) == 0x00010000)) { //H.261 pure video return MPEGx_SYSTEM_STREAM; } if (((long_code & 0xffffff00) == 0x00000100)) { //mpeg 1 ,2, 4 programm stream system return MPEGx_SYSTEM_STREAM; } else if (0 == long_code) { int check_counter = 1; while (0 == long_code) { umcSts = dr->CheckUInt(&long_code,check_counter); if (UMC_OK != umcSts) return UNDEF_STREAM; check_counter++; } umcSts = dr->CheckUInt(&long_code,check_counter); if (UMC_OK != umcSts) return UNDEF_STREAM; if (((long_code & 0xffffff00) == 0x00000100) || ((long_code & 0x0000fff0) == 0x0000fff0)) { //mpeg 2 programm stream system return MPEGx_SYSTEM_STREAM; } } //last chanse { vm_byte byte_code1; umcSts = dr->CheckByte(&byte_code, 4); if (UMC_OK != umcSts) return UNDEF_STREAM; umcSts = dr->CheckByte(&byte_code1, 196); if (UMC_OK != umcSts) return UNDEF_STREAM; if ((byte_code == 0x47) && (byte_code1 == 0x47)) { //mpeg2 ts tts return MPEGx_SYSTEM_STREAM; } } return UNDEF_STREAM;} // SystemStreamType Splitter::GetStreamType(DataReader* dr)} // namespace UMC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -