Pemutaran video HDR

Video rentang dinamis tinggi (HDR) adalah fitur lanjutan dalam kualitas tinggi decoding video, menghadirkan kualitas reproduksi adegan yang tak tertandingi. Ya jadi dengan meningkatkan rentang dinamis komponen luminans secara signifikan (dari 100 cd/m2 saat ini hingga 1000 dtk cd/m2) dan dengan menggunakan ruang warna (BT 2020). Fitur ini kini menjadi elemen utama dari evolusi 4K UHD di ruang TV.

Android 10 mendukung video HDR berikut.

  • HDR10
  • VP9
  • HDR10+

Mulai Android 9 dan yang lebih tinggi, MediaCodec melaporkan metadata HDR terlepas dari mode tunneling. Anda bisa mendapatkan data yang didekode bersama dengan metadata statis/dinamis dalam mode tanpa tunnel. Untuk HDR10 dan VP9Profile2 yang menggunakan metadata statis, keduanya dilaporkan dalam format output dengan KEY_HDR_STATIC_INFO. Untuk HDR10+ yang menggunakan metadata dinamis, hal ini dilaporkan dengan tombol KEY_HDR10_PLUS_INFO pada format output dan dapat berubah untuk setiap frame output. Lihat Tunneling Multimedia untuk informasi lebih lanjut.

Sejak Android 7.0, dukungan HDR awal mencakup pembuatan konstanta yang tepat untuk penemuan dan penyiapan video HDR pipeline. Itu berarti menentukan jenis codec dan mode tampilan serta menentukan cara data HDR harus diteruskan ke MediaCodec dan diberikan ke dekoder HDR.

Tujuan dokumen ini adalah untuk membantu developer aplikasi mendukung streaming HDR pemutaran, serta membantu OEM dan SOC mengaktifkan fitur HDR.

Teknologi HDR yang didukung

Mulai dari Android 7.0 dan yang lebih tinggi, teknologi HDR berikut ini didukung.

Teknologi Dolby Vision HDR10 VP9-HLG VP9-PQ
Codec AVC/HEVC HEVC VP9 VP9
Fungsi Transfer ST-2084 ST-2084 HLG ST-2084
Jenis Metadata HDR Dinamis Statis Tidak ada Statis

Di Android 7.0, hanya pemutaran HDR melalui mode tunnel yang ditentukan, tetapi perangkat dapat menambahkan dukungan untuk pemutaran HDR pada SurfaceViews menggunakan buram buffer video. Dengan kata lain:

  • Tidak ada Android API standar untuk memeriksa apakah pemutaran HDR didukung menggunakan decoder non-tunnel.
  • Decoder video terowongan yang memberitahukan kemampuan pemutaran HDR harus mendukung pemutaran HDR saat terhubung ke layar berkemampuan HDR.
  • Komposisi GL konten HDR tidak didukung oleh Android AOSP 7.0.

Penemuan

Pemutaran HDR membutuhkan dekoder berkemampuan HDR dan koneksi ke Layar berkemampuan HDR. Secara opsional, beberapa teknologi memerlukan ekstraktor.

Tampilan

Aplikasi akan menggunakan Display.getHdrCapabilities baru API untuk mengkueri teknologi HDR yang didukung oleh tampilan tertentu. Ini adalah pada dasarnya informasi dalam Blok Data Metadata Statis EDID seperti yang dalam CTA-861.3:


  • public Display.HdrCapabilities getHdrCapabilities() Menampilkan kemampuan HDR layar.

  • Display.HdrCapabilities Mengenkapsulasi kemampuan HDR layar tertentu. Misalnya, HDR apa jenis yang didukungnya dan detail tentang data luminans yang diinginkan.

Konstanta:


  • int HDR_TYPE_DOLBY_VISION Dukungan Dolby Vision.

  • int HDR_TYPE_HDR10 Dukungan HDR10 / PQ.

  • int HDR_TYPE_HDR10_PLUS Dukungan HDR10+.

  • int HDR_TYPE_HLG Dukungan Hybrid Log-Gamma.

  • float INVALID_LUMINANCE Nilai luminans tidak valid.

