Riproduzione video HDR

I video HDR (High Dynamic Range) rappresentano la nuova frontiera dell'alta qualità decodifica video, offrendo qualità di riproduzione delle scene senza pari. Non quindi aumentando significativamente la gamma dinamica della componente di luminanza (dagli attuali 100 cd/m2 a 1000 s di cd/m2) e utilizzando un modello spazio colore (BT 2020). Questo è un elemento centrale dell'evoluzione del formato 4K UHD nello spazio televisivo.

Android 10 supporta i seguenti video HDR.

  • HDR10
  • VP9
  • HDR10+

A partire da Android 9 e versioni successive, MediaCodec segnala i metadati HDR indipendentemente dalla modalità con tunnel. Puoi ottenere dati decodificati insieme a metadati statici/dinamici in modalità non in tunnel. Per HDR10 e VP9Profile2 che utilizza metadati statici, riportati nel formato di output con chiave KEY_HDR_STATIC_INFO. Per l'HDR10+ che utilizza metadati dinamici, questo valore viene riportato con KEY_HDR10_PLUS_INFO sul formato di output e può cambiare per ciascun frame di output. Per ulteriori informazioni, consulta la sezione Tunnel multimediale.

A partire da Android 7.0, il supporto iniziale per HDR include Creazione di costanti adeguate per la scoperta e la configurazione di video HDR pipeline di dati. Ciò significa definire i tipi di codec e le modalità di visualizzazione e specificare la modalità con cui i dati HDR devono essere trasmessi a MediaCodec e forniti ai decoder HDR.

Lo scopo di questo documento è aiutare gli sviluppatori di applicazioni a supportare lo streaming HDR la riproduzione del video e aiutano OEM e SOC a abilitare le funzionalità HDR.

Tecnologie HDR supportate

A partire da Android 7.0 e versioni successive, sono supportate le seguenti tecnologie HDR.

Tecnologia Dolby Vision HDR10 VP9-HLG VP9-PQ
Codec AVC/HEVC HEVC VP9 VP9
Funzione di trasferimento ST-2084 ST-2084 HLG ST-2084
Tipo di metadati HDR Dinamico Statico Nessuno Statico

In Android 7.0, viene definita solo la riproduzione HDR tramite la modalità con tunnel. ma i dispositivi potrebbero aggiungere il supporto per la riproduzione di HDR su SurfaceView con immagini opache buffer video. In altre parole:

  • Non esiste un'API Android standard per verificare se la riproduzione HDR è supportata utilizzando decoder non tunnelizzati.
  • I decodificatori video con tunnel che pubblicizzano la funzionalità di riproduzione HDR devono supportano la riproduzione HDR quando il dispositivo è connesso a display compatibili con HDR.
  • La composizione GL dei contenuti HDR non è supportata da AOSP per Android 7.0.

Scoperta

La riproduzione HDR richiede un decodificatore compatibile con HDR e la connessione a un Display con funzionalità HDR. Facoltativamente, alcune tecnologie richiedono una specifica estrattore.

Display

Le applicazioni utilizzeranno il nuovo Display.getHdrCapabilities API per eseguire query sulle tecnologie HDR supportate dal display specificato. Questo è fondamentalmente le informazioni contenute nel blocco dati EDID Static Metadata, come definito in CTA-861.3:

  • public Display.HdrCapabilities getHdrCapabilities()
    Restituisce le funzionalità HDR del display.
  • Display.HdrCapabilities
    Incapsula le funzionalità HDR di un determinato display. Ad esempio, quale HDR i tipi supportati e i dettagli sui dati di luminanza desiderati.

Costanti:

  • int HDR_TYPE_DOLBY_VISION
    Supporto Dolby Vision.
  • int HDR_TYPE_HDR10
    Supporto HDR10 / PQ.
  • int HDR_TYPE_HDR10_PLUS
    Supporto HDR10+.
  • int HDR_TYPE_HLG
    Supporto di Log-Gamma ibrido.
  • float INVALID_LUMINANCE
    Valore di luminanza non valido.

