Condividi tramite


Ottimizzazione della televisione analogica

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

L'ottimizzazione è controllata dal filtro Tuner TV, tramite l'interfaccia IAMTVTuner . L'interfaccia IAMTVTuner eredita IAMTuner. Per ottenere un puntatore all'interfaccia, chiamare il metodo ICaptureGraphBuilder2::FindInterface come indicato di seguito:

IAMTVTuner *pTuner = NULL;
hr = pBuild->FindInterface(
    &LOOK_UPSTREAM_ONLY,  // Look upstream from pCap.
    NULL,                 // No particular media type.
    pCap,                 // Pointer to the capture filter.
    IID_IAMTVTuner, (void**)&pTuner);
if (SUCCEEDED(hr))
{
    // Use pTuner ...
    pTuner->Release();
}

Il primo parametro indica di cercare upstream dal filtro di acquisizione.

Tabelle di frequenza

Internamente, il filtro Tuner TV mantiene un elenco di tabelle di frequenza. Ogni tabella di frequenza corrisponde alle frequenze di trasmissione o cavo per un determinato paese/area geografica. Esiste anche una tabella di frequenza "Unicable" generica, usata quando un paese/area geografica non ha un set standard di assegnazioni di frequenza.

Ogni tabella di frequenza contiene un elenco di frequenze di ottimizzazione. Per alcuni paesi/aree geografiche, gli indici nella tabella corrispondono direttamente ai numeri di canale, ovvero la frequenza per channel n è la n voce n nella tabella. Per alcuni paesi/aree geografiche, tuttavia, non esiste alcuna corrispondenza diretta tra numeri di canale e frequenze. In tal caso, l'applicazione deve mantenere un elenco che esegue il mapping dei numeri di canale (in genere scelti dall'utente) alle voci della tabella di frequenza. Ad esempio, ciò che l'utente vede come "canale 5" potrebbe essere il numero di voce 12 nella tabella di frequenza.

Per informazioni dettagliate, vedere Ottimizzazione tv analogica internazionale.

Operazioni di ottimizzazione di base

Se il tuner supporta più modalità di ricezione, ad esempio televisione e radio FM, chiamare IAMTuner::p ut_Mode per selezionare la modalità. Il metodo IAMTuner::GetAvailableModes restituisce tutte le modalità supportate dal tuner. Ad esempio, il codice seguente verifica se il tuner supporta la radio FM e, in caso affermativo, passa a tale modalità.

// Check whether the mode is supported.
long lModes = 0;
hr = m_pTuner->GetAvailableModes(&lModes);
if (SUCCEEDED(hr) && (lModes & AMTUNER_MODE_FM_RADIO))
{
    // Set the mode.
    hr = pTuner->put_Mode(AMTUNER_MODE_FM_RADIO);
}

Per impostare il paese/area geografica, chiamare il metodo IAMTuner::p ut_CountryCode . Il tuner usa questo valore per selezionare la tabella di frequenza appropriata. Per altre informazioni, vedere Assegnazioni paese/area geografica.

Per impostare il canale, chiamare il metodo IAMTuner::p ut_Channel . L'argomento di questo metodo non è effettivamente un numero di canale, ma piuttosto un indice nella tabella di frequenza corrente. Come descritto in precedenza, il numero di indice può o non corrispondere a un numero di canale. Il metodo IAMTuner::ChannelMinMax restituisce i valori di indice minimo e massimo per la tabella di frequenza corrente.

Override delle voci frequenza

È possibile che alcune voci nelle tabelle di frequenza non siano corrette o diventano obsolete. Pertanto, viene fornito un meccanismo per eseguire l'override di singole voci usando le chiavi del Registro di sistema.

Le specifiche sono illustrate nell'argomento Ottimizzazione tv analogica internazionale. Ogni chiave del Registro di sistema definisce uno spazio di ottimizzazione che contiene una o più sottochiavi. Ogni sottochiave esegue l'override di una voce di frequenza. Per impostare lo spazio di ottimizzazione corrente, usare il metodo IAMTuner::p ut_TuningSpace . L'attivazione dello spazio di ottimizzazione esegue l'override delle voci di frequenza nella tabella di frequenza corrente. Pertanto, è necessario che l'applicazione mantenga una corrispondenza tra spazi di ottimizzazione e paesi/aree geografiche. L'approccio migliore consiste semplicemente nell'usare l'identificatore paese/area geografica come nome dello spazio di ottimizzazione.

Ottimizzazione delle voci frequenza

Le frequenze di trasmissione possono essere modificate su o giù diverse kHz dalla stazione di trasmissione per ridurre potenziali interferenze con i canali adiacenti. Dato la frequenza nominale, la scheda di tuner può analizzare la frequenza esatta. Il filtro tuner TV ha un meccanismo per salvare le frequenze regolate nel Registro di sistema.

Per ogni voce nella tabella di frequenza, chiamare il metodo put_Channel per ottimizzare tale frequenza. Il tuner eseguirà l'analisi della frequenza più precisa. È possibile verificare se il tuner ha ottenuto un blocco orizzontale chiamando IAMTuner::SignalPresent. Il filtro Tuner tv archivia anche il risultato internamente.

Dopo aver eseguito l'analisi di tutte le frequenze, chiamare il metodo IAMTVTuner::StoreAutoTune per scrivere i valori aggiornati nel Registro di sistema. I valori aggiornati vengono archiviati nella voce del Registro di sistema per lo spazio di ottimizzazione corrente.

Televisione analogica