Metode publik:


  • float getDesiredMaxAverageLuminance() Menampilkan data luminans rata-rata frame maksimum konten yang diinginkan dalam cd/cd/m2 untuk tampilan ini.

  • float getDesiredMaxLuminance() Menampilkan data luminans maksimum konten yang diinginkan dalam cd/cd/m2 untuk tampilan ini.

  • float getDesiredMinLuminance() Menampilkan data luminans minimum konten yang diinginkan dalam cd/cd/m2 untuk tampilan ini.

  • int[] getSupportedHdrTypes() Mendapatkan jenis HDR yang didukung untuk tampilan ini (lihat konstanta). Hasil kosong jika HDR tidak didukung oleh layar.

Decoder

Aplikasi harus menggunakan versi yang sudah ada CodecCapabilities.profileLevels API untuk memverifikasi dukungan bagi profil baru berkemampuan HDR:

Dolby Vision

Konstanta mime MediaFormat:

String MIMETYPE_VIDEO_DOLBY_VISION

Konstanta profil MediaCodecInfo.CodecProfileLevel:

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

Metadata dan lapisan video Dolby Vision harus disambungkan menjadi satu buffer per frame oleh aplikasi video. Hal ini dilakukan secara otomatis oleh MediaExtractor yang mendukung Dolby-Vision.

HDR HEVC 10

Konstanta profil MediaCodecInfo.CodecProfileLevel:

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG & PQ

Profil MediaCodecInfo.CodecProfileLevel konstanta:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

Jika platform mendukung dekoder berkemampuan HDR, platform tersebut juga harus mendukung Ekstraktor berkemampuan HDR.

Hanya decoder yang disalurkan yang dijamin memutar konten HDR. Putar oleh decoder tanpa terowongan dapat mengakibatkan hilangnya informasi HDR dan konten yang diratakan menjadi volume warna SDR.

Ekstraktor

Penampung berikut didukung untuk berbagai teknologi HDR di Android 7.0:

Teknologi Dolby Vision HDR10 VP9-HLG VP9-PQ
Penampung MP4 MP4 WebM WebM

Penemuan apakah trek (sebuah file) memerlukan dukungan HDR tidak yang didukung oleh platform ini. Aplikasi dapat mengurai data spesifik codec untuk menentukan apakah trek memerlukan profil HDR tertentu.

Ringkasan

Persyaratan komponen untuk setiap teknologi HDR ditunjukkan dalam tabel berikut:

Teknologi Dolby Vision HDR10 VP9-HLG VP9-PQ
Jenis HDR yang didukung (Layar) HDR_TYPE_DOLBY_VISION HDR_TYPE_HDR10 HDR_TYPE_HLG HDR_TYPE_HDR10
Container (Ekstraktor) MP4 MP4 WebM WebM
Decoder MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
Profil (Decoder) Salah satu profil Dolby HEVCProfilMain10HDR10 VP9Profile2HDR atau VP9Profil3HDR VP9Profile2HDR atau VP9Profil3HDR

Catatan:

  • Bitstream Dolby-Vision dikemas dalam kontainer MP4 dengan cara yang ditentukan oleh Dolby. Aplikasi dapat menerapkan ekstraktor berkemampuan Dolby mereka sendiri sebagai selama mereka mengemas unit akses dari lapisan yang sesuai ke dalam sebuah unit akses tunggal untuk decoder seperti yang didefinisikan oleh Dolby.
  • Sebuah platform mungkin mendukung ekstraktor berkemampuan HDR, tetapi tidak ada Decoder berkemampuan HDR.

Pemutaran