Metodi pubblici:

  • float getDesiredMaxAverageLuminance()
    Restituisce i dati di luminanza media massima dei contenuti desiderati in cd/cd/m2 per questa visualizzazione.
  • float getDesiredMaxLuminance()
    Restituisce i dati di luminanza massima dei contenuti desiderati in cd/cd/m2 per questo display.
  • float getDesiredMinLuminance()
    Restituisce i dati di luminanza minima dei contenuti desiderati in cd/cd/m2 per questo display.
  • int[] getSupportedHdrTypes()
    Consente di acquisire i tipi HDR supportati di questo display (vedi costanti). Resi vuoti se l'HDR non è supportato dal display.

Decodificatore

Le applicazioni utilizzeranno i dati e le CodecCapabilities.profileLevels per verificare il supporto del nuovi profili compatibili con HDR:

Dolby Vision

Costante MIME MediaFormat:

String MIMETYPE_VIDEO_DOLBY_VISION

Costanti del profilo MediaCodecInfo.CodecProfileLevel:

int DolbyVisionProfileDvavPen
int DolbyVisionProfileDvavPer
int DolbyVisionProfileDvheDen
int DolbyVisionProfileDvheDer
int DolbyVisionProfileDvheDtb
int DolbyVisionProfileDvheDth
int DolbyVisionProfileDvheDtr
int DolbyVisionProfileDvheStn

I livelli video e i metadati Dolby Vision devono essere concatenati in un'unica buffer per frame dalle applicazioni video. Questa operazione viene eseguita automaticamente MediaExtractor compatibile con Dolby-Vision.

HEVC HDR 10

Costanti del profilo MediaCodecInfo.CodecProfileLevel:

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG e PQ

Profilo MediaCodecInfo.CodecProfileLevel costanti:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

Se una piattaforma supporta un decoder compatibile con HDR, deve supportare anche un Estrattore compatibile con HDR.

Solo i decoder in tunnel riproducono i contenuti HDR. Riproduzione da decoder non sottoposti a tunneling può comportare la perdita delle informazioni HDR e i contenuti divisi in un volume colore SDR.

Estrattore

I seguenti container sono supportati per le varie tecnologie HDR su Android 7.0:

Tecnologia Dolby Vision HDR10 VP9-HLG VP9-PQ
Container MP4 MP4 WebM WebM

Il rilevamento se una traccia (di un file) richiede il supporto HDR non lo è supportate dalla piattaforma. Le applicazioni possono analizzare dati specifici del codec per stabilire se una traccia richiede un profilo HDR specifico.

Riepilogo

I requisiti dei componenti per ciascuna tecnologia HDR sono indicati nella seguente tabella:

Tecnologia Dolby Vision HDR10 VP9-HLG VP9-PQ
Tipo di HDR supportato (display) HDR_TYPE_DOLBY_VISION HDR10 HDR_TYPE_HLG HDR10
Container (estrattore) MP4 MP4 WebM WebM
Decodificatore MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
Profilo (decoder) Uno dei profili Dolby HEVCProfiloMain10HDR10 VP9Profile2HDR o VP9Profilo3HDR VP9Profile2HDR o VP9Profilo3HDR

Note:

  • I bitstream Dolby-Vision sono pacchettizzati in un container MP4 in un modo definito di Dolby. Le applicazioni possono implementare i propri estrattori compatibili con Dolby purché racchiudano le unità di accesso dei livelli corrispondenti in un singola unità di accesso per il decoder come definito da Dolby.
  • Una piattaforma potrebbe supportare un estrattore compatibile con HDR, ma nessun valore corrispondente Decoder compatibile con HDR.

Riproduzione

