Pemutaran Video HDR

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

Android 10 mendukung video HDR berikut.

  • HDR10
  • VP9
  • HDR10+

Memulai Android 9 dan yang lebih tinggi, MediaCodec melaporkan metadata HDR terlepas dari mode tunneled. Anda bisa mendapatkan data yang didekodekan bersama dengan metadata statis/dinamis dalam mode non-tunnel. 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, ini dilaporkan dengan kunci KEY_HDR10_PLUS_INFO pada format keluaran dan dapat berubah untuk setiap bingkai keluaran. Lihat Tunneling Multimedia untuk informasi lebih lanjut.

Sejak Android 7.0, dukungan HDR awal mencakup pembuatan konstanta yang tepat untuk penemuan dan penyiapan saluran video HDR. Itu berarti menentukan jenis codec dan mode tampilan dan menentukan bagaimana data HDR harus diteruskan ke MediaCodec dan dipasok ke dekoder 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

Pada Android 7.0 dan lebih tinggi, teknologi HDR berikut 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 tunneled yang ditentukan , tetapi perangkat dapat menambahkan dukungan untuk pemutaran HDR di SurfaceViews menggunakan buffer video buram. Dengan kata lain:

  • Tidak ada API Android standar untuk memeriksa apakah pemutaran HDR didukung menggunakan dekoder non-tunnel.
  • Dekoder video terowongan yang mengiklankan kemampuan pemutaran HDR harus mendukung pemutaran HDR saat terhubung ke tampilan 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 yang ditentukan. Ini pada dasarnya adalah informasi di EDID Static Metadata Data Block seperti yang didefinisikan dalam CTA-861.3:

  • public Display.HdrCapabilities getHdrCapabilities()
    Mengembalikan kemampuan HDR layar.
  • Display.HdrCapabilities
    Mencakup kemampuan HDR dari tampilan tertentu. Misalnya, jenis HDR yang didukungnya dan detail tentang data luminansi yang diinginkan.

Konstanta:

  • int HDR_TYPE_DOLBY_VISION
    Dukungan Dolby Vision.
  • int HDR_TYPE_HDR10
    Dukungan HDR10 / PQ.
  • int HDR_TYPE_HLG
    Dukungan Hybrid Log-Gamma.
  • float INVALID_LUMINANCE
    Nilai luminansi tidak valid.

Metode Publik:

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

Dekoder

Aplikasi harus menggunakan CodecCapabilities.profileLevels API 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 buffer tunggal per frame oleh aplikasi video. Ini dilakukan secara otomatis oleh MediaExtractor berkemampuan Dolby-Vision.

HEVC HDR 10

Konstanta profil MediaCodecInfo.CodecProfileLevel :

int HEVCProfileMain10HDR10

VP9 HLG & PQ

Konstanta profil MediaCodecInfo.CodecProfileLevel :

int VP9Profile2HDR
int VP9Profile3HDR

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

Hanya decoder tunneled yang dijamin dapat memutar konten HDR. Pemutaran oleh dekoder non-tunnel dapat mengakibatkan informasi HDR hilang 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 trek (file) memerlukan dukungan HDR tidak didukung oleh platform. Aplikasi dapat mengurai data khusus codec untuk menentukan apakah 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 HEVCProfileMain10HDR10 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 mereka mengemas unit akses dari lapisan yang sesuai ke dalam unit akses tunggal untuk dekoder seperti yang didefinisikan oleh Dolby.
  • Sebuah platform mungkin mendukung ekstraktor berkemampuan HDR, tetapi tidak ada 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, tidak segera 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 tunneled decoder diperlukan untuk mendukung profil tersebut.

Mengaktifkan dukungan platform HDR

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

Perubahan platform di Android 7.0 untuk HDR

Berikut adalah beberapa perubahan penting dalam platform (Application/Native layer) yang perlu diperhatikan oleh OEM dan SOC.

Menampilkan

Komposisi perangkat keras

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

  1. Tentukan ruang/volume warna linier yang berisi semua lapisan yang akan dikomposisikan, berdasarkan warna lapisan, penguasaan, dan potensi metadata dinamis.
    Jika menggabungkan 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, penguasaan, dan metadata dinamis potensial untuk adegan campuran.
    2. Konversikan adegan campuran yang dihasilkan ke ruang/volume warna turunan.
  5. Jika menampilkan langsung ke layar, konversikan hasil campuran adegan ke sinyal tampilan yang diperlukan untuk menghasilkan adegan itu.

Tampilan penemuan

Penemuan tampilan HDR hanya didukung melalui HWC2. Pelaksana perangkat harus secara selektif mengaktifkan adaptor HWC2 yang dirilis dengan Android 7.0 agar fitur ini 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 terhubung mengiklankan kemampuan HDR-nya melalui HDMI EDID seperti yang 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 seperti yang ditentukan oleh badan terkaitnya.
  • Perhatikan bahwa API HWC2 menggunakan nilai luminansi yang diinginkan mengambang, sehingga nilai EDID 8-bit harus diterjemahkan dengan cara yang sesuai.

Dekoder

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

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

Dukungan dekoder Dolby Vision

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

  • Mendukung jenis pantomim "video/dolby-vision."
  • Iklankan profil/level Dolby Vision yang didukung.
  • Terima unit akses yang berisi sub-unit akses dari semua lapisan seperti yang 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 dekoder internal.
  • Mendukung peralihan adaptif antara profil/level Dolby Vision seperti yang dipersyaratkan oleh Dolby.

