Enumerazione dei tipi audio per modalità di codifica specifiche (Microsoft Media Foundation)
I tipi di supporti di input e output accettati dal codificatore audio sono molto strutturati. È necessario ottenere tipi di output supportati chiamando il metodo IMediaObject::GetOutputType o FMTransform::GetOutputType. Dopo aver visualizzato un tipo di output, non è necessario modificarlo.
Se si vuole usare una modalità di codifica diversa da un CBR pass, è necessario impostare la modalità e quindi enumerare i tipi di output per tale modalità; il codificatore modifica i tipi di output supportati a seconda del set di modalità. Le proprietà che controllano la modalità di codifica sono MFPKEY_VBRENABLED e MFPKEY_PASSESUSED. Quando la modalità è impostata nel codificatore, è necessario enumerare e selezionare un tipo di output, usandolo senza modifica, proprio come con CBR.
Identificazione dei tipi VBR basati sulla qualità
La procedura per identificare i tipi VBR basati sulla qualità dipende dal fatto che il codificatore funzioni come oggetto DirectX Media Object (DMO) o funge da trasformazione media foundation (MFT). Per informazioni su quando un codificatore funge da DMO o MFT, vedere le singole pagine di riferimento codec in Codec Objects.
Quando un codificatore audio funge da DMO e si configura il codificatore per l'uso di una VBR, enumera tutti i tipi di output supportati. Tuttavia, in genere si vuole selezionare un tipo VBR one-pass in base al parametro di qualità. Il codificatore inserisce il valore di qualità per i tipi di output VBR uno-pass nel membro nAvgBytesPerSec della struttura WAVEFORMATEX a cui punta DMO_MEDIA_TYPE.pbFormat.
Questo valore viene archiviato nel formato seguente: 0x7FFFFFXX, dove XX è il valore di qualità (da 0 a 100). Ad esempio, il valore nAvgBytesPerSec di 0x7FFFFF62 specifica il livello di qualità 98 (0x62 = 98).
Nell'esempio seguente viene illustrato come controllare il livello di qualità di un formato quando il codificatore funge da DMO.
void ShowQuality(WAVEFORMATEX* pWave)
{
// Store the average bytes per second in a local variable
// with a more manageable name.
DWORD dwBps = pWave->nAvgBytesPerSec;
// Verify that the value is a VBR quality level by using
// a bitmask to check for the bit pattern 0x7FFFFFXX.
if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
else // Not a valid VBR quality value.
printf("Not a valid one-pass VBR audio format.\n");
}
Quando il codificatore funge da MFT ed enumera un tipo di output in una chiamata a GetAvailableOutputType, è possibile eseguire una query su MFT per la proprietà MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY . Il valore restituito indica la qualità VBR del tipo di supporto di output restituito più di recente. È quindi possibile usare tale valore per impostare la proprietà MFPKEY_DESIRED_VBRQUALITY del codificatore.
Impostazione dei vincoli di picco
Per VBR (VBR basato su qualità) e VBR non vincolato, non sono necessarie impostazioni aggiuntive dopo il recupero del tipo di output. Per usare VBR vincolato di picco, recuperare un tipo di output con VBR abilitato e due passaggi impostati. Questo tipo, senza modifica, descrive le impostazioni VBR non vincolate. Per impostare i vincoli di picco, impostare le proprietà MFPKEY_RMAX e MFPKEY_BMAX .
Argomenti correlati