Dopo che un'applicazione ha verificato il supporto della riproduzione HDR, può riprodurre i contenuti la riproduzione dei contenuti HDR è quasi uguale alla riproduzione dei contenuti non HDR, tenendo presenti le seguenti avvertenze:

  • Per Dolby-Vision, se un file/una traccia multimediale specifica richiede o meno un decoder compatibile con HDR non è immediatamente disponibile. L'applicazione deve avere queste informazioni in anticipo o essere in grado di ottenerle tramite analizza la sezione dei dati specifici del codec di MediaFormat.
  • CodecCapabilities.isFormatSupported non valuta se la funzionalità di decoder con tunnel è necessaria per supportare questo profilo.

Attiva il supporto della piattaforma HDR

I fornitori di SoC e gli OEM devono svolgere attività aggiuntive per abilitare la piattaforma HDR per un dispositivo specifico.

Modifiche alla piattaforma in Android 7.0 per l'HDR

Di seguito sono riportate alcune modifiche chiave relative alla piattaforma (livello app/nativo) di cui OEM e SOC devono essere a conoscenza.

Display

Composizione hardware

Le piattaforme compatibili con HDR devono supportare la combinazione di contenuti HDR e non HDR contenuti. Le caratteristiche e le operazioni di fusione esatte non sono definite di Android a partire dalla versione 7.0, ma in genere la procedura segue questa procedura:

  1. Stabilire uno spazio colore/volume lineare che contenga tutti i livelli automaticamente, in base agli strati colore, mastering e potenziali metadati.
    Nel caso della composizione diretta su un display, potrebbe trattarsi dello spazio lineare che corrisponde al volume di colore del display.
  2. Converti tutti i livelli nello spazio colore comune.
  3. Esegui la combinazione.
  4. Se la visualizzazione avviene tramite HDMI:
    1. Determinare il colore, la masterizzazione e i potenziali metadati dinamici per scena mista.
    2. Converti la scena mista risultante nel colore derivato spazio/volume.
  5. Se lo visualizzi direttamente sul display, converti la combinazione risultante la scena ai segnali di visualizzazione richiesti per produrre quella scena.

Visibilità sulla Rete Display

Il rilevamento dei display HDR è supportato solo tramite HWC2. Gli utenti che implementano i dispositivi devono attivare in modo selettivo l'adattatore HWC2 rilasciato con Android 7.0 per questo la tua funzionalità. Pertanto, le piattaforme devono aggiungere il supporto per HWC2 o estendere framework AOSP per consentire di fornire queste informazioni. HWC2 espone una nuova API per propagare i dati statici HDR al framework e all'applicazione.

HDMI

  • Un display HDMI connesso pubblicizza la sua capacità HDR tramite HDMI EDID come definito CTA-861.3 sezione 4.2.
  • Deve essere utilizzata la seguente mappatura EOTF:
    • ET_0 Gamma tradizionale - Intervallo di luminanza SDR: non mappato su nessun HDR tipo
    • ET_1 Gamma tradizionale - Gamma di luminanza HDR: non mappata su nessun HDR tipo
    • ET_2 SMPTE ST 2084 - mappata su HDR di tipo HDR10
  • La segnalazione del supporto Dolby Vision o HLG tramite HDMI avviene come definito dagli organismi competenti.
  • Tieni presente che l'API HWC2 utilizza valori di luminanza desideri in virgola mobile, quindi i valori a 8 bit I valori EDID devono essere tradotti in un modo appropriato.

Decoder

Le piattaforme devono aggiungere decoder compatibili con HDR e pubblicizzare la propria tecnologia HDR assistenza in tempo reale. In genere, i decoder compatibili con HDR devono:

  • Supporto della decodifica con tunnel (FEATURE_TunneledPlayback).
  • Supporta metadati statici HDR (OMX.google.android.index.describeHDRColorInfo) e le relative di propagazione alla composizione di display/hardware. Per HLG, i metadati appropriati devono essere inviati alla visualizzazione.
  • Descrizione colore assistenza (OMX.google.android.index.describeColorAspects) e le relative di propagazione alla composizione di display/hardware.
  • Supporta i metadati HDR incorporati in base a quanto definito dallo standard pertinente.