Setelah aplikasi memverifikasi dukungan untuk pemutaran HDR, aplikasi dapat memutar konten HDR hampir dengan cara yang sama seperti memutar konten non-HDR, dengan peringatan berikut:

  • Untuk Dolby-Vision, apakah file/trek media tertentu membutuhkan decoder berkemampuan HDR tidak segera tersedia. Permohonan harus memiliki informasi ini terlebih dahulu atau dapat memperoleh informasi ini dengan menguraikan bagian data khusus codec pada MediaFormat.
  • CodecCapabilities.isFormatSupported tidak mempertimbangkan apakah fitur decoder yang disalurkan diperlukan untuk mendukung profil tersebut.

Mengaktifkan dukungan platform HDR

Vendor SoC dan OEM harus melakukan upaya tambahan untuk mengaktifkan platform HDR yang sesuai untuk perangkat.

Perubahan platform di Android 7.0 untuk HDR

Berikut adalah beberapa perubahan penting pada platform (lapisan aplikasi/native) yang perlu diperhatikan oleh OEM dan SOC.

Tampilan

Komposisi hardware

Platform berkemampuan HDR harus mendukung perpaduan konten HDR dengan non-HDR saat ini. Karakteristik dan operasi pencampuran yang tepat tidak ditentukan oleh Android mulai rilis 7.0, tetapi prosesnya umumnya mengikuti langkah-langkah berikut:

  1. Menentukan ruang/volume warna linear yang berisi semua lapisan yang akan digabungkan, berdasarkan lapisan warna, penguasaan, dan potensi dinamis {i>metadata<i}.
    Jika mengomposisikan langsung ke layar, ini bisa menjadi ruang linear yang sesuai dengan volume warna layar.
  2. Mengonversi semua lapisan ke ruang warna bersama.
  3. Lakukan penggabungan.
  4. Jika menampilkan melalui HDMI:
    1. Tentukan warna, mastering, dan potensi metadata dinamis untuk mode campuran.
    2. Mengonversi scene campuran yang dihasilkan ke warna turunan ruang/volume.
  5. Jika menampilkan langsung ke layar, konversikan gabungan yang dihasilkan ke sinyal tampilan yang diperlukan untuk menghasilkan adegan tersebut.

Penemuan display

Penemuan layar HDR hanya didukung melalui HWC2. Pengimplementasi perangkat harus secara selektif mengaktifkan adaptor HWC2 yang dirilis dengan Android 7.0 untuk fitur berfungsi. Oleh karena itu, platform harus menambahkan dukungan untuk HWC2 atau Framework AOSP yang memungkinkan cara untuk memberikan informasi ini. HWC2 mengekspos API untuk menyebarkan Data Statis HDR ke framework dan aplikasi.

