• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## 5.1\. Media Codecs
2
3### 5.1.1\. Audio Encoding
4
5See more details in [5.1.3. Audio Codecs Details](#5_1_3_audio_codecs_details).
6
7Handheld device implementations MUST support the following audio encoding:
8
9*    [H-0-1] AMR-NB
10*    [H-0-2] AMR-WB
11*    [H-0-3] MPEG-4 AAC Profile (AAC LC)
12*    [H-0-4] MPEG-4 HE AAC Profile (AAC+)
13*    [H-0-5] AAC ELD (enhanced low delay AAC)
14
15
16Television device implementations MUST support the following audio encoding:
17
18*    [T-0-1] MPEG-4 AAC Profile (AAC LC)
19*    [T-0-2] MPEG-4 HE AAC Profile (AAC+)
20*    [T-0-3] AAC ELD (enhanced low delay AAC)
21
22Automotive device implementations MUST support the following audio encoding:
23
24*    [A-1-1] MPEG-4 AAC Profile (AAC LC)
25*    [A-1-2] MPEG-4 HE AAC Profile (AAC+)
26*    [A-1-3] AAC ELD (enhanced low delay AAC)
27
28If device implementations declare `android.hardware.microphone`,
29they MUST support the following audio encoding:
30
31*    [C-1-1] PCM/WAVE
32
33
34### 5.1.2\. Audio Decoding
35
36See more details in [5.1.3. Audio Codecs Details](#5_1_3_audio_codecs_details).
37
38Handheld device implementations MUST support the following decoding.
39
40*    [H-0-1] AMR-NB
41*    [H-0-2] AMR-WB
42
43If device implementations declare support for the
44`android.hardware.audio.output` feature, they:
45
46*    [C-1-1] MPEG-4 AAC Profile (AAC LC)
47*    [C-1-2] MPEG-4 HE AAC Profile (AAC+)
48*    [C-1-3] MPEG-4 HE AACv2 Profile (enhanced AAC+)
49*    [C-1-4] AAC ELD (enhanced low delay AAC)
50*    [C-1-5] FLAC
51*    [C-1-6] MP3
52*    [C-1-7] MIDI
53*    [C-1-8] Vorbis
54*    [C-1-9] PCM/WAVE
55*    [C-1-10] Opus
56
57If device implementations support the decoding of AAC input buffers of
58multichannel streams (i.e. more than two channels) to PCM through the default
59AAC audio decoder in the `android.media.MediaCodec` API, the following MUST be
60supported:
61
62*    [C-2-1] Decoding MUST be performed without downmixing (e.g. a 5.0 AAC
63stream must be decoded to five channels of PCM, a 5.1 AAC stream must be decoded
64to six channels of PCM).
65*    [C-2-2] Dynamic range metadata MUST be as defined in "Dynamic Range Control
66(DRC)" in ISO/IEC 14496-3, and the `android.media.MediaFormat` DRC keys to
67configure the dynamic range-related behaviors of the audio decoder. The
68AAC DRC keys were introduced in API 21,and are:
69KEY_AAC_DRC_ATTENUATION_FACTOR, KEY_AAC_DRC_BOOST_FACTOR,
70KEY_AAC_DRC_HEAVY_COMPRESSION, KEY_AAC_DRC_TARGET_REFERENCE_LEVEL and
71KEY_AAC_ENCODED_TARGET_LEVEL
72
73
74### 5.1.3\. Audio Codecs Details
75
76<table>
77 <tr>
78    <th>Format/Codec</th>
79    <th>Details</th>
80    <th>Supported File Types/Container Formats</th>
81 </tr>
82 <tr>
83    <td>MPEG-4 AAC Profile<br />(AAC LC)</td>
84    <td>Support for mono/stereo/5.0/5.1 content with standard
85    sampling rates from 8 to 48 kHz.</td>
86    <td>
87    <ul>
88    <li class="table_list">3GPP (.3gp)</li>
89    <li class="table_list">MPEG-4 (.mp4, .m4a)</li>
90    <li class="table_list">ADTS raw AAC (.aac, ADIF not supported)</li>
91    <li class="table_list">MPEG-TS (.ts, not seekable)</li></ul>
92    </td>
93 </tr>
94 <tr>
95    <td>MPEG-4 HE AAC Profile (AAC+)</td>
96    <td>Support for mono/stereo/5.0/5.1 content with standard
97    sampling rates from 16 to 48 kHz.</td>
98    <td></td>
99 </tr>
100 <tr>
101    <td>MPEG-4 HE AACv2<br />
102
103Profile (enhanced AAC+)</td>
104    <td>Support for mono/stereo/5.0/5.1 content with standard
105    sampling rates from 16 to 48 kHz.</td>
106    <td></td>
107 </tr>
108 <tr>
109    <td>AAC ELD (enhanced low delay AAC)</td>
110    <td>Support for mono/stereo content with standard sampling rates from 16 to
111    48 kHz.</td>
112    <td></td>
113 </tr>
114 <tr>
115    <td>AMR-NB</td>
116    <td>4.75 to 12.2 kbps sampled @ 8 kHz</td>
117    <td>3GPP (.3gp)</td>
118 </tr>
119 <tr>
120    <td>AMR-WB</td>
121    <td>9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16 kHz</td>
122    <td></td>
123 </tr>
124 <tr>
125    <td>FLAC</td>
126    <td>Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1
127    kHz is RECOMMENDED on devices with 44.1 kHz output, as the 48 to 44.1 kHz
128    downsampler does not include a low-pass filter). 16-bit RECOMMENDED; no
129    dither applied for 24-bit.</td>
130    <td>FLAC (.flac) only</td>
131 </tr>
132 <tr>
133    <td>MP3</td>
134    <td>Mono/Stereo 8-320Kbps constant (CBR) or variable bitrate (VBR)</td>
135    <td>MP3 (.mp3)</td>
136 </tr>
137 <tr>
138    <td>MIDI</td>
139    <td>MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for
140    ringtone formats RTTTL/RTX, OTA, and iMelody</td>
141    <td><ul>
142    <li class="table_list">Type 0 and 1 (.mid, .xmf, .mxmf)</li>
143    <li class="table_list">RTTTL/RTX (.rtttl, .rtx)</li>
144    <li class="table_list">OTA (.ota)</li>
145    <li class="table_list">iMelody (.imy)</li></ul></td>
146 </tr>
147 <tr>
148    <td>Vorbis</td>
149    <td></td>
150    <td><ul>
151    <li class="table_list">Ogg (.ogg)</li>
152    <li class="table_list">Matroska (.mkv, Android 4.0+)</li></ul></td>
153 </tr>
154 <tr>
155    <td>PCM/WAVE</td>
156    <td>16-bit linear PCM (rates up to limit of hardware). Devices MUST support
157    sampling rates for raw PCM recording at 8000, 11025, 16000, and 44100 Hz
158    frequencies.</td>
159    <td>WAVE (.wav)</td>
160 </tr>
161 <tr>
162    <td>Opus</td>
163    <td></td>
164    <td>Matroska (.mkv), Ogg(.ogg)</td>
165 </tr>
166</table>
167
168### 5.1.4\. Image Encoding
169
170See more details in [5.1.6. Image Codecs Details](#5_1_6_image_codecs_details).
171
172Device implementations MUST support encoding the following image encoding:
173
174*    [C-0-1] JPEG
175*    [C-0-2] PNG
176*    [C-0-3] WebP
177
178### 5.1.5\. Image Decoding
179
180See more details in [5.1.6. Image Codecs Details](#5_1_6_image_codecs_details).
181
182Device impelementations MUST support encoding the following image decoding:
183
184*    [C-0-1] JPEG
185*    [C-0-2] GIF
186*    [C-0-3] PNG
187*    [C-0-4] BMP
188*    [C-0-5] WebP
189*    [C-0-6] Raw
190
191### 5.1.6\. Image Codecs Details
192
193<table>
194 <tr>
195    <th>Format/Codec</th>
196    <th>Details</th>
197    <th>Supported File Types/Container Formats</th>
198 </tr>
199 <tr>
200    <td>JPEG</td>
201    <td>Base+progressive</td>
202    <td>JPEG (.jpg)</td>
203 </tr>
204 <tr>
205    <td>GIF</td>
206    <td></td>
207    <td>GIF (.gif)</td>
208 </tr>
209 <tr>
210    <td>PNG</td>
211    <td></td>
212    <td>PNG (.png)</td>
213 </tr>
214 <tr>
215    <td>BMP</td>
216    <td></td>
217    <td>BMP (.bmp)</td>
218 </tr>
219 <tr>
220    <td>WebP</td>
221    <td></td>
222    <td>WebP (.webp)</td>
223 </tr>
224 <tr>
225    <td>Raw</td>
226    <td></td>
227    <td>ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf),
228        PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw)</td>
229 </tr>
230</table>
231
232
233
234### 5.1.7\. Video Codecs
235
236*   For acceptable quality of web video streaming and video-conference
237services, device implementations SHOULD use a hardware VP8 codec that meets the
238[requirements](http://www.webmproject.org/hardware/rtc-coding-requirements/).
239
240If device implementations include a video decoder or encoder:
241
242*   [C-1-1] Video codecs MUST support output and input bytebuffer sizes that
243accommodate the largest feasible compressed and uncompressed frame as dictated
244by the standard and configuration but also not overallocate.
245
246*   [C-1-2] Video encoders and decoders MUST support YUV420 flexible color
247format (COLOR_FormatYUV420Flexible).
248
249If device implementations advertise HDR profile support through
250[`Display.HdrCapabilities`](
251https://developer.android.com/reference/android/view/Display.HdrCapabilities.html),
252they:
253
254*   [C-2-1] MUST support HDR static metadata parsing and handling.
255
256If device implementations advertise intra refresh support through
257`FEATURE_IntraRefresh` in the [`MediaCodecInfo.CodecCapabilities`](
258https://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html#FEATURE_IntraRefresh)
259class, they:
260
261*   [C-3-1]MUST support the refresh periods in the range of 10 - 60 frames and
262accurately operate within 20% of configured refresh period.
263
264
265
266### 5.1.8\. Video Codecs List
267
268
269<table>
270 <tr>
271    <th>Format/Codec</th>
272    <th>Details</th>
273    <th>Supported File Types/<br>Container Formats</th>
274 </tr>
275 <tr>
276    <td>H.263</td>
277    <td></td>
278    <td><ul>
279    <li class="table_list">3GPP (.3gp)</li>
280    <li class="table_list">MPEG-4 (.mp4)</li></ul></td>
281 </tr>
282 <tr>
283    <td>H.264 AVC</td>
284    <td>See <a href="#5_2_video_encoding">section 5.2 </a>and
285    <a href="#5_3_video_decoding">5.3</a> for details</td>
286    <td><ul>
287    <li class="table_list">3GPP (.3gp)</li>
288    <li class="table_list">MPEG-4 (.mp4)</li>
289    <li class="table_list">MPEG-2 TS (.ts, AAC audio only, not seekable, Android
290    3.0+)</li></ul></td>
291 </tr>
292 <tr>
293    <td>H.265 HEVC</td>
294    <td>See <a href="#5_3_video_decoding">section 5.3</a> for details</td>
295    <td>MPEG-4 (.mp4)</td>
296 </tr>
297<tr>
298  <td>MPEG-2</td>
299  <td>Main Profile</td>
300  <td>MPEG2-TS</td>
301</tr>
302 <tr>
303    <td>MPEG-4 SP</td>
304    <td></td>
305    <td>3GPP (.3gp)</td>
306 </tr>
307 <tr>
308    <td>VP8</td>
309    <td>See <a href="#5_2_video_encoding">section 5.2</a> and
310    <a href="#5_3_video_decoding">5.3</a> for details</td>
311    <td><ul>
312    <li class="table_list"><a href="http://www.webmproject.org/">WebM
313    (.webm)</a></li>
314    <li class="table_list">Matroska (.mkv)</li></ul>
315    </td>
316 </tr>
317 <tr>
318    <td>VP9</td>
319    <td>See <a href="#5_3_video_decoding">section 5.3</a> for details</td>
320    <td><ul>
321    <li class="table_list"><a href="http://www.webmproject.org/">WebM
322    (.webm)</a></li>
323    <li class="table_list">Matroska (.mkv)</li></ul>
324    </td>
325 </tr>
326</table>
327
328
329