Supporto del decoder Dolby Vision

Per supportare il formato Dolby Vision, le piattaforme devono aggiungere un supporto Dolby-Vision Decoder HDR OMX. Date le specifiche di Dolby Vision, di solito si tratta di un decoder intorno a uno o più decoder AVC e/o HEVC nonché un compositore. Questi decoder devono:

  • Supporta il tipo MIME "video/dolby-vision".
  • Pubblicizza profili/livelli Dolby Vision supportati.
  • Accetta le unità di accesso che contengono le unità di accesso secondarie di tutti i livelli come definita da Dolby.
  • Accetta dati specifici del codec definiti da Dolby. Ad esempio, i dati contenenti profilo/livello Dolby Vision ed eventualmente i dati specifici del codec per decoder interni.
  • Supporta il passaggio adattivo tra profili/livelli Dolby Vision come richiesta da Dolby.

Durante la configurazione del decoder, il profilo Dolby effettivo non viene comunicato al codec. Ciò viene fatto solo tramite dati specifici del codec dopo che il decoder è stata avviata. Una piattaforma può scegliere di supportare più formati Dolby Vision decodificatori: uno per i profili AVC e un altro per i profili HEVC per poter inizializza i codec sottostanti durante la configurazione. Se un singolo dispositivo Dolby Vision decoder supporta entrambi i tipi di profili, deve supportare anche il cambio tra due parti in modo dinamico e adattivo.

Se una piattaforma fornisce un decoder compatibile con Dolby-Vision oltre al un decoder HDR, deve:

  • Fornisci un estrattore Dolby Vision, anche se non supporta Riproduzione HDR.
  • Fornisci un decoder che supporti il profilo visivo come definito da Dolby.

Supporto decoder HDR10

Per supportare la tecnologia HDR10, le piattaforme devono aggiungere un decodificatore OMX compatibile con HDR10. Questo è di solito un decoder HEVC con tunnel che supporta anche l'analisi e la gestione Metadati relativi a HDMI. Un tale decoder (oltre al decoder HDR generale) assistenza) devono:

  • Supporta il tipo MIME "video/hevc".
  • Pubblicizza HEVCMain10HDR10 supportato. Supporto del profilo HEVCMain10HRD10 richiede anche il supporto del profilo HEVCMain10, che richiede il supporto il profilo HEVCMain agli stessi livelli.
  • Supporto dell'analisi dei blocchi SEI dei metadati di masterizzazione, nonché di altri blocchi HDR e le informazioni correlate contenute in SPS.

Supporto decoder VP9

Per supportare l'HDR VP9, le piattaforme devono aggiungere un OMX HDR compatibile con VP9 Profile2 decodificatore. Normalmente si tratta di un decoder VP9 in tunnel che supporta anche la gestione Metadati relativi a HDMI. Questi decoder (oltre al decoder HDR generale) assistenza) devono:

  • Supporta il tipo MIME "video/x-vnd.on2.vp9".
  • Pubblicizza un VP9Profile2HDR supportato. Supporto del profilo VP9Profile2HDR richiede il supporto del profilo VP9Profile2 allo stesso livello.

Estrattori

Supporto per estrattori Dolby Vision

