Pemutaran video HDR

Video dengan rentang dinamis tinggi (HDR) adalah yang terdepan dalam decoding video berkualitas tinggi, menghadirkan kualitas reproduksi adegan yang tak tertandingi. Hal ini dilakukan dengan meningkatkan rentang dinamis komponen pencahayaan secara signifikan (dari 100 cd/m 2 saat ini menjadi 1000 cd/m 2 ) dan dengan menggunakan ruang warna yang jauh lebih luas (BT 2020). Ini sekarang menjadi elemen sentral dari evolusi 4K UHD di dunia TV.

Android 10 mendukung video HDR berikut.

  • HDR10
  • Wakil Presiden9
  • HDR10+

Mulai Android 9 dan lebih tinggi, MediaCodec melaporkan metadata HDR apa pun mode terowongannya. Anda bisa mendapatkan data yang didekodekan bersama dengan metadata statis/dinamis dalam mode non-terowongan. Untuk HDR10 dan VP9Profile2 yang menggunakan metadata statis, ini dilaporkan dalam format output dengan kunci KEY_HDR_STATIC_INFO . Untuk HDR10+ yang menggunakan metadata dinamis, hal ini dilaporkan dengan kunci 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 pipeline video HDR. Itu berarti menentukan jenis codec dan mode tampilan serta menentukan bagaimana data HDR harus diteruskan ke MediaCodec dan dipasok ke decoder HDR.

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

Teknologi HDR yang didukung

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

Teknologi Dolby-Vision HDR10 VP9-HLG VP9-PQ
Kodek AVC/HEVC HEVC Wakil Presiden9 Wakil Presiden9
Fungsi Pemindahan ST-2084 ST-2084 HLG ST-2084
Jenis Metadata HDR Dinamis Statis Tidak ada Statis

Di Android 7.0, hanya pemutaran HDR melalui mode terowongan yang ditentukan , namun perangkat dapat menambahkan dukungan untuk pemutaran HDR di SurfaceView menggunakan buffer video buram. Dengan kata lain:

  • Tidak ada API Android standar untuk memeriksa apakah pemutaran HDR didukung menggunakan dekoder non-terowongan.
  • Dekoder video terowongan yang mengiklankan kemampuan pemutaran HDR harus mendukung pemutaran HDR saat dihubungkan ke layar berkemampuan HDR.
  • Komposisi GL konten HDR tidak didukung oleh rilis AOSP Android 7.0.

Penemuan

Pemutaran HDR memerlukan dekoder berkemampuan HDR dan koneksi ke layar berkemampuan HDR. Secara opsional, beberapa teknologi memerlukan ekstraktor khusus.

Menampilkan

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

  • public Display.HdrCapabilities getHdrCapabilities()
    Mengembalikan kemampuan HDR tampilan.
  • Display.HdrCapabilities
    Meringkas kemampuan HDR dari tampilan tertentu. Misalnya, jenis HDR apa yang didukungnya dan detail tentang data pencahayaan 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 Hibrid Log-Gamma.
  • float INVALID_LUMINANCE
    Nilai pencahayaan tidak valid.

Metode publik:

  • float getDesiredMaxAverageLuminance()
    Mengembalikan data pencahayaan rata-rata bingkai maksimal konten yang diinginkan dalam cd/cd/m 2 untuk tampilan ini.
  • float getDesiredMaxLuminance()
    Mengembalikan data pencahayaan maksimal konten yang diinginkan dalam cd/cd/m 2 untuk tampilan ini.
  • float getDesiredMinLuminance()
    Mengembalikan data pencahayaan min konten yang diinginkan dalam cd/cd/m 2 untuk tampilan ini.
  • int[] getSupportedHdrTypes()
    Mendapatkan jenis HDR yang didukung pada tampilan ini (lihat konstanta). Mengembalikan array kosong jika HDR tidak didukung oleh tampilan.

Dekoder

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

Dolby-Vision

Konstanta pantomim 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

Lapisan video dan metadata Dolby Vision harus digabungkan menjadi satu buffer per frame oleh aplikasi video. Hal ini dilakukan secara otomatis oleh MediaExtractor yang mendukung Dolby-Vision.

HEVC HDR 10

Konstanta profil MediaCodecInfo.CodecProfileLevel :

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG & PQ

