blob: 6e7bb4d592b1d73d545325e32831431ad80b95ca [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.
* -------------------------------------------------------------------
*/
/**
* @file pvaenodefactoryutility.h
* PVAuthorEngine Node Factory Utility for single core builds
*/
#ifndef PVAE_NODE_FACTORY_UTILITY_H_INCLUDED
#define PVAE_NODE_FACTORY_UTILITY_H_INCLUDED
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef OSCL_STRING_H_INCLUDED
#include "oscl_string.h"
#endif
#ifndef PVAUTHORENGINE_H_INCLUDED
#include "pvauthorengine.h"
#endif
#ifndef PVMP4FFCN_FACTORY_H_INCLUDED
#include "pvmp4ffcn_factory.h"
#endif
#ifndef PVMF_FILEOUTPUT_FACTORY_H_INCLUDED
#include "pvmf_fileoutput_factory.h"
#endif
#ifndef PVMP4FFCN_CLIPCONFIG_H_INCLUDED
#include "pvmp4ffcn_clipconfig.h"
#endif
#ifndef PVMP4FFCN_TRACKCONFIG_H_INCLUDED
#include "pvmp4ffcn_trackconfig.h"
#endif
#ifndef PVMF_FILEOUTPUT_CONFIG_H_INCLUDED
#include "pvmf_fileoutput_config.h"
#endif
#ifndef PV_MP4_H263_ENC_EXTENSION_H_INCLUDED
#include "pvmp4h263encextension.h"
#endif
#ifndef PVMFAMRENCNODE_EXTENSION_H_INCLUDED
#include "pvmfamrencnode_extension.h"
#endif
#ifdef USE_OMX_ENC_NODE
#ifndef PVMF_OMX_ENC_FACTORY_H_INCLUDED
#include "pvmf_omx_enc_factory.h"
#endif
#else
#ifndef PVMFAVCENCNODE_FACTORY_H_INCLUDED
#include "pvmf_avcenc_node_factory.h"
#endif
#ifndef PVMF_VIDEOENC_NODE_FACTORY_H_INCLUDED
#include "pvmf_videoenc_node_factory.h"
#endif
#ifndef PVMF_AMRENC_NODE_FACTORY_H_INCLUDED
#include "pvmf_amrenc_node_factory.h"
#endif
#endif
class PVAuthorEngineNodeFactoryUtility
{
public:
static PVMFNodeInterface* CreateEncoder(const PVUuid& aUuid)
{
PVMFNodeInterface* node = NULL;
#ifdef USE_OMX_ENC_NODE
if (aUuid == KPVMFOMXVideoEncNodeUuid)
{
node = PVMFOMXEncNodeFactory::CreatePVMFOMXEncNode();
}
else if (aUuid == KPVMFOMXAudioEncNodeUuid)
{
node = PVMFOMXEncNodeFactory::CreatePVMFOMXEncNode();
}
#else
if (aUuid == PVMFVideoEncNodeUuid)
{
node = PVMFVideoEncNodeFactory::CreateVideoEncNode();
}
else if (aUuid == PvmfAmrEncNodeUuid)
{
node = PvmfAmrEncNodeFactory::Create();
}
else if (aUuid == PVMFAvcEncNodeUuid)
{
node = PVMFAvcEncNodeFactory::CreateAvcEncNode();
}
#endif
return node;
}
static PVMFNodeInterface* CreateComposer(const PVUuid& aUuid)
{
PVMFNodeInterface* node = NULL;
if (aUuid == KPVMp4FFComposerNodeUuid)
{
node = PVMp4FFComposerNodeFactory::CreateMp4FFComposer();
}
else if (aUuid == KPVFileOutputNodeUuid)
{
node = PVFileOutputNodeFactory::CreateFileOutput();
}
return node;
}
static bool Delete(const PVUuid& aUuid, PVMFNodeInterface* aNode)
{
if (!aNode)
return false;
#ifdef USE_OMX_ENC_NODE
else if (aUuid == KPVMFOMXVideoEncNodeUuid)
{
return PVMFOMXEncNodeFactory::DeletePVMFOMXEncNode(aNode);
}
else if (aUuid == KPVMFOMXAudioEncNodeUuid)
{
return PVMFOMXEncNodeFactory::DeletePVMFOMXEncNode(aNode);
}
#else
if (aUuid == PVMFVideoEncNodeUuid)
{
return PVMFVideoEncNodeFactory::DeleteVideoEncNode(aNode);
}
else if (aUuid == PVMFAvcEncNodeUuid)
{
return PVMFAvcEncNodeFactory::DeleteAvcEncNode(aNode);
}
else if (aUuid == PvmfAmrEncNodeUuid)
{
return PvmfAmrEncNodeFactory::Delete(aNode);
}
#endif
else if (aUuid == KPVMp4FFComposerNodeUuid)
{
return PVMp4FFComposerNodeFactory::DeleteMp4FFComposer(aNode);
}
else if (aUuid == KPVFileOutputNodeUuid)
{
return PVFileOutputNodeFactory::DeleteFileOutput(aNode);
}
return false;
}
static bool QueryRegistry(const PvmfMimeString& aMimeType, PVUuid& aUuid)
{
if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(K3gpComposerMimeType)))
{
aUuid = KPVMp4FFComposerNodeUuid;
}
else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KMp4EncMimeType)) ||
CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KH263EncMimeType)))
{
#ifdef USE_OMX_ENC_NODE
// replace mp4/h263 encoder node with omx encoder node
aUuid = KPVMFOMXVideoEncNodeUuid;
#else
aUuid = PVMFVideoEncNodeUuid;
#endif
}
else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KH264EncMimeType)))
{
#ifdef USE_OMX_ENC_NODE
// replace avc encoder node with omx encoder node
aUuid = KPVMFOMXVideoEncNodeUuid;
#else
aUuid = PVMFAvcEncNodeUuid;
#endif
}
else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAmrNbEncMimeType)))
{
#ifdef USE_OMX_ENC_NODE
// replace amr encoder node with omx encoder node
aUuid = KPVMFOMXAudioEncNodeUuid;
#else
aUuid = PvmfAmrEncNodeUuid;
#endif
}
else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAMRNbComposerMimeType)) ||
CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADIFComposerMimeType)) ||
CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADTSComposerMimeType)))
{
aUuid = KPVFileOutputNodeUuid;
}
else
{
return false;
}
return true;
}
static bool QueryNodeConfigUuid(const PVUuid& aNodeUuid, PVUuid& aConfigUuid)
{
bool status = false;
if (aNodeUuid == KPVMp4FFComposerNodeUuid)
{
aConfigUuid = KPVMp4FFCNClipConfigUuid;
status = true;
}
else if (aNodeUuid == KPVFileOutputNodeUuid)
{
aConfigUuid = PvmfFileOutputNodeConfigUuid;
status = true;
}
#ifdef USE_OMX_ENC_NODE
else if (aNodeUuid == KPVMFOMXVideoEncNodeUuid)
{
aConfigUuid = PVMp4H263EncExtensionUUID;
status = true;
}
else if (aNodeUuid == KPVMFOMXAudioEncNodeUuid)
{
aConfigUuid = PVAMREncExtensionUUID;
status = true;
}
#else
else if ((aNodeUuid == PVMFVideoEncNodeUuid) ||
(aNodeUuid == PVMFAvcEncNodeUuid))
{
aConfigUuid = PVMp4H263EncExtensionUUID;
status = true;
}
else if (aNodeUuid == PvmfAmrEncNodeUuid)
{
aConfigUuid = PVAMREncExtensionUUID;
status = true;
}
#endif
////////////////////////////////////////////////////////////////////////////
// When implementing support for a new file format composer or encoder node,
// add code to return config uuid of the new node here if necessary
////////////////////////////////////////////////////////////////////////////
return status;
}
static bool CompareMimeTypes(const PvmfMimeString& a, const PvmfMimeString& b)
{
return (oscl_strncmp(a.get_cstr(), b.get_cstr(), oscl_strlen(a.get_cstr())) == 0);
}
};
#endif // PVAE_NODE_FACTORY_UTILITY_H_INCLUDED