Le piattaforme che supportano i decoder Dolby Vision devono aggiungere l'estrattore Dolby (denominato Dolby Extractor) per i contenuti Dolby Video.

  • Un normale estrattore MP4 può estrarre solo il livello base da un file, ma non i livelli di miglioramento o di metadati. Uno speciale estrattore Dolby necessari per estrarre i dati dal file.
  • L'estrattore Dolby deve esporre da 1 a 2 tracce per ogni traccia video Dolby (gruppo):
    • Una traccia Dolby Vision HDR con il tipo di "video/dolby-vision" per combinato in streaming Dolby a 2/3 strati. Il formato dell'unità di accesso della traccia HDR, che definisce la modalità di pacchettizzazione delle unità di accesso da base/miglioramento/metadati in un singolo buffer da decodificare in un singolo frame HDR, è necessario definita da Dolby.
    • Se una traccia video in Dolby Vision contiene un'immagine separata (compatibile con le versioni precedenti) strato base (BL), anche l'estrattore deve esporlo come "video/avc" separato o "video/hevc" traccia. L'estrattore deve fornire un accesso AVC/HEVC regolare unità per questa traccia.
    • La traccia BL deve avere lo stesso ID univoco della traccia ("track-ID") della traccia Traccia HDR in modo che l'app capisca che si tratta di due codifiche della stessa video.
    • L'applicazione può decidere quale percorso scegliere in base alla piattaforma funzionalità.
  • Il profilo/livello Dolby Vision deve essere esposto nel formato traccia: la traccia HDR.
  • Se una piattaforma fornisce un decoder che supporta Dolby-Vision, deve fornire anche un estrattore Dolby-Vision, anche se non supporta la riproduzione HDR.

Supporto degli estrattori HDR HDR10 e VP9

Non sono previsti requisiti aggiuntivi per gli estrattori per il supporto di HDR10 o VP9 HLG. Le piattaforme devono estendere l'estrattore MP4 per supportare VP9 PQ in MP4. HDR i metadati statici devono essere propagati nel bitstream VP9 PQ, in modo che i metadati vengono passati al decoder VP9 PQ e al display tramite MediaExtractor => Pipeline MediaCodec.

Estensioni Stagefright per il supporto Dolby Vision

Le piattaforme devono aggiungere il supporto per il formato Dolby Vision a Stagefright:

  • Supporto per la query sulla definizione della porta per la porta compressa.
  • Supporta l'enumerazione del profilo/livello per il decoder DV.
  • Supporto dell'esposizione del profilo/livello DV per le tracce HDR DV.

Dettagli sull'implementazione specifici per tecnologia

Pipeline decoder HDR10

Figura 1. Pipeline HDR10

I bitstream HDR10 sono pacchettizzati in container MP4. Le applicazioni utilizzano una normale Estrattore MP4 per estrarre i dati del frame e inviarli al decoder.

  • Estrattore MPEG4
    I bitstream HDR10 vengono riconosciuti come un normale stream HEVC da un MPEG4Extractor e la traccia HDR con il tipo "video/HEVC" sarà estratto. Il framework sceglie un decodificatore video HEVC che supporta Main10HDR10 per decodificare quella traccia.
  • Decoder HEVC
    Le informazioni HDR sono in formato SEI o SPS. Il decoder HEVC riceve per prima cosa che contengono le informazioni HDR. Il decoder estrae quindi l'HDR informazioni e avvisa l'applicazione che sta decodificando un video HDR. HDR le informazioni sono raggruppate nel formato di output del decoder, che viene propagata in primo piano.

Azioni del fornitore

  1. Pubblicizza il profilo decoder HDR e il tipo di livello OMX supportato. Esempio:
    OMX_VIDEO_HEVCProfileMain10HDR10 (e Main10)
  2. Implementa il supporto per l'indicizzazione: "OMX.google.android.index.describeHDRColorInfo"
  3. Implementa il supporto per l'indicizzazione: "OMX.google.android.index.describeColorAspects"
  4. Implementare il supporto per l'analisi SEI dei metadati di mastering.

Pipeline di decodifica Dolby Vision

Figura 2. Pipeline Dolby Vision