HDMI

  • Layar HDMI yang terhubung mengiklankan kemampuan HDR-nya melalui HDMI EDID sebagaimana didefinisikan dalam CTA-861,3 bagian 4.2.
  • Pemetaan EOTF berikut harus digunakan:
    • ET_0 Gamma Tradisional - SDR Luminance Range: tidak dipetakan ke HDR mana pun (jenis
    • ET_1 Gamma Tradisional - Rentang Luminance HDR: tidak dipetakan ke HDR mana pun (jenis
    • ET_2 SMPTE ST 2084 - dipetakan ke jenis HDR HDR10
  • Penandaan dukungan Dolby Vision atau HLG melalui HDMI dilakukan seperti yang oleh badan-badan yang relevan.
  • Perhatikan, HWC2 API menggunakan nilai luminance float yang diinginkan, sehingga Nilai EDID harus diterjemahkan dengan cara yang sesuai.

Decoder

Platform harus menambahkan dekoder berkemampuan HDR dan mengiklankan layanan HDR dukungan teknis IT. Umumnya, decoder berkemampuan HDR harus:

  • Mendukung dekode yang disalurkan (FEATURE_TunneledPlayback).
  • Mendukung metadata statis HDR (OMX.google.android.index.describeHDRColorInfo) dan propagasi ke tampilan/komposisi perangkat keras. Untuk HLG, metadata yang sesuai harus dikirimkan ke layar.
  • Deskripsi warna dukungan (OMX.google.android.index.describeColorAspects) dan propagasi ke tampilan/komposisi perangkat keras.
  • Mendukung metadata tersemat HDR sebagaimana didefinisikan oleh standar yang relevan.

Dukungan decoder Dolby Vision

Untuk mendukung Dolby Vision, platform harus menambahkan perangkat Decoder HDR OMX. Mengingat spesifikasi Dolby Vision, ini biasanya decoder di sekitar satu atau beberapa decoder AVC dan/atau HEVC, serta compositor. Decoder tersebut harus:

  • Mendukung jenis mime "video/dolby-vision".
  • Iklankan profil/level Dolby Vision yang didukung.
  • Terima unit akses yang berisi sub-unit akses dari semua lapisan sebagai didefinisikan oleh Dolby.
  • Terima data khusus codec yang ditentukan oleh Dolby. Misalnya, data yang berisi profil/level Dolby Vision dan mungkin data khusus codec untuk decoder internal.
  • Mendukung peralihan adaptif antara profil/level Dolby Vision sebagai yang diperlukan oleh Dolby.

Saat mengonfigurasi decoder, profil Dolby sebenarnya tidak akan dikomunikasikan pada codec. Ini hanya dilakukan melalui data spesifik codec setelah decoder telah dimulai. Sebuah platform dapat memilih untuk mendukung beberapa Dolby Vision satu untuk profil AVC, dan satu lagi untuk profil HEVC agar dapat melakukan inisialisasi codec dasar selama waktu konfigurasi. Jika satu Dolby Vision Decoder mendukung kedua jenis profil, tetapi juga harus mendukung peralihan di antara mereka secara dinamis secara adaptif.

Jika platform menyediakan dekoder Dolby-Vision dukungan decoder HDR umum, maka harus:

  • Menyediakan ekstraktor yang peka Dolby-Vision, meskipun tidak mendukung Pemutaran HDR.
  • Menyediakan decoder yang mendukung profil visi seperti yang didefinisikan oleh Dolby.

Dukungan decoder HDR10

Untuk mendukung HDR10, platform harus menambahkan dekoder OMX berkemampuan HDR10. Ini biasanya adalah dekoder HEVC terowongan yang juga mendukung penguraian dan penanganan Metadata terkait HDMI. Decoder tersebut (selain decoder HDR umum ) harus:

  • Mendukung jenis mime "video/hevc".
  • Beriklan HEVCMain10HDR10 yang didukung. Dukungan profil HEVCMain10HRD10 juga memerlukan dukungan untuk profil HEVCMain10, yang memerlukan profil HEVCMain di tingkat yang sama.
  • Mendukung penguraian blok SEI metadata yang dikuasai, serta HDR lainnya info terkait yang ada dalam SPS.

Dukungan decoder VP9

Untuk mendukung VP9 HDR, platform harus menambahkan OMX HDR yang mendukung VP9 Profile2 decoder. Ini biasanya adalah decoder VP9 tunneling yang juga mendukung penanganan Metadata terkait HDMI. Decoder tersebut (selain decoder HDR umum ) harus:

  • Mendukung jenis mime "video/x-vnd.on2.vp9".
  • Mengiklankan VP9Profile2HDR yang didukung. Dukungan profil VP9Profile2HDR juga memerlukan dukungan untuk profil VP9Profile2 di tingkat yang sama.

Ekstraktor

Dukungan ekstraktor Dolby Vision

Platform yang mendukung dekoder Dolby Vision harus menambahkan ekstraktor Dolby (disebut Dolby Extractor) untuk konten Dolby Video.

  • Ekstraktor MP4 reguler hanya dapat mengekstrak lapisan dasar dari file, tetapi tidak melalui lapisan {i>metadata<i}. Jadi pengekstrak Dolby khusus yang diperlukan untuk mengekstrak data dari file.
  • Ekstraktor Dolby harus mengekspos 1 hingga 2 trek untuk setiap trek video Dolby (grup):
    • Trek HDR Dolby Vision dengan jenis "video/dolby-vision" untuk kombinasi 2/3-lapisan Dolby stream. Format unit akses trek HDR, yang menentukan cara memaketkan unit akses dari basis/peningkatan/metadata menjadi satu penyangga untuk didekode ke dalam satu {i>frame<i} HDR, adalah didefinisikan oleh Dolby.
    • Jika trek video Dolby Vision berisi trek terpisah (kompatibel dengan versi lama) lapisan dasar (BL), ekstraktor juga harus mengeksposnya sebagai "video/avc" terpisah atau "video/hevc" jalur. Ekstraktor harus memberikan akses AVC/HEVC reguler untuk trek ini.
    • Trek BL harus memiliki track-unique-ID ("track-ID") yang sama dengan trek HDR sehingga aplikasi memahami bahwa ini adalah dua encoding yang sama video Anda.
    • Aplikasi dapat menentukan jalur yang akan dipilih berdasarkan kemampuan IT mereka.
  • Profil/level Dolby Vision harus diekspos dalam format trek trek HDR.
  • Jika platform menyediakan dekoder Dolby-Vision, platform itu juga harus ekstraktor yang mendukung Dolby-Vision, meskipun tidak mendukung pemutaran HDR.

Dukungan ekstraktor HDR10 dan VP9

Tidak ada persyaratan ekstraktor tambahan untuk mendukung HDR10 atau VP9 HLG. Platform harus memperluas ekstraktor MP4 untuk mendukung VP9 PQ dalam MP4. HDR metadata statis harus disebarluaskan dalam bitstream VP9 PQ, diteruskan ke decoder PQ VP9 dan ke layar melalui MediaExtractor => Pipeline MediaCodec.

Ekstensi Stagefright untuk dukungan Dolby Vision

Platform harus menambahkan dukungan format Dolby Vision ke Stagefright:

  • Dukungan kueri definisi port untuk port yang dikompresi.
  • Mendukung enumerasi profil/tingkat untuk dekoder DV.
  • Mendukung eksposur profil/level DV untuk trek HDR DV.

Detail penerapan khusus teknologi

Pipeline decoder HDR10

Gambar 1. Pipeline HDR10

Bitstream HDR10 dikemas dalam container MP4. Aplikasi menggunakan layanan MP4 untuk mengekstrak data frame dan mengirimkannya ke decoder.

  • Ekstraktor MPEG4
    Bitstream HDR10 dikenali hanya sebagai aliran HEVC normal oleh MPEG4Extractor dan trek HDR dengan jenis "video/HEVC" akan menjadi yang diekstraksi. Framework ini memilih decoder video HEVC yang mendukung Profil Main10HDR10 untuk mendekode trek tersebut.
  • Decoder HEVC
    Informasi HDR ada dalam SEI atau SPS. Decoder HEVC terlebih dahulu menerima frame yang berisi informasi HDR. Decoder kemudian mengekstrak HDR informasi dan memberi tahu aplikasi bahwa aplikasi sedang mendekode video HDR. HDR informasi digabungkan ke dalam format output decoder, yang disebarkan ke permukaannya nanti.

Tindakan vendor

  1. Iklankan profil decoder HDR yang didukung dan jenis OMX level. Contoh:
    OMX_VIDEO_HEVCProfileMain10HDR10 (dan Main10)
  2. Implementasikan dukungan untuk indeks: OMX.google.android.index.describeHDRColorInfo
  3. Implementasikan dukungan untuk indeks: OMX.google.android.index.describeColorAspects
  4. Mengimplementasikan dukungan untuk penguraian SEI mastering metadata.

Pipeline decoder Dolby Vision

Gambar 2. Pipeline Dolby Vision

Dolby-bitstream dikemas dalam kontainer MP4 seperti yang didefinisikan oleh Dolby. Secara teori, aplikasi bisa menggunakan ekstraktor MP4 reguler untuk mengekstrak lapisan dasar, lapisan penyempurnaan, dan lapisan metadata secara terpisah; namun, ini tidak sesuai dengan model Android MediaExtractor/MediaCodec saat ini.

  • DolbyEkstrakor:
    • Dolby-bitstream dikenali oleh DolbyExtractor, yang mengekspos berbagai lapisan sebagai 1 hingga 2 trek untuk setiap trek video dolby (grup):
      • Trek HDR dengan jenis "video/dolby-vision" untuk kampanye gabungan 2/3-layer dolby stream. Format unit akses trek HDR, yang menentukan cara memaketkan unit akses dari lapisan dasar/peningkatan/metadata ke dalam satu buffer untuk didekode ke dalam satu frame HDR, harus ditentukan oleh Dolby.
      • (Opsional, hanya jika BL kompatibel dengan versi lama) Trek BL berisi hanya lapisan dasar, yang harus dapat didekode oleh dekoder MediaCodec biasa, misalnya, decoder AVC/HEVC. Ekstraktor harus memberikan AVC/HEVC unit akses untuk jalur ini. Trek BL ini harus memiliki ID unik jalur yang sama ("track-ID") sebagai trek Dolby sehingga aplikasi memahami bahwa adalah dua pengkodean dari video yang sama.
    • Aplikasi dapat menentukan jalur yang akan dipilih berdasarkan kemampuan IT mereka.
    • Karena trek HDR memiliki jenis HDR tertentu, framework akan memilih dekoder video Dolby untuk memecahkan kode trek tersebut. Trek BL akan didekode oleh decoder video AVC/HEVC biasa.
  • DolbyDecoder:
    • DolbyDecoder menerima unit akses yang berisi akses yang diperlukan unit untuk semua lapisan (EL+BL+MD atau BL+MD)
    • Informasi CSD (data khusus codec, seperti SPS+PPS+VPS) untuk masing-masing lapisan dapat dikemas ke dalam 1 {i>frame<i} CSD untuk ditentukan oleh Dolby. Diperlukan satu frame CSD.

Tindakan Dolby

  1. Menentukan paket unit akses untuk berbagai penampung Dolby skema seperti BL+EL+MD) untuk decoder Dolby abstrak format yang diharapkan oleh decoder HDR).
  2. Menentukan pengemasan CSD untuk decoder Dolby abstrak.