Konstanta profil MediaCodecInfo.CodecProfileLevel :

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

Jika suatu platform mendukung dekoder berkemampuan HDR, platform tersebut juga harus mendukung ekstraktor berkemampuan HDR.

Hanya dekoder terowongan yang dijamin dapat memutar konten HDR. Pemutaran dengan dekoder non-terowongan dapat mengakibatkan hilangnya informasi HDR dan konten diratakan menjadi volume warna SDR.

Alat pengambilan sari

Kontainer berikut didukung untuk berbagai teknologi HDR di Android 7.0:

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

Penemuan apakah suatu trek (file) memerlukan dukungan HDR tidak didukung oleh platform. Aplikasi dapat menguraikan data khusus codec untuk menentukan apakah suatu trek memerlukan profil HDR tertentu.

Ringkasan

Persyaratan komponen untuk setiap teknologi HDR ditunjukkan pada tabel berikut:

Teknologi Dolby-Vision HDR10 VP9-HLG VP9-PQ
Jenis HDR yang didukung (Tampilan) HDR_TYPE_DOLBY_VISION HDR_TYPE_HDR10 HDR_TYPE_HLG HDR_TYPE_HDR10
Wadah (Ekstraktor) MP4 MP4 WebM WebM
Dekoder MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
Profil (Dekoder) Salah satu profil Dolby Profil HEVCUtama10HDR10 VP9Profile2HDR atau VP9Profile3HDR VP9Profile2HDR atau VP9Profile3HDR

Catatan:

  • Bitstream Dolby-Vision dikemas dalam wadah MP4 dengan cara yang ditentukan oleh Dolby. Aplikasi dapat mengimplementasikan ekstraktor berkemampuan Dolby mereka sendiri selama aplikasi tersebut mengemas unit akses dari lapisan terkait ke dalam unit akses tunggal untuk dekoder seperti yang ditentukan oleh Dolby.
  • Suatu platform mungkin mendukung ekstraktor berkemampuan HDR, tetapi tidak mendukung dekoder berkemampuan HDR yang sesuai.

Pemutaran

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

  • Untuk Dolby-Vision, apakah file/track media tertentu memerlukan dekoder berkemampuan HDR atau tidak, belum tersedia. Aplikasi harus memiliki informasi ini sebelumnya atau dapat memperoleh informasi ini dengan menguraikan bagian data khusus codec dari MediaFormat.
  • CodecCapabilities.isFormatSupported tidak mempertimbangkan apakah fitur dekoder terowongan diperlukan untuk mendukung profil tersebut.

Aktifkan dukungan platform HDR

Vendor SoC dan OEM harus melakukan pekerjaan tambahan untuk mengaktifkan dukungan platform HDR untuk suatu perangkat.

Perubahan platform di Android 7.0 untuk HDR

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

Menampilkan

Komposisi perangkat keras

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

  1. Tentukan ruang/volume warna linier yang berisi semua lapisan yang akan dikomposisikan, berdasarkan warna lapisan, mastering, dan potensi metadata dinamis.
    Jika dikomposisikan langsung ke tampilan, ini bisa berupa ruang linier yang cocok dengan volume warna tampilan.
  2. Ubah semua lapisan menjadi ruang warna umum.
  3. Lakukan pencampuran.
  4. Jika ditampilkan melalui HDMI:
    1. Tentukan warna, mastering, dan potensi metadata dinamis untuk adegan campuran.
    2. Konversikan adegan campuran yang dihasilkan ke ruang/volume warna turunan.
  5. Jika menampilkan langsung ke layar, konversikan adegan campuran yang dihasilkan menjadi sinyal tampilan yang diperlukan untuk menghasilkan adegan tersebut.

Tampilkan penemuan

Penemuan tampilan HDR hanya didukung melalui HWC2. Implementer perangkat harus secara selektif mengaktifkan adaptor HWC2 yang dirilis dengan Android 7.0 agar fitur ini dapat berfungsi. Oleh karena itu, platform harus menambahkan dukungan untuk HWC2 atau memperluas kerangka kerja AOSP untuk memungkinkan cara menyediakan informasi ini. HWC2 memaparkan API baru untuk menyebarkan Data Statis HDR ke kerangka kerja dan aplikasi.