I Dolby-bitstream sono pacchettizzati in container MP4 come definito Dolby Le applicazioni potevano, in teoria, usare un normale estrattore MP4 per estrarre il livello di base, il livello di miglioramento e il livello dei metadati in modo indipendente; ma non è compatibile con il modello Android MediaExtractor/MediaCodec corrente.

  • DolbyExtractor:
    • I Dolby-bitstream sono riconosciuti da un DolbyExtractor, che espone il vari livelli come 1 o 2 tracce per ciascuna traccia video dolby (gruppo):
      • Una traccia HDR con il tipo di "video/dolby-vision" per i modelli Dolby stream a 2/3 strati. Il formato dell'unità di accesso della traccia HDR, che definisce come pacchettizzare le unità di accesso dagli strati base/miglioramento/metadati in un singolo buffer da decodificare in un singolo frame HDR, deve essere definito di Dolby.
      • (Facoltativo, solo se il BL è compatibile con le versioni precedenti). Una traccia BL contiene solo il livello di base, che deve essere decodificabile dal normale decoder MediaCodec, come il decoder AVC/HEVC. L'estrattore deve fornire AVC/HEVC normali per questo canale. Questa traccia BL deve avere lo stesso ID univoco della traccia ("track-ID") come traccia Dolby, in modo che l'applicazione capisca che questi due codifiche dello stesso video.
    • L'applicazione può decidere quale percorso scegliere in base alla piattaforma funzionalità.
    • Poiché una traccia HDR ha un tipo HDR specifico, il framework sceglierà un decodificatore video Dolby per decodificare quella traccia. La traccia BL sarà decodificata un normale decodificatore video AVC/HEVC.
  • DolbyDecoder:
    • Il DolbyDecoder riceve le unità di accesso che contengono Unità per tutti i livelli (EL+BL+MD o BL+MD)
    • Informazioni CSD (dati specifici del codec, ad esempio SPS+PPS+VPS) per il i singoli strati possono essere pacchettizzati in un frame CSD da definire Dolby È necessario avere un singolo frame CSD.

Azioni Dolby

  1. Definire la presentazione delle unità di accesso per i vari container Dolby schemi (ad es. BL+EL+MD) per il decoder Dolby astratto (ovvero il buffer previsto dal decoder HDR).
  2. Definire la pacchettizzazione del CSD per il decoder Dolby astratto.

Azioni del fornitore

  1. Implementa l'estrattore Dolby. Questa operazione può essere eseguita anche da Dolby.
  2. Integrare DolbyExtractor nel framework. Il punto di accesso è frameworks/av/media/libstagefright/MediaExtractor.cpp.
  3. Dichiara il profilo e il livello OMX del decodificatore HDR di testo. Esempio: OMX_VIDEO_DOLBYPROFILETYPE e OMX_VIDEO_DOLBYLEVELTYP.
  4. Implementa il supporto per l'indicizzazione: 'OMX.google.android.index.describeColorAspects
  5. Propaga i metadati HDR dinamici all'app e a visualizzarli in ogni frame. In genere queste informazioni devono essere confezionate nel frame decodificato. come definito da Dolby, perché lo standard HDMI non fornisce un modo e lo passiamo al display.

Pipeline decoder VP9

Figura 3. Pipeline VP9-PQ

I bitstream VP9 sono pacchettizzati in container WebM in un modo definito da WebM dell'IA. Le applicazioni devono utilizzare un estrattore WebM per estrarre metadati HDR il bitstream prima di inviare frame al decoder.

  • Estrattore WebM:
  • Decoder VP9:
    • Il decodificatore riceve bitstream Profile2 e li decodifica come normale VP9 i flussi di dati.
    • Il decodificatore riceve tutti i metadati statici HDR dal framework.
    • Il decodificatore riceve metadati statici tramite le unità di accesso bitstream per VP9 Stream PQ.
    • Il decoder VP9 deve essere in grado di propagare i metadati statici/dinamici HDR al display.

Azioni del fornitore

  1. Implementa il supporto per l'indicizzazione: OMX.google.android.index.describeHDRColorInfo
  2. Implementa il supporto per l'indicizzazione: OMX.google.android.index.describeColorAspects
  3. Propagare metadati statici HDR