Share via


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 .

Configurazione della codifica audio

Ricerca dei tipi di output del codificatore audio

Uso della codifica Two-Pass

Uso della codifica VBR