Saat mengonfigurasi dekoder, profil Dolby yang sebenarnya tidak dikomunikasikan ke codec. Ini hanya dilakukan melalui data khusus codec setelah dekoder dimulai. Sebuah platform dapat memilih untuk mendukung beberapa dekoder 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, itu juga harus mendukung peralihan di antara mereka secara dinamis dengan cara yang adaptif.

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

  • Sediakan ekstraktor sadar Dolby-Vision, meskipun tidak mendukung pemutaran HDR.
  • Sediakan dekoder yang mendukung profil visi seperti yang didefinisikan oleh Dolby.

Dukungan dekoder HDR10

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

  • Mendukung jenis pantomim "video/hevc."
  • Beriklan yang didukung HEVCMain10HDR10. Dukungan profil HEVCMain10HRD10 juga memerlukan dukungan profil HEVMain10, yang memerlukan dukungan profil HEVMain pada tingkat yang sama.
  • Mendukung penguraian blok SEI metadata mastering, 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 decoder VP9 tunneled yang juga mendukung penanganan metadata terkait HDMI. Dekoder tersebut (selain dukungan dekoder HDR umum) harus:

  • Mendukung jenis pantomim "video/x-vnd.on2.vp9."
  • Iklankan VP9Profile2HDR yang didukung. Dukungan profil VP9Profile2HDR juga memerlukan dukungan profil VP9Profile2 pada tingkat yang sama.

ekstraktor

Dukungan ekstraktor Dolby Vision

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

  • Ekstraktor MP4 biasa hanya dapat mengekstrak lapisan dasar dari file, tetapi bukan lapisan tambahan atau metadata. Maka diperlukan ekstraktor Dolby khusus untuk mengekstrak data dari file tersebut.
  • Ekstraktor Dolby harus mengekspos 1 hingga 2 trek untuk setiap trek video Dolby (grup):
    • Trek Dolby Vision HDR dengan jenis "video/dolby-vision" untuk aliran Dolby 2/3-lapisan gabungan. Format unit akses trek HDR, yang menentukan cara mengemas unit akses dari lapisan dasar/peningkatan/metadata ke dalam buffer tunggal untuk didekodekan ke dalam satu bingkai HDR, harus ditentukan oleh Dolby.
    • Jika trek video Dolby Vision berisi lapisan dasar (BL) terpisah (kompatibel ke belakang), ekstraktor juga harus mengekspos ini sebagai trek "video/avc" atau "video/hevc" yang terpisah. Ekstraktor harus menyediakan unit 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 penyandian 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 sebuah platform menyediakan dekoder berkemampuan Dolby-Vision, platform tersebut juga harus menyediakan ekstraktor sadar Dolby-Vision, meskipun 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 aliran bit VP9 PQ, sehingga metadata ini diteruskan ke dekoder VP9 PQ dan ke tampilan melalui jalur normal MediaExtractor => MediaCodec.

Ekstensi demam panggung untuk dukungan Dolby Vision

Platform harus menambahkan dukungan format Dolby Vision ke Stagefright:

  • Dukungan untuk kueri definisi port untuk port terkompresi.
  • Mendukung profil/pencacahan level untuk dekoder DV.
  • Mendukung pengeksposan 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 dekoder.

  • Ekstraktor MPEG4
    Bitstream HDR10 dikenali 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 itu.
  • Dekoder HEVC
    Informasi HDR ada dalam SEI atau SPS. Dekoder HEVC pertama-tama menerima bingkai 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 dekoder HDR yang didukung dan tipe OMX level. Contoh:
    OMX_VIDEO_HEVCProfileMain10HDR10 (dan Main10 )
  2. Menerapkan dukungan untuk indeks: ' OMX.google.android.index.describeHDRColorInfo '
  3. Menerapkan dukungan untuk indeks: ' OMX.google.android.index.describeColorAspects '
  4. Menerapkan dukungan untuk penguraian SEI dari mastering metadata.

Pipa dekoder Dolby Vision

Gambar 2. Saluran Dolby Vision

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

  • Ekstraktor Dolby:
    • Dolby-bitstream dikenali oleh DolbyExtractor, yang memperlihatkan berbagai lapisan sebagai 1 hingga 2 trek untuk setiap trek video dolby (grup):
      • Trek HDR dengan jenis "video/dolby-vision" untuk aliran dolby 2/3-lapisan gabungan. Format unit akses trek HDR, yang menentukan cara mengemas unit akses dari lapisan dasar/peningkatan/metadata ke dalam buffer tunggal untuk didekodekan ke dalam satu bingkai HDR, harus 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 trek ini. Trek BL ini harus memiliki track-unik-ID ("track-ID") yang sama dengan trek Dolby sehingga aplikasi memahami bahwa ini adalah dua penyandian 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 itu. 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. Memiliki satu bingkai CSD diperlukan.

Aksi Dolby

  1. Tentukan kemasan unit akses untuk berbagai skema wadah 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. 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 jenis level OMX. Contoh: OMX_VIDEO_DOLBYPROFILETYPE dan OMX_VIDEO_DOLBYLEVELTYP .
  4. Menerapkan dukungan untuk indeks: 'OMX.google.android.index.describeColorAspects '
  5. Menyebarkan metadata HDR dinamis ke aplikasi dan muncul di setiap bingkai. 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 stream 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 dapat menyebarkan metadata statis/dinamis HDR ke layar.

Tindakan Vendor

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