blob: 6fffc16396d3d7ccec3d54367220419faa00d914 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* 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.
* -------------------------------------------------------------------
*/
#include "pvamrffrec_plugin.h"
#include "pvfile.h"
#include "oscl_file_io.h"
PVMFStatus PVAMRFFRecognizerPlugin::SupportedFormats(PVMFRecognizerMIMEStringList& aSupportedFormatsList)
{
// Return AMR as supported type
OSCL_HeapString<OsclMemAllocator> supportedformat = PVMF_MIME_AMRFF;
aSupportedFormatsList.push_back(supportedformat);
return PVMFSuccess;
}
PVMFStatus PVAMRFFRecognizerPlugin::Recognize(PVMFDataStreamFactory& aSourceDataStreamFactory, PVMFRecognizerMIMEStringList* aFormatHint,
Oscl_Vector<PVMFRecognizerResult, OsclMemAllocator>& aRecognizerResult)
{
OSCL_UNUSED_ARG(aFormatHint);
OSCL_wHeapString<OsclMemAllocator> tmpfilename;
Oscl_FileServer fileServ;
PVFile pvfile;
pvfile.SetCPM(&aSourceDataStreamFactory);
if (!(pvfile.Open(tmpfilename.get_cstr(), Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, fileServ)))
{
char* readData = NULL;
readData = (char*)(oscl_malloc(sizeof(char) * AMRFF_MIN_DATA_SIZE_FOR_RECOGNITION));
if (readData != NULL)
{
int bytesRead = 0;
bytesRead = pvfile.Read(readData, sizeof(char), AMRFF_MIN_DATA_SIZE_FOR_RECOGNITION);
if (bytesRead != AMRFF_MIN_DATA_SIZE_FOR_RECOGNITION)
{
pvfile.Close();
oscl_free(readData);
return PVMFFailure;
}
if (readData[0] == '#' && readData[1] == '!' && readData[2] == 'A' && readData[3] == 'M' && readData[4] == 'R')
{
PVMFRecognizerResult result;
result.iRecognizedFormat = PVMF_MIME_AMRFF;
result.iRecognitionConfidence = PVMFRecognizerConfidenceCertain;
aRecognizerResult.push_back(result);
}
}
pvfile.Close();
oscl_free(readData);
return PVMFFailure;
}
else
{
return PVMFFailure;
}
return PVMFSuccess;
}
PVMFStatus PVAMRFFRecognizerPlugin::GetRequiredMinBytesForRecognition(uint32& aBytes)
{
aBytes = AMRFF_MIN_DATA_SIZE_FOR_RECOGNITION;
return PVMFSuccess;
}