HDMI

  • Layar HDMI yang tersambung 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 - Rentang Pencahayaan SDR: tidak dipetakan ke jenis HDR apa pun
    • ET_1 Gamma tradisional - Rentang Pencahayaan HDR: tidak dipetakan ke jenis HDR apa pun
    • ET_2 SMPTE ST 2084 - dipetakan ke tipe HDR HDR10
  • Pensinyalan dukungan Dolby Vision atau HLG melalui HDMI dilakukan sebagaimana ditentukan oleh badan terkait.
  • Perhatikan bahwa API HWC2 menggunakan nilai pencahayaan float yang diinginkan, sehingga nilai EDID 8-bit harus diterjemahkan dengan cara yang sesuai.

Dekoder

Platform harus menambahkan dekoder terowongan berkemampuan HDR dan mengiklankan dukungan HDR mereka. Umumnya, dekoder berkemampuan HDR harus:

  • Mendukung decoding terowongan ( FEATURE_TunneledPlayback ).
  • Mendukung metadata statis HDR ( OMX.google.android.index.describeHDRColorInfo ) dan penyebarannya ke komposisi tampilan/perangkat keras. Untuk HLG, metadata yang sesuai harus dikirimkan ke layar.
  • Mendukung deskripsi warna ( OMX.google.android.index.describeColorAspects ) dan penyebarannya ke komposisi tampilan/perangkat keras.
  • Mendukung metadata tertanam HDR sebagaimana ditentukan oleh standar yang relevan.

Dukungan dekoder Dolby Vision

Untuk mendukung Dolby Vision, platform harus menambahkan decoder HDR OMX yang mendukung Dolby-Vision. Mengingat spesifikasi Dolby Vision, ini biasanya merupakan dekoder pembungkus di sekitar satu atau lebih dekoder AVC dan/atau HEVC serta kompositor. Dekoder tersebut harus:

  • Mendukung tipe pantomim "video/dolby-vision."
  • Iklankan profil/level Dolby Vision yang didukung.
  • Terima unit akses yang berisi sub-unit akses dari semua lapisan seperti yang ditentukan 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 seperti yang disyaratkan oleh Dolby.

Saat mengonfigurasi dekoder, profil Dolby sebenarnya tidak dikomunikasikan ke codec. Ini hanya dilakukan melalui data khusus codec setelah decoder dimulai. Sebuah platform dapat memilih untuk mendukung beberapa decoder Dolby Vision: satu untuk profil AVC, dan satu lagi untuk profil HEVC agar dapat menginisialisasi codec yang mendasarinya selama waktu konfigurasi. Jika satu dekoder Dolby Vision mendukung kedua jenis profil, dekoder tersebut juga harus mendukung peralihan antar profil secara dinamis dan adaptif.

Jika suatu platform menyediakan dekoder berkemampuan Dolby-Vision selain dukungan dekoder HDR umum, platform tersebut harus:

  • Sediakan ekstraktor yang mendukung Dolby-Vision, meskipun tidak mendukung pemutaran HDR.
  • Menyediakan decoder yang mendukung profil visi seperti yang ditentukan oleh Dolby.

Dukungan dekoder HDR10

Untuk mendukung HDR10, platform harus menambahkan dekoder OMX berkemampuan HDR10. Ini biasanya merupakan dekoder HEVC terowongan yang juga mendukung penguraian dan penanganan metadata terkait HDMI. Dekoder tersebut (selain dukungan dekoder HDR umum) harus:

  • Mendukung tipe pantomim "video/hevc."
  • Beriklan didukung HEVCMain10HDR10. Dukungan profil HEVCMain10HRD10 juga memerlukan dukungan profil HEVCMain10, yang memerlukan dukungan profil HEVCMain pada tingkat yang sama.
  • Mendukung penguraian blok SEI metadata master, serta info terkait HDR lainnya yang terdapat dalam SPS.

Dukungan dekoder VP9

Untuk mendukung VP9 HDR, platform harus menambahkan dekoder HDR OMX berkemampuan VP9 Profile2. Ini biasanya merupakan dekoder VP9 terowongan yang juga mendukung penanganan metadata terkait HDMI. Dekoder tersebut (selain dukungan dekoder HDR umum) harus:

  • Mendukung tipe pantomim "video/x-vnd.on2.vp9."
  • Beriklan didukung VP9Profile2HDR. Dukungan profil VP9Profile2HDR juga memerlukan dukungan profil VP9Profile2 pada level yang sama.

