merge in lmp-mr1-wfc-release history after reset to lmp-mr1-wfc-dev
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index d7eef6e..3079218 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -575,24 +575,33 @@
return NULL;
}
- SkBitmap* bitmap = new SkBitmap;
+ SkAutoTDelete<SkBitmap> bitmap(new SkBitmap);
- bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType), rowBytes);
+ if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType), rowBytes)) {
+ return NULL;
+ }
SkColorTable* ctable = NULL;
if (colorType == kIndex_8_SkColorType) {
int count = p->readInt32();
+ if (count < 0 || count > 256) {
+ // The data is corrupt, since SkColorTable enforces a value between 0 and 256,
+ // inclusive.
+ return NULL;
+ }
if (count > 0) {
size_t size = count * sizeof(SkPMColor);
const SkPMColor* src = (const SkPMColor*)p->readInplace(size);
+ if (src == NULL) {
+ return NULL;
+ }
ctable = new SkColorTable(src, count);
}
}
- jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap, ctable);
+ jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap.get(), ctable);
if (NULL == buffer) {
SkSafeUnref(ctable);
- delete bitmap;
return NULL;
}
@@ -604,7 +613,6 @@
android::status_t status = p->readBlob(size, &blob);
if (status) {
doThrowRE(env, "Could not read bitmap from parcel blob.");
- delete bitmap;
return NULL;
}
@@ -614,8 +622,8 @@
blob.release();
- return GraphicsJNI::createBitmap(env, bitmap, buffer, getPremulBitmapCreateFlags(isMutable),
- NULL, NULL, density);
+ return GraphicsJNI::createBitmap(env, bitmap.detach(), buffer,
+ getPremulBitmapCreateFlags(isMutable), NULL, NULL, density);
}
static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index 19f510a..2a908ba 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -71,7 +71,7 @@
</tr>
<tr>
-<td rowspan="11">Audio</td>
+<td rowspan="12">Audio</td>
<td>AAC LC</td>
<td style="text-align: center;"><big>•</big></td>
<td style="text-align: center;"><big>•</big></td>
@@ -180,6 +180,15 @@
</tr>
<tr>
+<td>Opus</td>
+<td style="text-align: center;"></td>
+<td style="text-align: center;"><big>•</big><br><small>(Android 5.0+)</small></td>
+<td></td>
+<td>
+ Matroska (.mkv)</td>
+</tr>
+
+<tr>
<td rowspan="5">Image</td>
<td>JPEG</td>
<td style="text-align: center;"><big>•</big></td>
@@ -235,7 +244,7 @@
<tr>
-<td rowspan="4">Video</td>
+<td rowspan="6">Video</td>
<td>H.263</td>
<td style="text-align: center;"><big>•</big></td>
<td style="text-align: center;"><big>•</big></td>
@@ -257,6 +266,15 @@
</tr>
<tr>
+<td>H.265 HEVC</td>
+<td style="text-align: center;" nowrap></td>
+<td style="text-align: center;" nowrap><big>•</big><br><small>(Android 5.0+)</small></td>
+<td>Main Profile Level 3 for mobile devices and Main Profile Level 4.1 for Android TV</td>
+<td>
+ • MPEG-4 (.mp4)<br>
+</tr>
+
+<tr>
<td>MPEG-4 SP</td>
<td> </td>
<td style="text-align: center;"><big>•</big></td>
@@ -275,6 +293,16 @@
• Matroska (.mkv, Android 4.0+)</td>
</tr>
+<tr>
+<td>VP9</td>
+<td style="text-align: center;" nowrap></td>
+<td style="text-align: center;" nowrap><big>•</big><br><small>(Android 4.4+)</small></td>
+<td></td>
+<td>
+ • <a href="http://www.webmproject.org/">WebM</a> (.webm)<br>
+ • Matroska (.mkv, Android 4.0+)</td>
+</tr>
+
</tbody></table>
diff --git a/docs/html/training/tv/start/start.jd b/docs/html/training/tv/start/start.jd
index 2766e90..0f5871f 100644
--- a/docs/html/training/tv/start/start.jd
+++ b/docs/html/training/tv/start/start.jd
@@ -1,4 +1,4 @@
-page.title=Get Started with TV Apps
+page.title=Getting Started with TV Apps
page.tags="leanback","recyclerview","launcher"
trainingnavtop=true
@@ -10,6 +10,7 @@
<div id="tb">
<h2>This lesson teaches you how to</h2>
<ol>
+ <li><a href="#media">Determine Media Format Support</a></li>
<li><a href="#dev-project">Setup a TV Project</a></li>
<li><a href="#tv-libraries">Add TV Support Libraries</a></li>
<li><a href="#build-it">Build TV Apps</a></li>
@@ -42,6 +43,18 @@
minimum required changes to enable an app to run on TV devices.
</p>
+<h2 id="media">Determine Media Format Support</h2>
+
+<p>See the following documentation for information about the codecs, protocols, and formats
+supported by Android TV.</p>
+
+<ul>
+ <li><a href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a></li>
+ <li><a class="external-link" href="https://source.android.com/devices/drm.html">DRM</a></li>
+ <li><code><a href="{@docRoot}reference/android/drm/package-summary.html">android.drm</a></code></li>
+ <li><a href="{@docRoot}guide/topics/media/exoplayer.html">ExoPlayer</a></li>
+ <li>{@link android.media.MediaPlayer android.media.MediaPlayer}</li>
+</ul>
<h2 id="dev-project">Set up a TV Project</h2>
@@ -284,9 +297,15 @@
TV devices.
</li>
<li>
- <a href="{@docRoot}training/tv/games/index.html">Games for TV</a> - TV devices are a great
+ <a href="{@docRoot}training/tv/games/index.html">Building TV Games</a> - TV devices are a great
platform for games. See this topic for information on building great game experiences for TV.
</li>
+ <li>
+ <a href="{@docRoot}training/tv/tif/index.html">Building Live TV Apps</a> - Present your video
+ content in a linear, "broadcast TV" style with channels and programs that your users can access
+ through a program guide as well as the channel up/down buttons.
+ </li>
+
</ul>