Tindakan vendor

  1. Terapkan ekstraktor Dolby. Ini juga dapat dilakukan dengan Dolby.
  2. Integrasikan DolbyExtractor ke dalam framework. Titik entrinya adalah frameworks/av/media/libstagefright/MediaExtractor.cpp.
  3. Mendeklarasikan profil dekoder HDR dan OMX level . Contoh: OMX_VIDEO_DOLBYPROFILETYPE dan OMX_VIDEO_DOLBYLEVELTYP.
  4. Implementasikan dukungan untuk indeks: 'OMX.google.android.index.describeColorAspects mnt
  5. Menyebarkan metadata HDR dinamis ke aplikasi dan memunculkannya {i>frame<i}. Biasanya informasi ini harus dikemas ke dalam frame yang didekode seperti yang didefinisikan oleh Dolby, karena standar HDMI tidak menyediakan cara meneruskannya ke layar.

Pipeline decoder VP9

Gambar 3. pipeline VP9-PQ

Bitstream VP9 dikemas dalam container WebM dengan cara yang ditentukan oleh WebM tim. Aplikasi perlu menggunakan ekstraktor WebM untuk mengekstrak metadata HDR dari bitstream sebelum mengirim {i> frame<i} ke decoder.

  • Ekstraktor WebM:
  • Decoder VP9:
    • Decoder menerima bitstream Profile2 dan mendekodenya seperti VP9 normal feed.
    • Decoder menerima semua metadata statis HDR dari framework.
    • Decoder menerima metadata statis melalui unit akses bitstream untuk VP9 streaming PQ.
    • Decoder VP9 harus dapat menyebarkan metadata statis/dinamis HDR ke layar.

Tindakan vendor

  1. Implementasikan dukungan untuk indeks: OMX.google.android.index.describeHDRColorInfo
  2. Implementasikan dukungan untuk indeks: OMX.google.android.index.describeColorAspects
  3. Menerapkan metadata statis HDR