Ekstraktor

Dukungan ekstraktor Dolby Vision

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

  • Ekstraktor MP4 biasa hanya dapat mengekstrak lapisan dasar dari suatu file, tetapi tidak dapat mengekstrak lapisan penyempurnaan atau metadata. Jadi diperlukan ekstraktor Dolby khusus untuk mengekstrak data dari file tersebut.
  • Ekstraktor Dolby harus mengekspos 1 hingga 2 track untuk setiap track video Dolby (grup):
    • Trek Dolby Vision HDR dengan tipe "video/dolby-vision" untuk gabungan aliran Dolby 2/3-lapis. Format unit akses trek HDR, yang menentukan cara mengemas unit akses dari lapisan dasar/peningkatan/metadata ke dalam buffer tunggal untuk didekodekan ke dalam bingkai HDR tunggal, akan ditentukan oleh Dolby.
    • Jika trek video Dolby Vision berisi lapisan dasar (BL) terpisah (kompatibel ke belakang), ekstraktor juga harus mengeksposnya sebagai trek "video/avc" atau "video/hevc" terpisah. Ekstraktor harus menyediakan unit akses AVC/HEVC reguler untuk track ini.
    • Trek BL harus memiliki ID unik trek yang sama ("ID trek") dengan trek HDR sehingga aplikasi memahami bahwa ini adalah dua pengkodean dari video yang sama.
    • Aplikasi dapat memutuskan trek mana yang akan dipilih berdasarkan kemampuan platform.
  • Profil/level Dolby Vision harus diekspos dalam format trek trek HDR.
  • Jika suatu platform menyediakan decoder berkemampuan Dolby-Vision, platform tersebut juga harus menyediakan ekstraktor yang mendukung Dolby-Vision, meskipun platform tersebut tidak mendukung pemutaran HDR.

Dukungan ekstraktor HDR10 dan VP9 HDR

Tidak ada persyaratan ekstraktor tambahan untuk mendukung HDR10 atau VP9 HLG. Platform harus memperluas ekstraktor MP4 untuk mendukung VP9 PQ di MP4. Metadata statis HDR harus disebarkan dalam bitstream VP9 PQ, sehingga metadata ini diteruskan ke decoder VP9 PQ dan ke tampilan melalui pipeline MediaExtractor => MediaCodec normal.

Ekstensi demam panggung untuk dukungan Dolby Vision

Platform harus menambahkan dukungan format Dolby Vision ke Stagefright:

  • Dukungan untuk permintaan definisi port untuk port terkompresi.
  • Mendukung enumerasi profil/level untuk dekoder DV.
  • Mendukung pemaparan profil/level DV untuk trek DV HDR.

Detail implementasi khusus teknologi

Pipa dekoder HDR10

Gambar 1. Pipa HDR10

Bitstream HDR10 dikemas dalam wadah MP4. Aplikasi menggunakan ekstraktor MP4 biasa untuk mengekstrak data bingkai dan mengirimkannya ke decoder.

  • Ekstraktor MPEG4
    Bitstream HDR10 dikenali hanya sebagai aliran HEVC biasa oleh MPEG4Extractor dan trek HDR dengan jenis "video/HEVC" akan diekstraksi. Kerangka kerja ini memilih dekoder video HEVC yang mendukung profil Main10HDR10 untuk memecahkan kode trek tersebut.
  • Dekoder HEVC
    Informasi HDR ada dalam SEI atau SPS. Decoder HEVC pertama-tama menerima frame yang berisi informasi HDR. Dekoder kemudian mengekstrak informasi HDR dan memberi tahu aplikasi bahwa ia sedang mendekode video HDR. Informasi HDR digabungkan ke dalam format keluaran dekoder, yang kemudian disebarkan ke permukaan.

Tindakan vendor

  1. Iklankan profil decoder HDR yang didukung dan tipe level OMX. Contoh:
    OMX_VIDEO_HEVCProfileMain10HDR10 (dan Main10 )
  2. Terapkan dukungan untuk indeks: ' OMX.google.android.index.describeHDRColorInfo '
  3. Terapkan dukungan untuk indeks: ' OMX.google.android.index.describeColorAspects '
  4. Menerapkan dukungan untuk penguraian SEI untuk menguasai metadata.

