Creazione di un codificatore tramite CoCreateInstance
Per convertire i file multimediali in formato ASF, è possibile usare codificatori Windows Media. Per usare questi codificatori, è necessario registrarli nel sistema. I codificatori vengono implementati come trasformazioni di Media Foundation e devono esporre l'interfaccia IMFTransform. Questo argomento descrive come un'applicazione può ottenere un puntatore all'interfaccia IMFTransform del codificatore MFT richiesto e crearne un'istanza per l'uso.
Per informazioni sulla registrazione del codificatore, vedere Creazione di un'istanza di un codificatore MFT.
Uso dell'interfaccia IMFTransform di un codificatore
Al termine della registrazione dei codificatori Windows Media con il sistema, un'applicazione può enumerare i codificatori chiamando MFTEnum. Per cercare il codificatore corretto, è necessario specificare quanto segue:
GUID che rappresenta la categoria, ovvero MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER.
Formato da trovare. Questa impostazione viene impostata nella struttura MFT_REGISTER_TYPE_INFO che specifica il tipo principale e il sottotipo del tipo di supporto in cui verrà generato il codificatore. Questa struttura viene passata nel parametro pOutputType . Per informazioni sui tipi supportati, vedere GUID dei tipi multimediali.
Nota
Le informazioni sul tipo di input nel parametro pInputType non sono obbligatorie. Ciò è dovuto al fatto che il tipo di input è noto all'applicazione e il codificatore prevede che il flusso di input sia in un formato non compresso.
MFTEnum restituisce una matrice di puntatori IMFTransform per i MFC del codificatore che corrispondono ai criteri di ricerca. È possibile creare un'istanza di un codificatore chiamando la funzione COM CoCreateInstance e passando il CLSID del codificatore che si vuole usare. Questa funzione restituisce un puntatore all'interfaccia IMFTransform che rappresenta il codificatore. Per altre informazioni su questa chiamata di funzione, vedere la documentazione di Windows SDK per il modello COM (Component Object Model).
Esempio di creazione del codificatore
L'esempio di codice seguente illustra come creare un codificatore audio o video.
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;
}
Argomenti correlati