rm_recog.cpp
来自「symbian 下的helix player源代码」· C++ 代码 · 共 193 行
CPP
193 行
/*============================================================================*
*
* (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
*
*============================================================================*/
/*
* Description:
*
*/
#include <e32svr.h>
#include <apmrec.h>
#include <apmstd.h>
#include "hxassert.h"
//#include "debug.h"
#include "hxsym_mimetypes.h"
#include "recog_util.h"
#include "rm_recog.h"
//
// some constants
//
// UID
const TUid KUidMimeRealMediaRecognizer={0x10009D0D};
// min and max buffer length required to recognize file datatype
const TInt KMinBufferLength=4;
const TInt KMaxBufferLength=256;
//
// list of mimetypes we recognize
//
const TUint8* const k_dataTypes[] =
{
// basic datatypes always recognized
HXSYM_MIMETYPE_RM,
HXSYM_MIMETYPE_RAM,
HXSYM_MIMETYPE_SDP,
HXSYM_MIMETYPE_AMR,
// mp3
#if defined(HELIX_FEATURE_AUDIO_MPA_LAYER3)
HXSYM_MIMETYPE_MP3,
#endif
// 3gpp
#if defined(HELIX_FEATURE_3GPP)
HXSYM_MIMETYPE_3GPAUDIO,
HXSYM_MIMETYPE_3GPVIDEO,
HXSYM_MIMETYPE_MP4AUDIO,
HXSYM_MIMETYPE_MP4VIDEO,
#endif
// smil
#if defined(HELIX_FEATURE_SMIL2)
HXSYM_MIMETYPE_SMIL
#endif
};
#define ARRAY_COUNT(x) (sizeof(x) / sizeof(x[0]))
const TUint MIMETYPE_COUNT = ARRAY_COUNT(k_dataTypes);
CApaRealMediaRecognizer::CApaRealMediaRecognizer()
: CApaDataRecognizerType(KUidMimeRealMediaRecognizer, CApaDataRecognizerType::EHigh)
{
iCountDataTypes = MIMETYPE_COUNT;
}
TUint CApaRealMediaRecognizer::PreferredBufSize()
{
return KMaxBufferLength;
}
TDataType CApaRealMediaRecognizer::SupportedDataTypeL(TInt aIndex) const
{
HX_ASSERT(aIndex < MIMETYPE_COUNT);
return TDataType(_L8(k_dataTypes[aIndex]));
}
void CApaRealMediaRecognizer::DoRecognizeL(const TDesC& aName,
const TDesC8& aBuffer)
{
iConfidence = ENotRecognized;
_LIT(KRtspScheme, "rtsp");
// first check name for scheme ('rtsp://')
if(RecogUtil::FindScheme(KRtspScheme, aName))
{
iDataType = TDataType(_L8(HXSYM_MIMETYPE_RM));
iConfidence = ECertain;
}
else
{
// not a scheme; look at buffer...
TInt length=aBuffer.Length();
if (length>=KMinBufferLength)
{
// HXSYM_MIMETYPE_RM
if ((iConfidence = RecogUtil::IsRMFile(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_RM));
}
// HXSYM_MIMETYPE_SMIL
else if ((iConfidence = RecogUtil::IsSMILFile(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_SMIL));
}
// HXSYM_MIMETYPE_SDP
else if ((iConfidence = RecogUtil::IsSDPFile(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_SDP));
}
// HXSYM_MIMETYPE_RAM
else if ((iConfidence = RecogUtil::IsRAMFile(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_RAM));
}
// HXSYM_MIMETYPE_AMR
else if ((iConfidence = RecogUtil::IsAMRFile(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_AMR));
}
#if defined(HELIX_FEATURE_3GPP)
// HXSYM_MIMETYPE_3GPAUDIO/VIDEO
else if (RecogUtil::Is3GPPFile(aName, aBuffer) != ENotRecognized)
{
if ((iConfidence = RecogUtil::IsMPEG4Audio(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_3GPAUDIO));
}
else
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_3GPVIDEO));
iConfidence = EProbable;
}
}
// HXSYM_MIMETYPE_MP4AUDIO/VIDEO
else if (RecogUtil::IsMPEG4File(aName, aBuffer) != ENotRecognized)
{
if ((iConfidence = RecogUtil::IsMPEG4Audio(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_MP4AUDIO));
}
else
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_MP4VIDEO));
iConfidence = EProbable;
}
}
//HELIX_FEATURE_3GPP
#endif
#if defined(HELIX_FEATURE_AUDIO_MPA_LAYER3)
// HXSYM_MIMETYPE_MP3
else if ((iConfidence = RecogUtil::IsMP3File(aName, aBuffer)) != ENotRecognized)
{
iDataType=TDataType(_L8(HXSYM_MIMETYPE_MP3));
}
#endif
#if !defined(HELIX_FEATURE_SMIL2)
// HXSYM_MIMETYPE_SMIL
if (iDataType==TDataType(_L8(HXSYM_MIMETYPE_SMIL)))
{
iConfidence = ENotRecognized;
}
#endif
}
}
}
EXPORT_C CApaDataRecognizerType* CreateRecognizer()
// The gate function - ordinal 1
//
{
CApaDataRecognizerType* thing=new CApaRealMediaRecognizer();
return thing;
}
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
//
// DLL entry point
//
{
return KErrNone;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?