Pipa dekoder Dolby Vision

Gambar 2. Pipa Dolby Vision

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

  • Ekstraktor Dolby:
    • Dolby-bitstream dikenali oleh DolbyExtractor, yang menampilkan berbagai lapisan sebagai 1 hingga 2 track untuk setiap track video dolby (grup):
      • Trek HDR dengan jenis "video/dolby-vision" untuk gabungan aliran dolby 2/3-lapisan. Format unit akses trek HDR, yang menentukan cara mengemas unit akses dari lapisan dasar/peningkatan/metadata ke dalam buffer tunggal untuk didekodekan ke dalam bingkai HDR tunggal, akan ditentukan oleh Dolby.
      • (Opsional, hanya jika BL kompatibel ke belakang) Trek BL hanya berisi lapisan dasar, yang harus dapat didekodekan oleh dekoder MediaCodec biasa, misalnya dekoder AVC/HEVC. Ekstraktor harus menyediakan unit akses AVC/HEVC reguler untuk track ini. Trek BL ini harus memiliki ID unik trek yang sama ("ID trek") dengan trek Dolby sehingga aplikasi memahami bahwa ini adalah dua pengkodean dari video yang sama.
    • Aplikasi dapat memutuskan trek mana yang akan dipilih berdasarkan kemampuan platform.
    • Karena trek HDR memiliki jenis HDR tertentu, kerangka kerja akan memilih dekoder video Dolby untuk memecahkan kode trek tersebut. Trek BL akan didekodekan oleh dekoder video AVC/HEVC biasa.
  • DolbyDecoder:
    • DolbyDecoder menerima unit akses yang berisi unit akses yang diperlukan untuk semua lapisan (EL+BL+MD atau BL+MD)
    • Informasi CSD (data spesifik codec, seperti SPS+PPS+VPS) untuk masing-masing lapisan dapat dikemas ke dalam 1 bingkai CSD untuk ditentukan oleh Dolby. Diperlukan satu frame CSD.

Tindakan Dolby

  1. Tentukan pengemasan unit akses untuk berbagai skema kontainer Dolby (misalnya BL+EL+MD) untuk dekoder Dolby abstrak (yaitu format buffer yang diharapkan oleh dekoder HDR).
  2. Tentukan kemasan CSD untuk dekoder Dolby abstrak.

Tindakan vendor

  1. Menerapkan ekstraktor Dolby. Hal ini juga bisa dilakukan oleh Dolby.
  2. Integrasikan DolbyExtractor ke dalam kerangka kerja. Titik masuknya adalah frameworks/av/media/libstagefright/MediaExtractor.cpp .
  3. Deklarasikan profil dekoder HDR dan tipe level OMX. Contoh: OMX_VIDEO_DOLBYPROFILETYPE dan OMX_VIDEO_DOLBYLEVELTYP .
  4. Terapkan dukungan untuk indeks: 'OMX.google.android.index.describeColorAspects '
  5. Sebarkan metadata HDR dinamis ke aplikasi dan permukaan di setiap frame. Biasanya informasi ini harus dikemas ke dalam bingkai yang didekodekan seperti yang ditentukan oleh Dolby, karena standar HDMI tidak menyediakan cara untuk meneruskannya ke layar.

Pipa dekoder VP9

Gambar 3. Pipa VP9-PQ

Bitstream VP9 dikemas dalam wadah WebM dengan cara yang ditentukan oleh tim WebM. Aplikasi perlu menggunakan ekstraktor WebM untuk mengekstrak metadata HDR dari bitstream sebelum mengirim bingkai ke dekoder.

  • Ekstraktor WebM:
    • WebM Extractor mengekstrak metadata dan bingkai HDR dari wadah .
  • Dekoder VP9:
    • Decoder menerima bitstream Profile2 dan menerjemahkannya sebagai aliran VP9 normal.
    • Decoder menerima metadata statis HDR apa pun dari kerangka kerja.
    • Decoder menerima metadata statis melalui unit akses bitstream untuk aliran VP9 PQ.
    • Dekoder VP9 harus mampu menyebarkan metadata HDR statis/dinamis ke layar.

Tindakan vendor

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