Création d’un encodeur à l’aide de CoCreateInstance
Pour convertir des fichiers multimédias au format ASF, vous pouvez utiliser des encodeurs Windows Media. Pour utiliser ces encodeurs, ils doivent être inscrits auprès du système. Les encodeurs sont implémentés en tant que transformations Media Foundation (MFT) et doivent exposer l’interface IMFTransform. Cette rubrique décrit comment une application peut obtenir un pointeur vers l’interface IMFTransform de l’encodeur MFT requise et l’instancier pour l’utiliser.
Pour plus d’informations sur l’inscription de l’encodeur, consultez Instanciation d’un encodeur MFT.
Utilisation de l’interface IMFTransform d’un encodeur
Une fois l’inscription réussie des encodeurs Windows Media auprès du système, une application peut énumérer les encodeurs en appelant MFTEnum. Pour rechercher l’encodeur approprié, vous devez spécifier les éléments suivants :
GUID qui représente la catégorie, qui est MFT_CATEGORY_AUDIO_ENCODER ou MFT_CATEGORY_VIDEO_ENCODER.
Format à mettre en correspondance. Cette valeur est définie dans la structure MFT_REGISTER_TYPE_INFO qui spécifie le type principal et le sous-type du type de média dans lequel l’encodeur générera des exemples. Cette structure est passée dans le paramètre pOutputType . Pour plus d’informations sur les types pris en charge, consultez GUID de type de média.
Notes
Les informations sur le type d’entrée dans le paramètre pInputType ne sont pas requises. Cela est dû au fait que le type d’entrée est connu de l’application et que l’encodeur s’attend à ce que le flux d’entrée soit dans un format non compressé.
MFTEnum retourne un tableau de pointeurs IMFTransform pour les MFT de l’encodeur qui correspondent aux critères de recherche. Vous pouvez instancier un encodeur en appelant la fonction COM CoCreateInstance et en transmettant le CLSID de l’encodeur que vous souhaitez utiliser. Cette fonction retourne un pointeur vers l’interface IMFTransform qui représente l’encodeur. Pour plus d’informations sur cet appel de fonction, consultez la documentation du Kit de développement logiciel (SDK) Windows pour le modèle COM (Component Object Model).
Exemple de création d’encodeur
L’exemple de code suivant montre comment créer un encodeur audio ou vidéo.
HRESULT FindEncoder(
const GUID& subtype,
BOOL bAudio,
IMFTransform **ppEncoder
)
{
HRESULT hr = S_OK;
UINT32 count = 0;
CLSID *ppCLSIDs = NULL;
MFT_REGISTER_TYPE_INFO info = { 0 };
info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
info.guidSubtype = subtype;
hr = MFTEnum(
bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
0, // Reserved
NULL, // Input type
&info, // Output type
NULL, // Reserved
&ppCLSIDs,
&count
);
if (SUCCEEDED(hr) && count == 0)
{
hr = MF_E_TOPO_CODEC_NOT_FOUND;
}
// Create the first encoder in the list.
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(ppCLSIDs[0], NULL,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
}
CoTaskMemFree(ppCLSIDs);
return hr;
}
Rubriques connexes