Merge change I70f91838
* changes:
keystore: Add paddings before checksumming.
diff --git a/api/current.xml b/api/current.xml
index d8afcef..9801036 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -34055,6 +34055,8 @@
deprecated="not deprecated"
visibility="public"
>
+<implements name="java.lang.Cloneable">
+</implements>
<implements name="android.os.Parcelable">
</implements>
<constructor name="Intent"
@@ -93936,7 +93938,7 @@
<method name="glPointSizePointerOES"
return="void"
abstract="false"
- native="true"
+ native="false"
synchronized="false"
static="true"
final="false"
@@ -96959,7 +96961,7 @@
<method name="glMatrixIndexPointerOES"
return="void"
abstract="false"
- native="true"
+ native="false"
synchronized="false"
static="true"
final="false"
@@ -97517,7 +97519,7 @@
<method name="glWeightPointerOES"
return="void"
abstract="false"
- native="true"
+ native="false"
synchronized="false"
static="true"
final="false"
@@ -105206,6545 +105208,6 @@
>
</field>
</class>
-<class name="GLES20"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="GLES20"
- type="android.opengl.GLES20"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="glActiveTexture"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="texture" type="int">
-</parameter>
-</method>
-<method name="glAttachShader"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glBindAttribLocation"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="index" type="int">
-</parameter>
-<parameter name="name" type="java.lang.String">
-</parameter>
-</method>
-<method name="glBindBuffer"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="buffer" type="int">
-</parameter>
-</method>
-<method name="glBindFramebuffer"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="framebuffer" type="int">
-</parameter>
-</method>
-<method name="glBindRenderbuffer"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="renderbuffer" type="int">
-</parameter>
-</method>
-<method name="glBindTexture"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="texture" type="int">
-</parameter>
-</method>
-<method name="glBlendColor"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="red" type="float">
-</parameter>
-<parameter name="green" type="float">
-</parameter>
-<parameter name="blue" type="float">
-</parameter>
-<parameter name="alpha" type="float">
-</parameter>
-</method>
-<method name="glBlendEquation"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mode" type="int">
-</parameter>
-</method>
-<method name="glBlendEquationSeparate"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="modeRGB" type="int">
-</parameter>
-<parameter name="modeAlpha" type="int">
-</parameter>
-</method>
-<method name="glBlendFunc"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="sfactor" type="int">
-</parameter>
-<parameter name="dfactor" type="int">
-</parameter>
-</method>
-<method name="glBlendFuncSeparate"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="srcRGB" type="int">
-</parameter>
-<parameter name="dstRGB" type="int">
-</parameter>
-<parameter name="srcAlpha" type="int">
-</parameter>
-<parameter name="dstAlpha" type="int">
-</parameter>
-</method>
-<method name="glBufferData"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="size" type="int">
-</parameter>
-<parameter name="data" type="java.nio.Buffer">
-</parameter>
-<parameter name="usage" type="int">
-</parameter>
-</method>
-<method name="glBufferSubData"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-<parameter name="size" type="int">
-</parameter>
-<parameter name="data" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glCheckFramebufferStatus"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-</method>
-<method name="glClear"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mask" type="int">
-</parameter>
-</method>
-<method name="glClearColor"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="red" type="float">
-</parameter>
-<parameter name="green" type="float">
-</parameter>
-<parameter name="blue" type="float">
-</parameter>
-<parameter name="alpha" type="float">
-</parameter>
-</method>
-<method name="glClearDepthf"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="depth" type="float">
-</parameter>
-</method>
-<method name="glClearStencil"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="s" type="int">
-</parameter>
-</method>
-<method name="glColorMask"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="red" type="boolean">
-</parameter>
-<parameter name="green" type="boolean">
-</parameter>
-<parameter name="blue" type="boolean">
-</parameter>
-<parameter name="alpha" type="boolean">
-</parameter>
-</method>
-<method name="glCompileShader"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glCompressedTexImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="internalformat" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="border" type="int">
-</parameter>
-<parameter name="imageSize" type="int">
-</parameter>
-<parameter name="data" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glCompressedTexSubImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="xoffset" type="int">
-</parameter>
-<parameter name="yoffset" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="format" type="int">
-</parameter>
-<parameter name="imageSize" type="int">
-</parameter>
-<parameter name="data" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glCopyTexImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="internalformat" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="border" type="int">
-</parameter>
-</method>
-<method name="glCopyTexSubImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="xoffset" type="int">
-</parameter>
-<parameter name="yoffset" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-</method>
-<method name="glCreateProgram"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="glCreateShader"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="type" type="int">
-</parameter>
-</method>
-<method name="glCullFace"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mode" type="int">
-</parameter>
-</method>
-<method name="glDeleteBuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="buffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glDeleteBuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="buffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glDeleteFramebuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="framebuffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glDeleteFramebuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="framebuffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glDeleteProgram"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glDeleteRenderbuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="renderbuffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glDeleteRenderbuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="renderbuffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glDeleteShader"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glDeleteTextures"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="textures" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glDeleteTextures"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="textures" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glDepthFunc"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="func" type="int">
-</parameter>
-</method>
-<method name="glDepthMask"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="flag" type="boolean">
-</parameter>
-</method>
-<method name="glDepthRangef"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="zNear" type="float">
-</parameter>
-<parameter name="zFar" type="float">
-</parameter>
-</method>
-<method name="glDetachShader"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glDisable"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="cap" type="int">
-</parameter>
-</method>
-<method name="glDisableVertexAttribArray"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-</method>
-<method name="glDrawArrays"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mode" type="int">
-</parameter>
-<parameter name="first" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-</method>
-<method name="glDrawElements"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mode" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="type" type="int">
-</parameter>
-<parameter name="indices" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glEnable"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="cap" type="int">
-</parameter>
-</method>
-<method name="glEnableVertexAttribArray"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-</method>
-<method name="glFinish"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="glFlush"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="glFramebufferRenderbuffer"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="attachment" type="int">
-</parameter>
-<parameter name="renderbuffertarget" type="int">
-</parameter>
-<parameter name="renderbuffer" type="int">
-</parameter>
-</method>
-<method name="glFramebufferTexture2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="attachment" type="int">
-</parameter>
-<parameter name="textarget" type="int">
-</parameter>
-<parameter name="texture" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-</method>
-<method name="glFrontFace"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mode" type="int">
-</parameter>
-</method>
-<method name="glGenBuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="buffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGenBuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="buffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGenFramebuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="framebuffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGenFramebuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="framebuffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGenRenderbuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="renderbuffers" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGenRenderbuffers"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="renderbuffers" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGenTextures"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="textures" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGenTextures"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="textures" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGenerateMipmap"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-</method>
-<method name="glGetActiveAttrib"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="index" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="int[]">
-</parameter>
-<parameter name="lengthOffset" type="int">
-</parameter>
-<parameter name="size" type="int[]">
-</parameter>
-<parameter name="sizeOffset" type="int">
-</parameter>
-<parameter name="type" type="int[]">
-</parameter>
-<parameter name="typeOffset" type="int">
-</parameter>
-<parameter name="name" type="byte[]">
-</parameter>
-<parameter name="nameOffset" type="int">
-</parameter>
-</method>
-<method name="glGetActiveAttrib"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="index" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="size" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="type" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="name" type="byte">
-</parameter>
-</method>
-<method name="glGetActiveUniform"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="index" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="int[]">
-</parameter>
-<parameter name="lengthOffset" type="int">
-</parameter>
-<parameter name="size" type="int[]">
-</parameter>
-<parameter name="sizeOffset" type="int">
-</parameter>
-<parameter name="type" type="int[]">
-</parameter>
-<parameter name="typeOffset" type="int">
-</parameter>
-<parameter name="name" type="byte[]">
-</parameter>
-<parameter name="nameOffset" type="int">
-</parameter>
-</method>
-<method name="glGetActiveUniform"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="index" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="size" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="type" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="name" type="byte">
-</parameter>
-</method>
-<method name="glGetAttachedShaders"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="maxcount" type="int">
-</parameter>
-<parameter name="count" type="int[]">
-</parameter>
-<parameter name="countOffset" type="int">
-</parameter>
-<parameter name="shaders" type="int[]">
-</parameter>
-<parameter name="shadersOffset" type="int">
-</parameter>
-</method>
-<method name="glGetAttachedShaders"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="maxcount" type="int">
-</parameter>
-<parameter name="count" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="shaders" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetAttribLocation"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="name" type="java.lang.String">
-</parameter>
-</method>
-<method name="glGetBooleanv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="boolean[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetBooleanv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetBufferParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetBufferParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetError"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="glGetFloatv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetFloatv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glGetFramebufferAttachmentParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="attachment" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetFramebufferAttachmentParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="attachment" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetIntegerv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetIntegerv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetProgramInfoLog"
- return="java.lang.String"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glGetProgramiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetProgramiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetRenderbufferParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetRenderbufferParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetShaderInfoLog"
- return="java.lang.String"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glGetShaderPrecisionFormat"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shadertype" type="int">
-</parameter>
-<parameter name="precisiontype" type="int">
-</parameter>
-<parameter name="range" type="int[]">
-</parameter>
-<parameter name="rangeOffset" type="int">
-</parameter>
-<parameter name="precision" type="int[]">
-</parameter>
-<parameter name="precisionOffset" type="int">
-</parameter>
-</method>
-<method name="glGetShaderPrecisionFormat"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shadertype" type="int">
-</parameter>
-<parameter name="precisiontype" type="int">
-</parameter>
-<parameter name="range" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="precision" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetShaderSource"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="int[]">
-</parameter>
-<parameter name="lengthOffset" type="int">
-</parameter>
-<parameter name="source" type="byte[]">
-</parameter>
-<parameter name="sourceOffset" type="int">
-</parameter>
-</method>
-<method name="glGetShaderSource"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-<parameter name="bufsize" type="int">
-</parameter>
-<parameter name="length" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="source" type="byte">
-</parameter>
-</method>
-<method name="glGetShaderiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetShaderiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetString"
- return="java.lang.String"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="name" type="int">
-</parameter>
-</method>
-<method name="glGetTexParameterfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetTexParameterfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glGetTexParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetTexParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetUniformLocation"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="name" type="java.lang.String">
-</parameter>
-</method>
-<method name="glGetUniformfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="location" type="int">
-</parameter>
-<parameter name="params" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetUniformfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="location" type="int">
-</parameter>
-<parameter name="params" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glGetUniformiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="location" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetUniformiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-<parameter name="location" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glGetVertexAttribfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetVertexAttribfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glGetVertexAttribiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glGetVertexAttribiv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glHint"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="mode" type="int">
-</parameter>
-</method>
-<method name="glIsBuffer"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="buffer" type="int">
-</parameter>
-</method>
-<method name="glIsEnabled"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="cap" type="int">
-</parameter>
-</method>
-<method name="glIsFramebuffer"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="framebuffer" type="int">
-</parameter>
-</method>
-<method name="glIsProgram"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glIsRenderbuffer"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="renderbuffer" type="int">
-</parameter>
-</method>
-<method name="glIsShader"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-</method>
-<method name="glIsTexture"
- return="boolean"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="texture" type="int">
-</parameter>
-</method>
-<method name="glLineWidth"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="width" type="float">
-</parameter>
-</method>
-<method name="glLinkProgram"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glPixelStorei"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="param" type="int">
-</parameter>
-</method>
-<method name="glPolygonOffset"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="factor" type="float">
-</parameter>
-<parameter name="units" type="float">
-</parameter>
-</method>
-<method name="glReadPixels"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="format" type="int">
-</parameter>
-<parameter name="type" type="int">
-</parameter>
-<parameter name="pixels" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glReleaseShaderCompiler"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="glRenderbufferStorage"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="internalformat" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-</method>
-<method name="glSampleCoverage"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="value" type="float">
-</parameter>
-<parameter name="invert" type="boolean">
-</parameter>
-</method>
-<method name="glScissor"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-</method>
-<method name="glShaderBinary"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="shaders" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-<parameter name="binaryformat" type="int">
-</parameter>
-<parameter name="binary" type="java.nio.Buffer">
-</parameter>
-<parameter name="length" type="int">
-</parameter>
-</method>
-<method name="glShaderBinary"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="n" type="int">
-</parameter>
-<parameter name="shaders" type="java.nio.IntBuffer">
-</parameter>
-<parameter name="binaryformat" type="int">
-</parameter>
-<parameter name="binary" type="java.nio.Buffer">
-</parameter>
-<parameter name="length" type="int">
-</parameter>
-</method>
-<method name="glShaderSource"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="shader" type="int">
-</parameter>
-<parameter name="string" type="java.lang.String">
-</parameter>
-</method>
-<method name="glStencilFunc"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="func" type="int">
-</parameter>
-<parameter name="ref" type="int">
-</parameter>
-<parameter name="mask" type="int">
-</parameter>
-</method>
-<method name="glStencilFuncSeparate"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="face" type="int">
-</parameter>
-<parameter name="func" type="int">
-</parameter>
-<parameter name="ref" type="int">
-</parameter>
-<parameter name="mask" type="int">
-</parameter>
-</method>
-<method name="glStencilMask"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mask" type="int">
-</parameter>
-</method>
-<method name="glStencilMaskSeparate"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="face" type="int">
-</parameter>
-<parameter name="mask" type="int">
-</parameter>
-</method>
-<method name="glStencilOp"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fail" type="int">
-</parameter>
-<parameter name="zfail" type="int">
-</parameter>
-<parameter name="zpass" type="int">
-</parameter>
-</method>
-<method name="glStencilOpSeparate"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="face" type="int">
-</parameter>
-<parameter name="fail" type="int">
-</parameter>
-<parameter name="zfail" type="int">
-</parameter>
-<parameter name="zpass" type="int">
-</parameter>
-</method>
-<method name="glTexImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="internalformat" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="border" type="int">
-</parameter>
-<parameter name="format" type="int">
-</parameter>
-<parameter name="type" type="int">
-</parameter>
-<parameter name="pixels" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glTexParameterf"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="param" type="float">
-</parameter>
-</method>
-<method name="glTexParameterfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glTexParameterfv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glTexParameteri"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="param" type="int">
-</parameter>
-</method>
-<method name="glTexParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glTexParameteriv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="pname" type="int">
-</parameter>
-<parameter name="params" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glTexSubImage2D"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="target" type="int">
-</parameter>
-<parameter name="level" type="int">
-</parameter>
-<parameter name="xoffset" type="int">
-</parameter>
-<parameter name="yoffset" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-<parameter name="format" type="int">
-</parameter>
-<parameter name="type" type="int">
-</parameter>
-<parameter name="pixels" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glUniform1f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-</method>
-<method name="glUniform1fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform1fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniform1i"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-</method>
-<method name="glUniform1iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform1iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glUniform2f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-</method>
-<method name="glUniform2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniform2i"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-</method>
-<method name="glUniform2iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform2iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glUniform3f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-<parameter name="z" type="float">
-</parameter>
-</method>
-<method name="glUniform3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniform3i"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="z" type="int">
-</parameter>
-</method>
-<method name="glUniform3iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform3iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glUniform4f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-<parameter name="z" type="float">
-</parameter>
-<parameter name="w" type="float">
-</parameter>
-</method>
-<method name="glUniform4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniform4i"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="z" type="int">
-</parameter>
-<parameter name="w" type="int">
-</parameter>
-</method>
-<method name="glUniform4iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="int[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniform4iv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="v" type="java.nio.IntBuffer">
-</parameter>
-</method>
-<method name="glUniformMatrix2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniformMatrix2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniformMatrix3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniformMatrix3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUniformMatrix4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glUniformMatrix4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="location" type="int">
-</parameter>
-<parameter name="count" type="int">
-</parameter>
-<parameter name="transpose" type="boolean">
-</parameter>
-<parameter name="value" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glUseProgram"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glValidateProgram"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="program" type="int">
-</parameter>
-</method>
-<method name="glVertexAttrib1f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-</method>
-<method name="glVertexAttrib1fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glVertexAttrib1fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glVertexAttrib2f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-</method>
-<method name="glVertexAttrib2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glVertexAttrib2fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glVertexAttrib3f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-<parameter name="z" type="float">
-</parameter>
-</method>
-<method name="glVertexAttrib3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glVertexAttrib3fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glVertexAttrib4f"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="x" type="float">
-</parameter>
-<parameter name="y" type="float">
-</parameter>
-<parameter name="z" type="float">
-</parameter>
-<parameter name="w" type="float">
-</parameter>
-</method>
-<method name="glVertexAttrib4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="float[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-</method>
-<method name="glVertexAttrib4fv"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="values" type="java.nio.FloatBuffer">
-</parameter>
-</method>
-<method name="glVertexAttribPointer"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="indx" type="int">
-</parameter>
-<parameter name="size" type="int">
-</parameter>
-<parameter name="type" type="int">
-</parameter>
-<parameter name="normalized" type="boolean">
-</parameter>
-<parameter name="stride" type="int">
-</parameter>
-<parameter name="ptr" type="java.nio.Buffer">
-</parameter>
-</method>
-<method name="glViewport"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="x" type="int">
-</parameter>
-<parameter name="y" type="int">
-</parameter>
-<parameter name="width" type="int">
-</parameter>
-<parameter name="height" type="int">
-</parameter>
-</method>
-<field name="GL_ACTIVE_ATTRIBUTES"
- type="int"
- transient="false"
- volatile="false"
- value="35721"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ACTIVE_ATTRIBUTE_MAX_LENGTH"
- type="int"
- transient="false"
- volatile="false"
- value="35722"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ACTIVE_TEXTURE"
- type="int"
- transient="false"
- volatile="false"
- value="34016"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ACTIVE_UNIFORMS"
- type="int"
- transient="false"
- volatile="false"
- value="35718"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ACTIVE_UNIFORM_MAX_LENGTH"
- type="int"
- transient="false"
- volatile="false"
- value="35719"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ALIASED_LINE_WIDTH_RANGE"
- type="int"
- transient="false"
- volatile="false"
- value="33902"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ALIASED_POINT_SIZE_RANGE"
- type="int"
- transient="false"
- volatile="false"
- value="33901"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="6406"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ALPHA_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3413"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ALWAYS"
- type="int"
- transient="false"
- volatile="false"
- value="519"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ARRAY_BUFFER"
- type="int"
- transient="false"
- volatile="false"
- value="34962"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ARRAY_BUFFER_BINDING"
- type="int"
- transient="false"
- volatile="false"
- value="34964"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ATTACHED_SHADERS"
- type="int"
- transient="false"
- volatile="false"
- value="35717"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BACK"
- type="int"
- transient="false"
- volatile="false"
- value="1029"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND"
- type="int"
- transient="false"
- volatile="false"
- value="3042"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="32773"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_DST_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="32970"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_DST_RGB"
- type="int"
- transient="false"
- volatile="false"
- value="32968"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_EQUATION"
- type="int"
- transient="false"
- volatile="false"
- value="32777"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_EQUATION_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="34877"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_EQUATION_RGB"
- type="int"
- transient="false"
- volatile="false"
- value="32777"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_SRC_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="32971"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLEND_SRC_RGB"
- type="int"
- transient="false"
- volatile="false"
- value="32969"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BLUE_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3412"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BOOL"
- type="int"
- transient="false"
- volatile="false"
- value="35670"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BOOL_VEC2"
- type="int"
- transient="false"
- volatile="false"
- value="35671"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BOOL_VEC3"
- type="int"
- transient="false"
- volatile="false"
- value="35672"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BOOL_VEC4"
- type="int"
- transient="false"
- volatile="false"
- value="35673"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BUFFER_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="34660"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BUFFER_USAGE"
- type="int"
- transient="false"
- volatile="false"
- value="34661"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_BYTE"
- type="int"
- transient="false"
- volatile="false"
- value="5120"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CCW"
- type="int"
- transient="false"
- volatile="false"
- value="2305"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CLAMP_TO_EDGE"
- type="int"
- transient="false"
- volatile="false"
- value="33071"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COLOR_ATTACHMENT0"
- type="int"
- transient="false"
- volatile="false"
- value="36064"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COLOR_BUFFER_BIT"
- type="int"
- transient="false"
- volatile="false"
- value="16384"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COLOR_CLEAR_VALUE"
- type="int"
- transient="false"
- volatile="false"
- value="3106"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COLOR_WRITEMASK"
- type="int"
- transient="false"
- volatile="false"
- value="3107"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COMPILE_STATUS"
- type="int"
- transient="false"
- volatile="false"
- value="35713"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_COMPRESSED_TEXTURE_FORMATS"
- type="int"
- transient="false"
- volatile="false"
- value="34467"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CONSTANT_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="32771"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CONSTANT_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="32769"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CULL_FACE"
- type="int"
- transient="false"
- volatile="false"
- value="2884"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CULL_FACE_MODE"
- type="int"
- transient="false"
- volatile="false"
- value="2885"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CURRENT_PROGRAM"
- type="int"
- transient="false"
- volatile="false"
- value="35725"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CURRENT_VERTEX_ATTRIB"
- type="int"
- transient="false"
- volatile="false"
- value="34342"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_CW"
- type="int"
- transient="false"
- volatile="false"
- value="2304"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DECR"
- type="int"
- transient="false"
- volatile="false"
- value="7683"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DECR_WRAP"
- type="int"
- transient="false"
- volatile="false"
- value="34056"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DELETE_STATUS"
- type="int"
- transient="false"
- volatile="false"
- value="35712"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_ATTACHMENT"
- type="int"
- transient="false"
- volatile="false"
- value="36096"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3414"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_BUFFER_BIT"
- type="int"
- transient="false"
- volatile="false"
- value="256"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_CLEAR_VALUE"
- type="int"
- transient="false"
- volatile="false"
- value="2931"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_COMPONENT"
- type="int"
- transient="false"
- volatile="false"
- value="6402"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_COMPONENT16"
- type="int"
- transient="false"
- volatile="false"
- value="33189"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_FUNC"
- type="int"
- transient="false"
- volatile="false"
- value="2932"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_RANGE"
- type="int"
- transient="false"
- volatile="false"
- value="2928"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_TEST"
- type="int"
- transient="false"
- volatile="false"
- value="2929"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DEPTH_WRITEMASK"
- type="int"
- transient="false"
- volatile="false"
- value="2930"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DITHER"
- type="int"
- transient="false"
- volatile="false"
- value="3024"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DONT_CARE"
- type="int"
- transient="false"
- volatile="false"
- value="4352"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DST_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="772"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DST_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="774"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_DYNAMIC_DRAW"
- type="int"
- transient="false"
- volatile="false"
- value="35048"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ELEMENT_ARRAY_BUFFER"
- type="int"
- transient="false"
- volatile="false"
- value="34963"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"
- type="int"
- transient="false"
- volatile="false"
- value="34965"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_EQUAL"
- type="int"
- transient="false"
- volatile="false"
- value="514"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_EXTENSIONS"
- type="int"
- transient="false"
- volatile="false"
- value="7939"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FALSE"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FASTEST"
- type="int"
- transient="false"
- volatile="false"
- value="4353"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FIXED"
- type="int"
- transient="false"
- volatile="false"
- value="5132"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT"
- type="int"
- transient="false"
- volatile="false"
- value="5126"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_MAT2"
- type="int"
- transient="false"
- volatile="false"
- value="35674"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_MAT3"
- type="int"
- transient="false"
- volatile="false"
- value="35675"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_MAT4"
- type="int"
- transient="false"
- volatile="false"
- value="35676"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_VEC2"
- type="int"
- transient="false"
- volatile="false"
- value="35664"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_VEC3"
- type="int"
- transient="false"
- volatile="false"
- value="35665"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FLOAT_VEC4"
- type="int"
- transient="false"
- volatile="false"
- value="35666"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAGMENT_SHADER"
- type="int"
- transient="false"
- volatile="false"
- value="35632"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER"
- type="int"
- transient="false"
- volatile="false"
- value="36160"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"
- type="int"
- transient="false"
- volatile="false"
- value="36049"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"
- type="int"
- transient="false"
- volatile="false"
- value="36048"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"
- type="int"
- transient="false"
- volatile="false"
- value="36051"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"
- type="int"
- transient="false"
- volatile="false"
- value="36050"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_BINDING"
- type="int"
- transient="false"
- volatile="false"
- value="36006"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_COMPLETE"
- type="int"
- transient="false"
- volatile="false"
- value="36053"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
- type="int"
- transient="false"
- volatile="false"
- value="36054"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS"
- type="int"
- transient="false"
- volatile="false"
- value="36057"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"
- type="int"
- transient="false"
- volatile="false"
- value="36055"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRAMEBUFFER_UNSUPPORTED"
- type="int"
- transient="false"
- volatile="false"
- value="36061"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRONT"
- type="int"
- transient="false"
- volatile="false"
- value="1028"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRONT_AND_BACK"
- type="int"
- transient="false"
- volatile="false"
- value="1032"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FRONT_FACE"
- type="int"
- transient="false"
- volatile="false"
- value="2886"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FUNC_ADD"
- type="int"
- transient="false"
- volatile="false"
- value="32774"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FUNC_REVERSE_SUBTRACT"
- type="int"
- transient="false"
- volatile="false"
- value="32779"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_FUNC_SUBTRACT"
- type="int"
- transient="false"
- volatile="false"
- value="32778"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_GENERATE_MIPMAP_HINT"
- type="int"
- transient="false"
- volatile="false"
- value="33170"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_GEQUAL"
- type="int"
- transient="false"
- volatile="false"
- value="518"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_GREATER"
- type="int"
- transient="false"
- volatile="false"
- value="516"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_GREEN_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3411"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_HIGH_FLOAT"
- type="int"
- transient="false"
- volatile="false"
- value="36338"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_HIGH_INT"
- type="int"
- transient="false"
- volatile="false"
- value="36341"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT"
- type="int"
- transient="false"
- volatile="false"
- value="35739"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE"
- type="int"
- transient="false"
- volatile="false"
- value="35738"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INCR"
- type="int"
- transient="false"
- volatile="false"
- value="7682"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INCR_WRAP"
- type="int"
- transient="false"
- volatile="false"
- value="34055"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INFO_LOG_LENGTH"
- type="int"
- transient="false"
- volatile="false"
- value="35716"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INT"
- type="int"
- transient="false"
- volatile="false"
- value="5124"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INT_VEC2"
- type="int"
- transient="false"
- volatile="false"
- value="35667"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INT_VEC3"
- type="int"
- transient="false"
- volatile="false"
- value="35668"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INT_VEC4"
- type="int"
- transient="false"
- volatile="false"
- value="35669"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INVALID_ENUM"
- type="int"
- transient="false"
- volatile="false"
- value="1280"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INVALID_FRAMEBUFFER_OPERATION"
- type="int"
- transient="false"
- volatile="false"
- value="1286"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INVALID_OPERATION"
- type="int"
- transient="false"
- volatile="false"
- value="1282"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INVALID_VALUE"
- type="int"
- transient="false"
- volatile="false"
- value="1281"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_INVERT"
- type="int"
- transient="false"
- volatile="false"
- value="5386"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_KEEP"
- type="int"
- transient="false"
- volatile="false"
- value="7680"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LEQUAL"
- type="int"
- transient="false"
- volatile="false"
- value="515"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LESS"
- type="int"
- transient="false"
- volatile="false"
- value="513"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINEAR"
- type="int"
- transient="false"
- volatile="false"
- value="9729"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINEAR_MIPMAP_LINEAR"
- type="int"
- transient="false"
- volatile="false"
- value="9987"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINEAR_MIPMAP_NEAREST"
- type="int"
- transient="false"
- volatile="false"
- value="9985"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINES"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINE_LOOP"
- type="int"
- transient="false"
- volatile="false"
- value="2"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINE_STRIP"
- type="int"
- transient="false"
- volatile="false"
- value="3"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINE_WIDTH"
- type="int"
- transient="false"
- volatile="false"
- value="2849"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LINK_STATUS"
- type="int"
- transient="false"
- volatile="false"
- value="35714"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LOW_FLOAT"
- type="int"
- transient="false"
- volatile="false"
- value="36336"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LOW_INT"
- type="int"
- transient="false"
- volatile="false"
- value="36339"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LUMINANCE"
- type="int"
- transient="false"
- volatile="false"
- value="6409"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_LUMINANCE_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="6410"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"
- type="int"
- transient="false"
- volatile="false"
- value="35661"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="34076"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_FRAGMENT_UNIFORM_VECTORS"
- type="int"
- transient="false"
- volatile="false"
- value="36349"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_RENDERBUFFER_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="34024"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_TEXTURE_IMAGE_UNITS"
- type="int"
- transient="false"
- volatile="false"
- value="34930"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_TEXTURE_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="3379"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_VARYING_VECTORS"
- type="int"
- transient="false"
- volatile="false"
- value="36348"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_VERTEX_ATTRIBS"
- type="int"
- transient="false"
- volatile="false"
- value="34921"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"
- type="int"
- transient="false"
- volatile="false"
- value="35660"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_VERTEX_UNIFORM_VECTORS"
- type="int"
- transient="false"
- volatile="false"
- value="36347"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MAX_VIEWPORT_DIMS"
- type="int"
- transient="false"
- volatile="false"
- value="3386"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MEDIUM_FLOAT"
- type="int"
- transient="false"
- volatile="false"
- value="36337"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MEDIUM_INT"
- type="int"
- transient="false"
- volatile="false"
- value="36340"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_MIRRORED_REPEAT"
- type="int"
- transient="false"
- volatile="false"
- value="33648"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NEAREST"
- type="int"
- transient="false"
- volatile="false"
- value="9728"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NEAREST_MIPMAP_LINEAR"
- type="int"
- transient="false"
- volatile="false"
- value="9986"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NEAREST_MIPMAP_NEAREST"
- type="int"
- transient="false"
- volatile="false"
- value="9984"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NEVER"
- type="int"
- transient="false"
- volatile="false"
- value="512"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NICEST"
- type="int"
- transient="false"
- volatile="false"
- value="4354"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NONE"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NOTEQUAL"
- type="int"
- transient="false"
- volatile="false"
- value="517"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NO_ERROR"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"
- type="int"
- transient="false"
- volatile="false"
- value="34466"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_NUM_SHADER_BINARY_FORMATS"
- type="int"
- transient="false"
- volatile="false"
- value="36345"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_CONSTANT_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="32772"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_CONSTANT_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="32770"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_DST_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="773"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_DST_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="775"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_SRC_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="771"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ONE_MINUS_SRC_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="769"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_OUT_OF_MEMORY"
- type="int"
- transient="false"
- volatile="false"
- value="1285"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_PACK_ALIGNMENT"
- type="int"
- transient="false"
- volatile="false"
- value="3333"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_POINTS"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_POLYGON_OFFSET_FACTOR"
- type="int"
- transient="false"
- volatile="false"
- value="32824"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_POLYGON_OFFSET_FILL"
- type="int"
- transient="false"
- volatile="false"
- value="32823"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_POLYGON_OFFSET_UNITS"
- type="int"
- transient="false"
- volatile="false"
- value="10752"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RED_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3410"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER"
- type="int"
- transient="false"
- volatile="false"
- value="36161"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_ALPHA_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36179"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_BINDING"
- type="int"
- transient="false"
- volatile="false"
- value="36007"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_BLUE_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36178"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_DEPTH_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36180"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_GREEN_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36177"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_HEIGHT"
- type="int"
- transient="false"
- volatile="false"
- value="36163"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_INTERNAL_FORMAT"
- type="int"
- transient="false"
- volatile="false"
- value="36164"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_RED_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36176"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_STENCIL_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="36181"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERBUFFER_WIDTH"
- type="int"
- transient="false"
- volatile="false"
- value="36162"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RENDERER"
- type="int"
- transient="false"
- volatile="false"
- value="7937"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_REPEAT"
- type="int"
- transient="false"
- volatile="false"
- value="10497"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_REPLACE"
- type="int"
- transient="false"
- volatile="false"
- value="7681"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RGB"
- type="int"
- transient="false"
- volatile="false"
- value="6407"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RGB565"
- type="int"
- transient="false"
- volatile="false"
- value="36194"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RGB5_A1"
- type="int"
- transient="false"
- volatile="false"
- value="32855"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RGBA"
- type="int"
- transient="false"
- volatile="false"
- value="6408"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_RGBA4"
- type="int"
- transient="false"
- volatile="false"
- value="32854"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLER_2D"
- type="int"
- transient="false"
- volatile="false"
- value="35678"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLER_CUBE"
- type="int"
- transient="false"
- volatile="false"
- value="35680"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLES"
- type="int"
- transient="false"
- volatile="false"
- value="32937"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"
- type="int"
- transient="false"
- volatile="false"
- value="32926"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLE_BUFFERS"
- type="int"
- transient="false"
- volatile="false"
- value="32936"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLE_COVERAGE"
- type="int"
- transient="false"
- volatile="false"
- value="32928"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLE_COVERAGE_INVERT"
- type="int"
- transient="false"
- volatile="false"
- value="32939"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SAMPLE_COVERAGE_VALUE"
- type="int"
- transient="false"
- volatile="false"
- value="32938"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SCISSOR_BOX"
- type="int"
- transient="false"
- volatile="false"
- value="3088"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SCISSOR_TEST"
- type="int"
- transient="false"
- volatile="false"
- value="3089"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHADER_BINARY_FORMATS"
- type="int"
- transient="false"
- volatile="false"
- value="36344"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHADER_COMPILER"
- type="int"
- transient="false"
- volatile="false"
- value="36346"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHADER_SOURCE_LENGTH"
- type="int"
- transient="false"
- volatile="false"
- value="35720"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHADER_TYPE"
- type="int"
- transient="false"
- volatile="false"
- value="35663"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHADING_LANGUAGE_VERSION"
- type="int"
- transient="false"
- volatile="false"
- value="35724"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SHORT"
- type="int"
- transient="false"
- volatile="false"
- value="5122"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SRC_ALPHA"
- type="int"
- transient="false"
- volatile="false"
- value="770"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SRC_ALPHA_SATURATE"
- type="int"
- transient="false"
- volatile="false"
- value="776"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SRC_COLOR"
- type="int"
- transient="false"
- volatile="false"
- value="768"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STATIC_DRAW"
- type="int"
- transient="false"
- volatile="false"
- value="35044"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_ATTACHMENT"
- type="int"
- transient="false"
- volatile="false"
- value="36128"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_FAIL"
- type="int"
- transient="false"
- volatile="false"
- value="34817"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_FUNC"
- type="int"
- transient="false"
- volatile="false"
- value="34816"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_PASS_DEPTH_FAIL"
- type="int"
- transient="false"
- volatile="false"
- value="34818"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_PASS_DEPTH_PASS"
- type="int"
- transient="false"
- volatile="false"
- value="34819"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_REF"
- type="int"
- transient="false"
- volatile="false"
- value="36003"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_VALUE_MASK"
- type="int"
- transient="false"
- volatile="false"
- value="36004"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BACK_WRITEMASK"
- type="int"
- transient="false"
- volatile="false"
- value="36005"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3415"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_BUFFER_BIT"
- type="int"
- transient="false"
- volatile="false"
- value="1024"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_CLEAR_VALUE"
- type="int"
- transient="false"
- volatile="false"
- value="2961"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_FAIL"
- type="int"
- transient="false"
- volatile="false"
- value="2964"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_FUNC"
- type="int"
- transient="false"
- volatile="false"
- value="2962"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_INDEX"
- type="int"
- transient="false"
- volatile="false"
- value="6401"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_INDEX8"
- type="int"
- transient="false"
- volatile="false"
- value="36168"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_PASS_DEPTH_FAIL"
- type="int"
- transient="false"
- volatile="false"
- value="2965"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_PASS_DEPTH_PASS"
- type="int"
- transient="false"
- volatile="false"
- value="2966"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_REF"
- type="int"
- transient="false"
- volatile="false"
- value="2967"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_TEST"
- type="int"
- transient="false"
- volatile="false"
- value="2960"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_VALUE_MASK"
- type="int"
- transient="false"
- volatile="false"
- value="2963"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STENCIL_WRITEMASK"
- type="int"
- transient="false"
- volatile="false"
- value="2968"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_STREAM_DRAW"
- type="int"
- transient="false"
- volatile="false"
- value="35040"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_SUBPIXEL_BITS"
- type="int"
- transient="false"
- volatile="false"
- value="3408"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE"
- type="int"
- transient="false"
- volatile="false"
- value="5890"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE0"
- type="int"
- transient="false"
- volatile="false"
- value="33984"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE1"
- type="int"
- transient="false"
- volatile="false"
- value="33985"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE10"
- type="int"
- transient="false"
- volatile="false"
- value="33994"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE11"
- type="int"
- transient="false"
- volatile="false"
- value="33995"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE12"
- type="int"
- transient="false"
- volatile="false"
- value="33996"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE13"
- type="int"
- transient="false"
- volatile="false"
- value="33997"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE14"
- type="int"
- transient="false"
- volatile="false"
- value="33998"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE15"
- type="int"
- transient="false"
- volatile="false"
- value="33999"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE16"
- type="int"
- transient="false"
- volatile="false"
- value="34000"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE17"
- type="int"
- transient="false"
- volatile="false"
- value="34001"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE18"
- type="int"
- transient="false"
- volatile="false"
- value="34002"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE19"
- type="int"
- transient="false"
- volatile="false"
- value="34003"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE2"
- type="int"
- transient="false"
- volatile="false"
- value="33986"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE20"
- type="int"
- transient="false"
- volatile="false"
- value="34004"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE21"
- type="int"
- transient="false"
- volatile="false"
- value="34005"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE22"
- type="int"
- transient="false"
- volatile="false"
- value="34006"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE23"
- type="int"
- transient="false"
- volatile="false"
- value="34007"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE24"
- type="int"
- transient="false"
- volatile="false"
- value="34008"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE25"
- type="int"
- transient="false"
- volatile="false"
- value="34009"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE26"
- type="int"
- transient="false"
- volatile="false"
- value="34010"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE27"
- type="int"
- transient="false"
- volatile="false"
- value="34011"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE28"
- type="int"
- transient="false"
- volatile="false"
- value="34012"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE29"
- type="int"
- transient="false"
- volatile="false"
- value="34013"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE3"
- type="int"
- transient="false"
- volatile="false"
- value="33987"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE30"
- type="int"
- transient="false"
- volatile="false"
- value="34014"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE31"
- type="int"
- transient="false"
- volatile="false"
- value="34015"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE4"
- type="int"
- transient="false"
- volatile="false"
- value="33988"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE5"
- type="int"
- transient="false"
- volatile="false"
- value="33989"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE6"
- type="int"
- transient="false"
- volatile="false"
- value="33990"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE7"
- type="int"
- transient="false"
- volatile="false"
- value="33991"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE8"
- type="int"
- transient="false"
- volatile="false"
- value="33992"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE9"
- type="int"
- transient="false"
- volatile="false"
- value="33993"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_2D"
- type="int"
- transient="false"
- volatile="false"
- value="3553"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_BINDING_2D"
- type="int"
- transient="false"
- volatile="false"
- value="32873"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_BINDING_CUBE_MAP"
- type="int"
- transient="false"
- volatile="false"
- value="34068"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP"
- type="int"
- transient="false"
- volatile="false"
- value="34067"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"
- type="int"
- transient="false"
- volatile="false"
- value="34070"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"
- type="int"
- transient="false"
- volatile="false"
- value="34072"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"
- type="int"
- transient="false"
- volatile="false"
- value="34074"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X"
- type="int"
- transient="false"
- volatile="false"
- value="34069"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"
- type="int"
- transient="false"
- volatile="false"
- value="34071"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"
- type="int"
- transient="false"
- volatile="false"
- value="34073"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_MAG_FILTER"
- type="int"
- transient="false"
- volatile="false"
- value="10240"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_MIN_FILTER"
- type="int"
- transient="false"
- volatile="false"
- value="10241"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_WRAP_S"
- type="int"
- transient="false"
- volatile="false"
- value="10242"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TEXTURE_WRAP_T"
- type="int"
- transient="false"
- volatile="false"
- value="10243"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TRIANGLES"
- type="int"
- transient="false"
- volatile="false"
- value="4"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TRIANGLE_FAN"
- type="int"
- transient="false"
- volatile="false"
- value="6"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TRIANGLE_STRIP"
- type="int"
- transient="false"
- volatile="false"
- value="5"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_TRUE"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNPACK_ALIGNMENT"
- type="int"
- transient="false"
- volatile="false"
- value="3317"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_BYTE"
- type="int"
- transient="false"
- volatile="false"
- value="5121"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_INT"
- type="int"
- transient="false"
- volatile="false"
- value="5125"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_SHORT"
- type="int"
- transient="false"
- volatile="false"
- value="5123"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_SHORT_4_4_4_4"
- type="int"
- transient="false"
- volatile="false"
- value="32819"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_SHORT_5_5_5_1"
- type="int"
- transient="false"
- volatile="false"
- value="32820"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_UNSIGNED_SHORT_5_6_5"
- type="int"
- transient="false"
- volatile="false"
- value="33635"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VALIDATE_STATUS"
- type="int"
- transient="false"
- volatile="false"
- value="35715"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VENDOR"
- type="int"
- transient="false"
- volatile="false"
- value="7936"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERSION"
- type="int"
- transient="false"
- volatile="false"
- value="7938"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"
- type="int"
- transient="false"
- volatile="false"
- value="34975"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_ENABLED"
- type="int"
- transient="false"
- volatile="false"
- value="34338"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"
- type="int"
- transient="false"
- volatile="false"
- value="34922"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_POINTER"
- type="int"
- transient="false"
- volatile="false"
- value="34373"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_SIZE"
- type="int"
- transient="false"
- volatile="false"
- value="34339"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_STRIDE"
- type="int"
- transient="false"
- volatile="false"
- value="34340"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_ATTRIB_ARRAY_TYPE"
- type="int"
- transient="false"
- volatile="false"
- value="34341"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VERTEX_SHADER"
- type="int"
- transient="false"
- volatile="false"
- value="35633"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_VIEWPORT"
- type="int"
- transient="false"
- volatile="false"
- value="2978"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="GL_ZERO"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
<class name="GLException"
extends="java.lang.RuntimeException"
abstract="false"
@@ -234351,7 +227814,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="value" type="int">
+<parameter name="i" type="int">
</parameter>
</method>
<method name="toString"
@@ -234600,7 +228063,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="compareTo"
@@ -234706,7 +228169,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="intValue"
@@ -234741,7 +228204,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="numberOfLeadingZeros"
@@ -234754,7 +228217,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="numberOfTrailingZeros"
@@ -234767,7 +228230,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="parseLong"
@@ -234812,7 +228275,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="reverseBytes"
@@ -234825,7 +228288,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="rotateLeft"
@@ -234838,7 +228301,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
<parameter name="distance" type="int">
</parameter>
@@ -234853,7 +228316,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
<parameter name="distance" type="int">
</parameter>
@@ -234868,7 +228331,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="toBinaryString"
@@ -234881,7 +228344,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="l" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="toHexString"
@@ -234894,7 +228357,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="l" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="toOctalString"
@@ -234907,7 +228370,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="l" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<method name="toString"
@@ -234920,7 +228383,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="l" type="long">
+<parameter name="n" type="long">
</parameter>
</method>
<method name="toString"
@@ -234933,7 +228396,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="l" type="long">
+<parameter name="v" type="long">
</parameter>
<parameter name="radix" type="int">
</parameter>
@@ -234980,7 +228443,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="lng" type="long">
+<parameter name="v" type="long">
</parameter>
</method>
<field name="MAX_VALUE"
@@ -252449,7 +245912,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="o" type="java.lang.Object">
+<parameter name="other" type="java.lang.Object">
</parameter>
</method>
<method name="getActions"
@@ -292825,7 +286288,7 @@
>
<parameter name="array" type="java.lang.Object[]">
</parameter>
-<parameter name="object" type="java.lang.Object">
+<parameter name="value" type="java.lang.Object">
</parameter>
</method>
<method name="binarySearch"
@@ -292840,7 +286303,7 @@
>
<parameter name="array" type="T[]">
</parameter>
-<parameter name="object" type="T">
+<parameter name="value" type="T">
</parameter>
<parameter name="comparator" type="java.util.Comparator<? super T>">
</parameter>
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp
index 945a690..fdc5d5d 100644
--- a/cmds/dumpsys/dumpsys.cpp
+++ b/cmds/dumpsys/dumpsys.cpp
@@ -51,22 +51,26 @@
const size_t N = services.size();
- // first print a list of the current services
- aout << "Currently running services:" << endl;
-
- for (size_t i=0; i<N; i++) {
- sp<IBinder> service = sm->checkService(services[i]);
- if (service != NULL) {
- aout << " " << services[i] << endl;
+ if (N > 1) {
+ // first print a list of the current services
+ aout << "Currently running services:" << endl;
+
+ for (size_t i=0; i<N; i++) {
+ sp<IBinder> service = sm->checkService(services[i]);
+ if (service != NULL) {
+ aout << " " << services[i] << endl;
+ }
}
}
for (size_t i=0; i<N; i++) {
sp<IBinder> service = sm->checkService(services[i]);
if (service != NULL) {
- aout << "------------------------------------------------------------"
- "-------------------" << endl;
- aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
+ if (N > 1) {
+ aout << "------------------------------------------------------------"
+ "-------------------" << endl;
+ aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
+ }
int err = service->dump(STDOUT_FILENO, args);
if (err != 0) {
aerr << "Error dumping service info: (" << strerror(err)
diff --git a/common/java/com/android/common/ArrayListCursor.java b/common/java/com/android/common/ArrayListCursor.java
new file mode 100644
index 0000000..cc1fe27
--- /dev/null
+++ b/common/java/com/android/common/ArrayListCursor.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.common;
+
+import android.database.AbstractCursor;
+import android.database.CursorWindow;
+
+import java.lang.System;
+import java.util.ArrayList;
+
+/**
+ * A convenience class that presents a two-dimensional ArrayList
+ * as a Cursor.
+ * @deprecated This is has been replaced by MatrixCursor.
+*/
+public class ArrayListCursor extends AbstractCursor {
+ private String[] mColumnNames;
+ private ArrayList<Object>[] mRows;
+
+ @SuppressWarnings({"unchecked"})
+ public ArrayListCursor(String[] columnNames, ArrayList<ArrayList> rows) {
+ int colCount = columnNames.length;
+ boolean foundID = false;
+ // Add an _id column if not in columnNames
+ for (int i = 0; i < colCount; ++i) {
+ if (columnNames[i].compareToIgnoreCase("_id") == 0) {
+ mColumnNames = columnNames;
+ foundID = true;
+ break;
+ }
+ }
+
+ if (!foundID) {
+ mColumnNames = new String[colCount + 1];
+ System.arraycopy(columnNames, 0, mColumnNames, 0, columnNames.length);
+ mColumnNames[colCount] = "_id";
+ }
+
+ int rowCount = rows.size();
+ mRows = new ArrayList[rowCount];
+
+ for (int i = 0; i < rowCount; ++i) {
+ mRows[i] = rows.get(i);
+ if (!foundID) {
+ mRows[i].add(i);
+ }
+ }
+ }
+
+ @Override
+ public void fillWindow(int position, CursorWindow window) {
+ if (position < 0 || position > getCount()) {
+ return;
+ }
+
+ window.acquireReference();
+ try {
+ int oldpos = mPos;
+ mPos = position - 1;
+ window.clear();
+ window.setStartPosition(position);
+ int columnNum = getColumnCount();
+ window.setNumColumns(columnNum);
+ while (moveToNext() && window.allocRow()) {
+ for (int i = 0; i < columnNum; i++) {
+ final Object data = mRows[mPos].get(i);
+ if (data != null) {
+ if (data instanceof byte[]) {
+ byte[] field = (byte[]) data;
+ if (!window.putBlob(field, mPos, i)) {
+ window.freeLastRow();
+ break;
+ }
+ } else {
+ String field = data.toString();
+ if (!window.putString(field, mPos, i)) {
+ window.freeLastRow();
+ break;
+ }
+ }
+ } else {
+ if (!window.putNull(mPos, i)) {
+ window.freeLastRow();
+ break;
+ }
+ }
+ }
+ }
+
+ mPos = oldpos;
+ } catch (IllegalStateException e){
+ // simply ignore it
+ } finally {
+ window.releaseReference();
+ }
+ }
+
+ @Override
+ public int getCount() {
+ return mRows.length;
+ }
+
+ @Override
+ public boolean deleteRow() {
+ return false;
+ }
+
+ @Override
+ public String[] getColumnNames() {
+ return mColumnNames;
+ }
+
+ @Override
+ public byte[] getBlob(int columnIndex) {
+ return (byte[]) mRows[mPos].get(columnIndex);
+ }
+
+ @Override
+ public String getString(int columnIndex) {
+ Object cell = mRows[mPos].get(columnIndex);
+ return (cell == null) ? null : cell.toString();
+ }
+
+ @Override
+ public short getShort(int columnIndex) {
+ Number num = (Number) mRows[mPos].get(columnIndex);
+ return num.shortValue();
+ }
+
+ @Override
+ public int getInt(int columnIndex) {
+ Number num = (Number) mRows[mPos].get(columnIndex);
+ return num.intValue();
+ }
+
+ @Override
+ public long getLong(int columnIndex) {
+ Number num = (Number) mRows[mPos].get(columnIndex);
+ return num.longValue();
+ }
+
+ @Override
+ public float getFloat(int columnIndex) {
+ Number num = (Number) mRows[mPos].get(columnIndex);
+ return num.floatValue();
+ }
+
+ @Override
+ public double getDouble(int columnIndex) {
+ Number num = (Number) mRows[mPos].get(columnIndex);
+ return num.doubleValue();
+ }
+
+ @Override
+ public boolean isNull(int columnIndex) {
+ return mRows[mPos].get(columnIndex) == null;
+ }
+}
diff --git a/common/java/com/android/common/FastXmlSerializer.java b/common/java/com/android/common/FastXmlSerializer.java
new file mode 100644
index 0000000..0d33941
--- /dev/null
+++ b/common/java/com/android/common/FastXmlSerializer.java
@@ -0,0 +1,365 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.common;
+
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
+
+/**
+ * This is a quick and dirty implementation of XmlSerializer that isn't horribly
+ * painfully slow like the normal one. It only does what is needed for the
+ * specific XML files being written with it.
+ */
+public class FastXmlSerializer implements XmlSerializer {
+ private static final String ESCAPE_TABLE[] = new String[] {
+ null, null, null, null, null, null, null, null, // 0-7
+ null, null, null, null, null, null, null, null, // 8-15
+ null, null, null, null, null, null, null, null, // 16-23
+ null, null, null, null, null, null, null, null, // 24-31
+ null, null, """, null, null, null, "&", null, // 32-39
+ null, null, null, null, null, null, null, null, // 40-47
+ null, null, null, null, null, null, null, null, // 48-55
+ null, null, null, null, "<", null, ">", null, // 56-63
+ };
+
+ private static final int BUFFER_LEN = 8192;
+
+ private final char[] mText = new char[BUFFER_LEN];
+ private int mPos;
+
+ private Writer mWriter;
+
+ private OutputStream mOutputStream;
+ private CharsetEncoder mCharset;
+ private ByteBuffer mBytes = ByteBuffer.allocate(BUFFER_LEN);
+
+ private boolean mInTag;
+
+ private void append(char c) throws IOException {
+ int pos = mPos;
+ if (pos >= (BUFFER_LEN-1)) {
+ flush();
+ pos = mPos;
+ }
+ mText[pos] = c;
+ mPos = pos+1;
+ }
+
+ private void append(String str, int i, final int length) throws IOException {
+ if (length > BUFFER_LEN) {
+ final int end = i + length;
+ while (i < end) {
+ int next = i + BUFFER_LEN;
+ append(str, i, next<end ? BUFFER_LEN : (end-i));
+ i = next;
+ }
+ return;
+ }
+ int pos = mPos;
+ if ((pos+length) > BUFFER_LEN) {
+ flush();
+ pos = mPos;
+ }
+ str.getChars(i, i+length, mText, pos);
+ mPos = pos + length;
+ }
+
+ private void append(char[] buf, int i, final int length) throws IOException {
+ if (length > BUFFER_LEN) {
+ final int end = i + length;
+ while (i < end) {
+ int next = i + BUFFER_LEN;
+ append(buf, i, next<end ? BUFFER_LEN : (end-i));
+ i = next;
+ }
+ return;
+ }
+ int pos = mPos;
+ if ((pos+length) > BUFFER_LEN) {
+ flush();
+ pos = mPos;
+ }
+ System.arraycopy(buf, i, mText, pos, length);
+ mPos = pos + length;
+ }
+
+ private void append(String str) throws IOException {
+ append(str, 0, str.length());
+ }
+
+ private void escapeAndAppendString(final String string) throws IOException {
+ final int N = string.length();
+ final char NE = (char)ESCAPE_TABLE.length;
+ final String[] escapes = ESCAPE_TABLE;
+ int lastPos = 0;
+ int pos;
+ for (pos=0; pos<N; pos++) {
+ char c = string.charAt(pos);
+ if (c >= NE) continue;
+ String escape = escapes[c];
+ if (escape == null) continue;
+ if (lastPos < pos) append(string, lastPos, pos-lastPos);
+ lastPos = pos + 1;
+ append(escape);
+ }
+ if (lastPos < pos) append(string, lastPos, pos-lastPos);
+ }
+
+ private void escapeAndAppendString(char[] buf, int start, int len) throws IOException {
+ final char NE = (char)ESCAPE_TABLE.length;
+ final String[] escapes = ESCAPE_TABLE;
+ int end = start+len;
+ int lastPos = start;
+ int pos;
+ for (pos=start; pos<end; pos++) {
+ char c = buf[pos];
+ if (c >= NE) continue;
+ String escape = escapes[c];
+ if (escape == null) continue;
+ if (lastPos < pos) append(buf, lastPos, pos-lastPos);
+ lastPos = pos + 1;
+ append(escape);
+ }
+ if (lastPos < pos) append(buf, lastPos, pos-lastPos);
+ }
+
+ public XmlSerializer attribute(String namespace, String name, String value) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ append(' ');
+ if (namespace != null) {
+ append(namespace);
+ append(':');
+ }
+ append(name);
+ append("=\"");
+
+ escapeAndAppendString(value);
+ append('"');
+ return this;
+ }
+
+ public void cdsect(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void comment(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void docdecl(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endDocument() throws IOException, IllegalArgumentException, IllegalStateException {
+ flush();
+ }
+
+ public XmlSerializer endTag(String namespace, String name) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ if (mInTag) {
+ append(" />\n");
+ } else {
+ append("</");
+ if (namespace != null) {
+ append(namespace);
+ append(':');
+ }
+ append(name);
+ append(">\n");
+ }
+ mInTag = false;
+ return this;
+ }
+
+ public void entityRef(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ private void flushBytes() throws IOException {
+ int position;
+ if ((position = mBytes.position()) > 0) {
+ mBytes.flip();
+ mOutputStream.write(mBytes.array(), 0, position);
+ mBytes.clear();
+ }
+ }
+
+ public void flush() throws IOException {
+ //Log.i("PackageManager", "flush mPos=" + mPos);
+ if (mPos > 0) {
+ if (mOutputStream != null) {
+ CharBuffer charBuffer = CharBuffer.wrap(mText, 0, mPos);
+ CoderResult result = mCharset.encode(charBuffer, mBytes, true);
+ while (true) {
+ if (result.isError()) {
+ throw new IOException(result.toString());
+ } else if (result.isOverflow()) {
+ flushBytes();
+ result = mCharset.encode(charBuffer, mBytes, true);
+ continue;
+ }
+ break;
+ }
+ flushBytes();
+ mOutputStream.flush();
+ } else {
+ mWriter.write(mText, 0, mPos);
+ mWriter.flush();
+ }
+ mPos = 0;
+ }
+ }
+
+ public int getDepth() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean getFeature(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getName() {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getNamespace() {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getPrefix(String namespace, boolean generatePrefix)
+ throws IllegalArgumentException {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object getProperty(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void ignorableWhitespace(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void processingInstruction(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setFeature(String name, boolean state) throws IllegalArgumentException,
+ IllegalStateException {
+ if (name.equals("http://xmlpull.org/v1/doc/features.html#indent-output")) {
+ return;
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public void setOutput(OutputStream os, String encoding) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ if (os == null)
+ throw new IllegalArgumentException();
+ if (true) {
+ try {
+ mCharset = Charset.forName(encoding).newEncoder();
+ } catch (IllegalCharsetNameException e) {
+ throw (UnsupportedEncodingException) (new UnsupportedEncodingException(
+ encoding).initCause(e));
+ } catch (UnsupportedCharsetException e) {
+ throw (UnsupportedEncodingException) (new UnsupportedEncodingException(
+ encoding).initCause(e));
+ }
+ mOutputStream = os;
+ } else {
+ setOutput(
+ encoding == null
+ ? new OutputStreamWriter(os)
+ : new OutputStreamWriter(os, encoding));
+ }
+ }
+
+ public void setOutput(Writer writer) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ mWriter = writer;
+ }
+
+ public void setPrefix(String prefix, String namespace) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setProperty(String name, Object value) throws IllegalArgumentException,
+ IllegalStateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startDocument(String encoding, Boolean standalone) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ append("<?xml version='1.0' encoding='utf-8' standalone='"
+ + (standalone ? "yes" : "no") + "' ?>\n");
+ }
+
+ public XmlSerializer startTag(String namespace, String name) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ if (mInTag) {
+ append(">\n");
+ }
+ append('<');
+ if (namespace != null) {
+ append(namespace);
+ append(':');
+ }
+ append(name);
+ mInTag = true;
+ return this;
+ }
+
+ public XmlSerializer text(char[] buf, int start, int len) throws IOException,
+ IllegalArgumentException, IllegalStateException {
+ if (mInTag) {
+ append(">");
+ mInTag = false;
+ }
+ escapeAndAppendString(buf, start, len);
+ return this;
+ }
+
+ public XmlSerializer text(String text) throws IOException, IllegalArgumentException,
+ IllegalStateException {
+ if (mInTag) {
+ append(">");
+ mInTag = false;
+ }
+ escapeAndAppendString(text);
+ return this;
+ }
+
+}
diff --git a/common/java/com/android/common/NetworkConnectivityListener.java b/common/java/com/android/common/NetworkConnectivityListener.java
new file mode 100644
index 0000000..b49b80d
--- /dev/null
+++ b/common/java/com/android/common/NetworkConnectivityListener.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.common;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * A wrapper for a broadcast receiver that provides network connectivity
+ * state information, independent of network type (mobile, Wi-Fi, etc.).
+ * @deprecated Code tempted to use this class should simply listen for connectivity intents
+ * (or poll ConnectivityManager) directly.
+ * {@hide}
+ */
+public class NetworkConnectivityListener {
+ private static final String TAG = "NetworkConnectivityListener";
+ private static final boolean DBG = false;
+
+ private Context mContext;
+ private HashMap<Handler, Integer> mHandlers = new HashMap<Handler, Integer>();
+ private State mState;
+ private boolean mListening;
+ private String mReason;
+ private boolean mIsFailover;
+
+ /** Network connectivity information */
+ private NetworkInfo mNetworkInfo;
+
+ /**
+ * In case of a Disconnect, the connectivity manager may have
+ * already established, or may be attempting to establish, connectivity
+ * with another network. If so, {@code mOtherNetworkInfo} will be non-null.
+ */
+ private NetworkInfo mOtherNetworkInfo;
+
+ private ConnectivityBroadcastReceiver mReceiver;
+
+ private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
+ mListening == false) {
+ Log.w(TAG, "onReceived() called with " + mState.toString() + " and " + intent);
+ return;
+ }
+
+ boolean noConnectivity =
+ intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+
+ if (noConnectivity) {
+ mState = State.NOT_CONNECTED;
+ } else {
+ mState = State.CONNECTED;
+ }
+
+ mNetworkInfo = (NetworkInfo)
+ intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
+ mOtherNetworkInfo = (NetworkInfo)
+ intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
+
+ mReason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
+ mIsFailover =
+ intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
+
+ if (DBG) {
+ Log.d(TAG, "onReceive(): mNetworkInfo=" + mNetworkInfo + " mOtherNetworkInfo = "
+ + (mOtherNetworkInfo == null ? "[none]" : mOtherNetworkInfo +
+ " noConn=" + noConnectivity) + " mState=" + mState.toString());
+ }
+
+ // Notifiy any handlers.
+ Iterator<Handler> it = mHandlers.keySet().iterator();
+ while (it.hasNext()) {
+ Handler target = it.next();
+ Message message = Message.obtain(target, mHandlers.get(target));
+ target.sendMessage(message);
+ }
+ }
+ };
+
+ public enum State {
+ UNKNOWN,
+
+ /** This state is returned if there is connectivity to any network **/
+ CONNECTED,
+ /**
+ * This state is returned if there is no connectivity to any network. This is set
+ * to true under two circumstances:
+ * <ul>
+ * <li>When connectivity is lost to one network, and there is no other available
+ * network to attempt to switch to.</li>
+ * <li>When connectivity is lost to one network, and the attempt to switch to
+ * another network fails.</li>
+ */
+ NOT_CONNECTED
+ }
+
+ /**
+ * Create a new NetworkConnectivityListener.
+ */
+ public NetworkConnectivityListener() {
+ mState = State.UNKNOWN;
+ mReceiver = new ConnectivityBroadcastReceiver();
+ }
+
+ /**
+ * This method starts listening for network connectivity state changes.
+ * @param context
+ */
+ public synchronized void startListening(Context context) {
+ if (!mListening) {
+ mContext = context;
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ context.registerReceiver(mReceiver, filter);
+ mListening = true;
+ }
+ }
+
+ /**
+ * This method stops this class from listening for network changes.
+ */
+ public synchronized void stopListening() {
+ if (mListening) {
+ mContext.unregisterReceiver(mReceiver);
+ mContext = null;
+ mNetworkInfo = null;
+ mOtherNetworkInfo = null;
+ mIsFailover = false;
+ mReason = null;
+ mListening = false;
+ }
+ }
+
+ /**
+ * This methods registers a Handler to be called back onto with the specified what code when
+ * the network connectivity state changes.
+ *
+ * @param target The target handler.
+ * @param what The what code to be used when posting a message to the handler.
+ */
+ public void registerHandler(Handler target, int what) {
+ mHandlers.put(target, what);
+ }
+
+ /**
+ * This methods unregisters the specified Handler.
+ * @param target
+ */
+ public void unregisterHandler(Handler target) {
+ mHandlers.remove(target);
+ }
+
+ public State getState() {
+ return mState;
+ }
+
+ /**
+ * Return the NetworkInfo associated with the most recent connectivity event.
+ * @return {@code NetworkInfo} for the network that had the most recent connectivity event.
+ */
+ public NetworkInfo getNetworkInfo() {
+ return mNetworkInfo;
+ }
+
+ /**
+ * If the most recent connectivity event was a DISCONNECT, return
+ * any information supplied in the broadcast about an alternate
+ * network that might be available. If this returns a non-null
+ * value, then another broadcast should follow shortly indicating
+ * whether connection to the other network succeeded.
+ *
+ * @return NetworkInfo
+ */
+ public NetworkInfo getOtherNetworkInfo() {
+ return mOtherNetworkInfo;
+ }
+
+ /**
+ * Returns true if the most recent event was for an attempt to switch over to
+ * a new network following loss of connectivity on another network.
+ * @return {@code true} if this was a failover attempt, {@code false} otherwise.
+ */
+ public boolean isFailover() {
+ return mIsFailover;
+ }
+
+ /**
+ * An optional reason for the connectivity state change may have been supplied.
+ * This returns it.
+ * @return the reason for the state change, if available, or {@code null}
+ * otherwise.
+ */
+ public String getReason() {
+ return mReason;
+ }
+}
diff --git a/common/java/com/android/common/XmlUtils.java b/common/java/com/android/common/XmlUtils.java
new file mode 100644
index 0000000..dd57e49
--- /dev/null
+++ b/common/java/com/android/common/XmlUtils.java
@@ -0,0 +1,796 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.common;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import android.util.Xml;
+
+/** {@hide} */
+public class XmlUtils
+{
+
+ public static void skipCurrentTag(XmlPullParser parser)
+ throws XmlPullParserException, IOException {
+ int outerDepth = parser.getDepth();
+ int type;
+ while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG
+ || parser.getDepth() > outerDepth)) {
+ }
+ }
+
+ public static final int
+ convertValueToList(CharSequence value, String[] options, int defaultValue)
+ {
+ if (null != value) {
+ for (int i = 0; i < options.length; i++) {
+ if (value.equals(options[i]))
+ return i;
+ }
+ }
+
+ return defaultValue;
+ }
+
+ public static final boolean
+ convertValueToBoolean(CharSequence value, boolean defaultValue)
+ {
+ boolean result = false;
+
+ if (null == value)
+ return defaultValue;
+
+ if (value.equals("1")
+ || value.equals("true")
+ || value.equals("TRUE"))
+ result = true;
+
+ return result;
+ }
+
+ public static final int
+ convertValueToInt(CharSequence charSeq, int defaultValue)
+ {
+ if (null == charSeq)
+ return defaultValue;
+
+ String nm = charSeq.toString();
+
+ // XXX This code is copied from Integer.decode() so we don't
+ // have to instantiate an Integer!
+
+ int value;
+ int sign = 1;
+ int index = 0;
+ int len = nm.length();
+ int base = 10;
+
+ if ('-' == nm.charAt(0)) {
+ sign = -1;
+ index++;
+ }
+
+ if ('0' == nm.charAt(index)) {
+ // Quick check for a zero by itself
+ if (index == (len - 1))
+ return 0;
+
+ char c = nm.charAt(index + 1);
+
+ if ('x' == c || 'X' == c) {
+ index += 2;
+ base = 16;
+ } else {
+ index++;
+ base = 8;
+ }
+ }
+ else if ('#' == nm.charAt(index))
+ {
+ index++;
+ base = 16;
+ }
+
+ return Integer.parseInt(nm.substring(index), base) * sign;
+ }
+
+ public static final int
+ convertValueToUnsignedInt(String value, int defaultValue)
+ {
+ if (null == value)
+ return defaultValue;
+
+ return parseUnsignedIntAttribute(value);
+ }
+
+ public static final int
+ parseUnsignedIntAttribute(CharSequence charSeq)
+ {
+ String value = charSeq.toString();
+
+ long bits;
+ int index = 0;
+ int len = value.length();
+ int base = 10;
+
+ if ('0' == value.charAt(index)) {
+ // Quick check for zero by itself
+ if (index == (len - 1))
+ return 0;
+
+ char c = value.charAt(index + 1);
+
+ if ('x' == c || 'X' == c) { // check for hex
+ index += 2;
+ base = 16;
+ } else { // check for octal
+ index++;
+ base = 8;
+ }
+ } else if ('#' == value.charAt(index)) {
+ index++;
+ base = 16;
+ }
+
+ return (int) Long.parseLong(value.substring(index), base);
+ }
+
+ /**
+ * Flatten a Map into an output stream as XML. The map can later be
+ * read back with readMapXml().
+ *
+ * @param val The map to be flattened.
+ * @param out Where to write the XML data.
+ *
+ * @see #writeMapXml(Map, String, XmlSerializer)
+ * @see #writeListXml
+ * @see #writeValueXml
+ * @see #readMapXml
+ */
+ public static final void writeMapXml(Map val, OutputStream out)
+ throws XmlPullParserException, java.io.IOException {
+ XmlSerializer serializer = new FastXmlSerializer();
+ serializer.setOutput(out, "utf-8");
+ serializer.startDocument(null, true);
+ serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
+ writeMapXml(val, null, serializer);
+ serializer.endDocument();
+ }
+
+ /**
+ * Flatten a List into an output stream as XML. The list can later be
+ * read back with readListXml().
+ *
+ * @param val The list to be flattened.
+ * @param out Where to write the XML data.
+ *
+ * @see #writeListXml(List, String, XmlSerializer)
+ * @see #writeMapXml
+ * @see #writeValueXml
+ * @see #readListXml
+ */
+ public static final void writeListXml(List val, OutputStream out)
+ throws XmlPullParserException, java.io.IOException
+ {
+ XmlSerializer serializer = Xml.newSerializer();
+ serializer.setOutput(out, "utf-8");
+ serializer.startDocument(null, true);
+ serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
+ writeListXml(val, null, serializer);
+ serializer.endDocument();
+ }
+
+ /**
+ * Flatten a Map into an XmlSerializer. The map can later be read back
+ * with readThisMapXml().
+ *
+ * @param val The map to be flattened.
+ * @param name Name attribute to include with this list's tag, or null for
+ * none.
+ * @param out XmlSerializer to write the map into.
+ *
+ * @see #writeMapXml(Map, OutputStream)
+ * @see #writeListXml
+ * @see #writeValueXml
+ * @see #readMapXml
+ */
+ public static final void writeMapXml(Map val, String name, XmlSerializer out)
+ throws XmlPullParserException, java.io.IOException
+ {
+ if (val == null) {
+ out.startTag(null, "null");
+ out.endTag(null, "null");
+ return;
+ }
+
+ Set s = val.entrySet();
+ Iterator i = s.iterator();
+
+ out.startTag(null, "map");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+
+ while (i.hasNext()) {
+ Map.Entry e = (Map.Entry)i.next();
+ writeValueXml(e.getValue(), (String)e.getKey(), out);
+ }
+
+ out.endTag(null, "map");
+ }
+
+ /**
+ * Flatten a List into an XmlSerializer. The list can later be read back
+ * with readThisListXml().
+ *
+ * @param val The list to be flattened.
+ * @param name Name attribute to include with this list's tag, or null for
+ * none.
+ * @param out XmlSerializer to write the list into.
+ *
+ * @see #writeListXml(List, OutputStream)
+ * @see #writeMapXml
+ * @see #writeValueXml
+ * @see #readListXml
+ */
+ public static final void writeListXml(List val, String name, XmlSerializer out)
+ throws XmlPullParserException, java.io.IOException
+ {
+ if (val == null) {
+ out.startTag(null, "null");
+ out.endTag(null, "null");
+ return;
+ }
+
+ out.startTag(null, "list");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+
+ int N = val.size();
+ int i=0;
+ while (i < N) {
+ writeValueXml(val.get(i), null, out);
+ i++;
+ }
+
+ out.endTag(null, "list");
+ }
+
+ /**
+ * Flatten a byte[] into an XmlSerializer. The list can later be read back
+ * with readThisByteArrayXml().
+ *
+ * @param val The byte array to be flattened.
+ * @param name Name attribute to include with this array's tag, or null for
+ * none.
+ * @param out XmlSerializer to write the array into.
+ *
+ * @see #writeMapXml
+ * @see #writeValueXml
+ */
+ public static final void writeByteArrayXml(byte[] val, String name,
+ XmlSerializer out)
+ throws XmlPullParserException, java.io.IOException {
+
+ if (val == null) {
+ out.startTag(null, "null");
+ out.endTag(null, "null");
+ return;
+ }
+
+ out.startTag(null, "byte-array");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+
+ final int N = val.length;
+ out.attribute(null, "num", Integer.toString(N));
+
+ StringBuilder sb = new StringBuilder(val.length*2);
+ for (int i=0; i<N; i++) {
+ int b = val[i];
+ int h = b>>4;
+ sb.append(h >= 10 ? ('a'+h-10) : ('0'+h));
+ h = b&0xff;
+ sb.append(h >= 10 ? ('a'+h-10) : ('0'+h));
+ }
+
+ out.text(sb.toString());
+
+ out.endTag(null, "byte-array");
+ }
+
+ /**
+ * Flatten an int[] into an XmlSerializer. The list can later be read back
+ * with readThisIntArrayXml().
+ *
+ * @param val The int array to be flattened.
+ * @param name Name attribute to include with this array's tag, or null for
+ * none.
+ * @param out XmlSerializer to write the array into.
+ *
+ * @see #writeMapXml
+ * @see #writeValueXml
+ * @see #readThisIntArrayXml
+ */
+ public static final void writeIntArrayXml(int[] val, String name,
+ XmlSerializer out)
+ throws XmlPullParserException, java.io.IOException {
+
+ if (val == null) {
+ out.startTag(null, "null");
+ out.endTag(null, "null");
+ return;
+ }
+
+ out.startTag(null, "int-array");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+
+ final int N = val.length;
+ out.attribute(null, "num", Integer.toString(N));
+
+ for (int i=0; i<N; i++) {
+ out.startTag(null, "item");
+ out.attribute(null, "value", Integer.toString(val[i]));
+ out.endTag(null, "item");
+ }
+
+ out.endTag(null, "int-array");
+ }
+
+ /**
+ * Flatten an object's value into an XmlSerializer. The value can later
+ * be read back with readThisValueXml().
+ *
+ * Currently supported value types are: null, String, Integer, Long,
+ * Float, Double Boolean, Map, List.
+ *
+ * @param v The object to be flattened.
+ * @param name Name attribute to include with this value's tag, or null
+ * for none.
+ * @param out XmlSerializer to write the object into.
+ *
+ * @see #writeMapXml
+ * @see #writeListXml
+ * @see #readValueXml
+ */
+ public static final void writeValueXml(Object v, String name, XmlSerializer out)
+ throws XmlPullParserException, java.io.IOException
+ {
+ String typeStr;
+ if (v == null) {
+ out.startTag(null, "null");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+ out.endTag(null, "null");
+ return;
+ } else if (v instanceof String) {
+ out.startTag(null, "string");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+ out.text(v.toString());
+ out.endTag(null, "string");
+ return;
+ } else if (v instanceof Integer) {
+ typeStr = "int";
+ } else if (v instanceof Long) {
+ typeStr = "long";
+ } else if (v instanceof Float) {
+ typeStr = "float";
+ } else if (v instanceof Double) {
+ typeStr = "double";
+ } else if (v instanceof Boolean) {
+ typeStr = "boolean";
+ } else if (v instanceof byte[]) {
+ writeByteArrayXml((byte[])v, name, out);
+ return;
+ } else if (v instanceof int[]) {
+ writeIntArrayXml((int[])v, name, out);
+ return;
+ } else if (v instanceof Map) {
+ writeMapXml((Map)v, name, out);
+ return;
+ } else if (v instanceof List) {
+ writeListXml((List)v, name, out);
+ return;
+ } else if (v instanceof CharSequence) {
+ // XXX This is to allow us to at least write something if
+ // we encounter styled text... but it means we will drop all
+ // of the styling information. :(
+ out.startTag(null, "string");
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+ out.text(v.toString());
+ out.endTag(null, "string");
+ return;
+ } else {
+ throw new RuntimeException("writeValueXml: unable to write value " + v);
+ }
+
+ out.startTag(null, typeStr);
+ if (name != null) {
+ out.attribute(null, "name", name);
+ }
+ out.attribute(null, "value", v.toString());
+ out.endTag(null, typeStr);
+ }
+
+ /**
+ * Read a HashMap from an InputStream containing XML. The stream can
+ * previously have been written by writeMapXml().
+ *
+ * @param in The InputStream from which to read.
+ *
+ * @return HashMap The resulting map.
+ *
+ * @see #readListXml
+ * @see #readValueXml
+ * @see #readThisMapXml
+ * #see #writeMapXml
+ */
+ public static final HashMap readMapXml(InputStream in)
+ throws XmlPullParserException, java.io.IOException
+ {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(in, null);
+ return (HashMap)readValueXml(parser, new String[1]);
+ }
+
+ /**
+ * Read an ArrayList from an InputStream containing XML. The stream can
+ * previously have been written by writeListXml().
+ *
+ * @param in The InputStream from which to read.
+ *
+ * @return HashMap The resulting list.
+ *
+ * @see #readMapXml
+ * @see #readValueXml
+ * @see #readThisListXml
+ * @see #writeListXml
+ */
+ public static final ArrayList readListXml(InputStream in)
+ throws XmlPullParserException, java.io.IOException
+ {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(in, null);
+ return (ArrayList)readValueXml(parser, new String[1]);
+ }
+
+ /**
+ * Read a HashMap object from an XmlPullParser. The XML data could
+ * previously have been generated by writeMapXml(). The XmlPullParser
+ * must be positioned <em>after</em> the tag that begins the map.
+ *
+ * @param parser The XmlPullParser from which to read the map data.
+ * @param endTag Name of the tag that will end the map, usually "map".
+ * @param name An array of one string, used to return the name attribute
+ * of the map's tag.
+ *
+ * @return HashMap The newly generated map.
+ *
+ * @see #readMapXml
+ */
+ public static final HashMap readThisMapXml(XmlPullParser parser, String endTag, String[] name)
+ throws XmlPullParserException, java.io.IOException
+ {
+ HashMap map = new HashMap();
+
+ int eventType = parser.getEventType();
+ do {
+ if (eventType == parser.START_TAG) {
+ Object val = readThisValueXml(parser, name);
+ if (name[0] != null) {
+ //System.out.println("Adding to map: " + name + " -> " + val);
+ map.put(name[0], val);
+ } else {
+ throw new XmlPullParserException(
+ "Map value without name attribute: " + parser.getName());
+ }
+ } else if (eventType == parser.END_TAG) {
+ if (parser.getName().equals(endTag)) {
+ return map;
+ }
+ throw new XmlPullParserException(
+ "Expected " + endTag + " end tag at: " + parser.getName());
+ }
+ eventType = parser.next();
+ } while (eventType != parser.END_DOCUMENT);
+
+ throw new XmlPullParserException(
+ "Document ended before " + endTag + " end tag");
+ }
+
+ /**
+ * Read an ArrayList object from an XmlPullParser. The XML data could
+ * previously have been generated by writeListXml(). The XmlPullParser
+ * must be positioned <em>after</em> the tag that begins the list.
+ *
+ * @param parser The XmlPullParser from which to read the list data.
+ * @param endTag Name of the tag that will end the list, usually "list".
+ * @param name An array of one string, used to return the name attribute
+ * of the list's tag.
+ *
+ * @return HashMap The newly generated list.
+ *
+ * @see #readListXml
+ */
+ public static final ArrayList readThisListXml(XmlPullParser parser, String endTag, String[] name)
+ throws XmlPullParserException, java.io.IOException
+ {
+ ArrayList list = new ArrayList();
+
+ int eventType = parser.getEventType();
+ do {
+ if (eventType == parser.START_TAG) {
+ Object val = readThisValueXml(parser, name);
+ list.add(val);
+ //System.out.println("Adding to list: " + val);
+ } else if (eventType == parser.END_TAG) {
+ if (parser.getName().equals(endTag)) {
+ return list;
+ }
+ throw new XmlPullParserException(
+ "Expected " + endTag + " end tag at: " + parser.getName());
+ }
+ eventType = parser.next();
+ } while (eventType != parser.END_DOCUMENT);
+
+ throw new XmlPullParserException(
+ "Document ended before " + endTag + " end tag");
+ }
+
+ /**
+ * Read an int[] object from an XmlPullParser. The XML data could
+ * previously have been generated by writeIntArrayXml(). The XmlPullParser
+ * must be positioned <em>after</em> the tag that begins the list.
+ *
+ * @param parser The XmlPullParser from which to read the list data.
+ * @param endTag Name of the tag that will end the list, usually "list".
+ * @param name An array of one string, used to return the name attribute
+ * of the list's tag.
+ *
+ * @return Returns a newly generated int[].
+ *
+ * @see #readListXml
+ */
+ public static final int[] readThisIntArrayXml(XmlPullParser parser,
+ String endTag, String[] name)
+ throws XmlPullParserException, java.io.IOException {
+
+ int num;
+ try {
+ num = Integer.parseInt(parser.getAttributeValue(null, "num"));
+ } catch (NullPointerException e) {
+ throw new XmlPullParserException(
+ "Need num attribute in byte-array");
+ } catch (NumberFormatException e) {
+ throw new XmlPullParserException(
+ "Not a number in num attribute in byte-array");
+ }
+
+ int[] array = new int[num];
+ int i = 0;
+
+ int eventType = parser.getEventType();
+ do {
+ if (eventType == parser.START_TAG) {
+ if (parser.getName().equals("item")) {
+ try {
+ array[i] = Integer.parseInt(
+ parser.getAttributeValue(null, "value"));
+ } catch (NullPointerException e) {
+ throw new XmlPullParserException(
+ "Need value attribute in item");
+ } catch (NumberFormatException e) {
+ throw new XmlPullParserException(
+ "Not a number in value attribute in item");
+ }
+ } else {
+ throw new XmlPullParserException(
+ "Expected item tag at: " + parser.getName());
+ }
+ } else if (eventType == parser.END_TAG) {
+ if (parser.getName().equals(endTag)) {
+ return array;
+ } else if (parser.getName().equals("item")) {
+ i++;
+ } else {
+ throw new XmlPullParserException(
+ "Expected " + endTag + " end tag at: "
+ + parser.getName());
+ }
+ }
+ eventType = parser.next();
+ } while (eventType != parser.END_DOCUMENT);
+
+ throw new XmlPullParserException(
+ "Document ended before " + endTag + " end tag");
+ }
+
+ /**
+ * Read a flattened object from an XmlPullParser. The XML data could
+ * previously have been written with writeMapXml(), writeListXml(), or
+ * writeValueXml(). The XmlPullParser must be positioned <em>at</em> the
+ * tag that defines the value.
+ *
+ * @param parser The XmlPullParser from which to read the object.
+ * @param name An array of one string, used to return the name attribute
+ * of the value's tag.
+ *
+ * @return Object The newly generated value object.
+ *
+ * @see #readMapXml
+ * @see #readListXml
+ * @see #writeValueXml
+ */
+ public static final Object readValueXml(XmlPullParser parser, String[] name)
+ throws XmlPullParserException, java.io.IOException
+ {
+ int eventType = parser.getEventType();
+ do {
+ if (eventType == parser.START_TAG) {
+ return readThisValueXml(parser, name);
+ } else if (eventType == parser.END_TAG) {
+ throw new XmlPullParserException(
+ "Unexpected end tag at: " + parser.getName());
+ } else if (eventType == parser.TEXT) {
+ throw new XmlPullParserException(
+ "Unexpected text: " + parser.getText());
+ }
+ eventType = parser.next();
+ } while (eventType != parser.END_DOCUMENT);
+
+ throw new XmlPullParserException(
+ "Unexpected end of document");
+ }
+
+ private static final Object readThisValueXml(XmlPullParser parser, String[] name)
+ throws XmlPullParserException, java.io.IOException
+ {
+ final String valueName = parser.getAttributeValue(null, "name");
+ final String tagName = parser.getName();
+
+ //System.out.println("Reading this value tag: " + tagName + ", name=" + valueName);
+
+ Object res;
+
+ if (tagName.equals("null")) {
+ res = null;
+ } else if (tagName.equals("string")) {
+ String value = "";
+ int eventType;
+ while ((eventType = parser.next()) != parser.END_DOCUMENT) {
+ if (eventType == parser.END_TAG) {
+ if (parser.getName().equals("string")) {
+ name[0] = valueName;
+ //System.out.println("Returning value for " + valueName + ": " + value);
+ return value;
+ }
+ throw new XmlPullParserException(
+ "Unexpected end tag in <string>: " + parser.getName());
+ } else if (eventType == parser.TEXT) {
+ value += parser.getText();
+ } else if (eventType == parser.START_TAG) {
+ throw new XmlPullParserException(
+ "Unexpected start tag in <string>: " + parser.getName());
+ }
+ }
+ throw new XmlPullParserException(
+ "Unexpected end of document in <string>");
+ } else if (tagName.equals("int")) {
+ res = Integer.parseInt(parser.getAttributeValue(null, "value"));
+ } else if (tagName.equals("long")) {
+ res = Long.valueOf(parser.getAttributeValue(null, "value"));
+ } else if (tagName.equals("float")) {
+ res = new Float(parser.getAttributeValue(null, "value"));
+ } else if (tagName.equals("double")) {
+ res = new Double(parser.getAttributeValue(null, "value"));
+ } else if (tagName.equals("boolean")) {
+ res = Boolean.valueOf(parser.getAttributeValue(null, "value"));
+ } else if (tagName.equals("int-array")) {
+ parser.next();
+ res = readThisIntArrayXml(parser, "int-array", name);
+ name[0] = valueName;
+ //System.out.println("Returning value for " + valueName + ": " + res);
+ return res;
+ } else if (tagName.equals("map")) {
+ parser.next();
+ res = readThisMapXml(parser, "map", name);
+ name[0] = valueName;
+ //System.out.println("Returning value for " + valueName + ": " + res);
+ return res;
+ } else if (tagName.equals("list")) {
+ parser.next();
+ res = readThisListXml(parser, "list", name);
+ name[0] = valueName;
+ //System.out.println("Returning value for " + valueName + ": " + res);
+ return res;
+ } else {
+ throw new XmlPullParserException(
+ "Unknown tag: " + tagName);
+ }
+
+ // Skip through to end tag.
+ int eventType;
+ while ((eventType = parser.next()) != parser.END_DOCUMENT) {
+ if (eventType == parser.END_TAG) {
+ if (parser.getName().equals(tagName)) {
+ name[0] = valueName;
+ //System.out.println("Returning value for " + valueName + ": " + res);
+ return res;
+ }
+ throw new XmlPullParserException(
+ "Unexpected end tag in <" + tagName + ">: " + parser.getName());
+ } else if (eventType == parser.TEXT) {
+ throw new XmlPullParserException(
+ "Unexpected text in <" + tagName + ">: " + parser.getName());
+ } else if (eventType == parser.START_TAG) {
+ throw new XmlPullParserException(
+ "Unexpected start tag in <" + tagName + ">: " + parser.getName());
+ }
+ }
+ throw new XmlPullParserException(
+ "Unexpected end of document in <" + tagName + ">");
+ }
+
+ public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException
+ {
+ int type;
+ while ((type=parser.next()) != parser.START_TAG
+ && type != parser.END_DOCUMENT) {
+ ;
+ }
+
+ if (type != parser.START_TAG) {
+ throw new XmlPullParserException("No start tag found");
+ }
+
+ if (!parser.getName().equals(firstElementName)) {
+ throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() +
+ ", expected " + firstElementName);
+ }
+ }
+
+ public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException
+ {
+ int type;
+ while ((type=parser.next()) != parser.START_TAG
+ && type != parser.END_DOCUMENT) {
+ ;
+ }
+ }
+}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 676d6d5..7d07604 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -606,7 +606,7 @@
public int uid;
/**
- * The tag that was provided when the process crashed.
+ * The activity name associated with the error, if known. May be null.
*/
public String tag;
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index a0498aa..90f46dd 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -979,13 +979,23 @@
return true;
}
- case HANDLE_APPLICATION_ERROR_TRANSACTION: {
+ case HANDLE_APPLICATION_CRASH_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder app = data.readStrongBinder();
+ ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
+ handleApplicationCrash(app, ci);
+ reply.writeNoException();
+ return true;
+ }
+
+ case HANDLE_APPLICATION_WTF_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
IBinder app = data.readStrongBinder();
String tag = data.readString();
ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
- handleApplicationError(app, tag, ci);
+ boolean res = handleApplicationWtf(app, tag, ci);
reply.writeNoException();
+ reply.writeInt(res ? 1 : 0);
return true;
}
@@ -2337,7 +2347,20 @@
/* this base class version is never called */
return true;
}
- public void handleApplicationError(IBinder app, String tag,
+ public void handleApplicationCrash(IBinder app,
+ ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
+ {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(app);
+ crashInfo.writeToParcel(data, 0);
+ mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
+ reply.readException();
+ reply.recycle();
+ data.recycle();
+ }
+ public boolean handleApplicationWtf(IBinder app, String tag,
ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
{
Parcel data = Parcel.obtain();
@@ -2346,10 +2369,12 @@
data.writeStrongBinder(app);
data.writeString(tag);
crashInfo.writeToParcel(data, 0);
- mRemote.transact(HANDLE_APPLICATION_ERROR_TRANSACTION, data, reply, 0);
+ mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
reply.readException();
+ boolean res = reply.readInt() != 0;
reply.recycle();
data.recycle();
+ return res;
}
public void signalPersistentProcesses(int sig) throws RemoteException {
diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java
index e89b3ad0..a4b692f 100644
--- a/core/java/android/app/ApplicationErrorReport.java
+++ b/core/java/android/app/ApplicationErrorReport.java
@@ -195,6 +195,7 @@
StringWriter sw = new StringWriter();
tr.printStackTrace(new PrintWriter(sw));
stackTrace = sw.toString();
+ exceptionMessage = tr.getMessage();
// Populate fields with the "root cause" exception
while (tr.getCause() != null) {
diff --git a/core/java/android/app/IActivityController.aidl b/core/java/android/app/IActivityController.aidl
index 804dd61..c76a517 100644
--- a/core/java/android/app/IActivityController.aidl
+++ b/core/java/android/app/IActivityController.aidl
@@ -44,7 +44,7 @@
* it immediately.
*/
boolean appCrashed(String processName, int pid,
- String tag, String shortMsg, String longMsg,
+ String shortMsg, String longMsg,
long timeMillis, String stackTrace);
/**
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index c890c4c..ca6bfa7 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -242,8 +242,9 @@
// Special low-level communication with activity manager.
public void startRunning(String pkg, String cls, String action,
String data) throws RemoteException;
-
- public void handleApplicationError(IBinder app, String tag,
+ public void handleApplicationCrash(IBinder app,
+ ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException;
+ public boolean handleApplicationWtf(IBinder app, String tag,
ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException;
/*
@@ -349,7 +350,7 @@
// Please keep these transaction codes the same -- they are also
// sent by C++ code.
int START_RUNNING_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION;
- int HANDLE_APPLICATION_ERROR_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+1;
+ int HANDLE_APPLICATION_CRASH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+1;
int START_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+2;
int UNHANDLED_BACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+3;
int OPEN_CONTENT_URI_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+4;
@@ -446,4 +447,5 @@
int KILL_APPLICATION_PROCESS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+98;
int START_ACTIVITY_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+99;
int OVERRIDE_PENDING_TRANSITION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+100;
+ int HANDLE_APPLICATION_WTF_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+101;
}
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index fda9b81..7e5f858 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -83,6 +83,8 @@
/** Default priority for a2dp devices that should not allow incoming
* connections */
public static final int PRIORITY_OFF = 0;
+ /** Default priority when not set or when the device is unpaired */
+ public static final int PRIORITY_UNDEFINED = -1;
private final IBluetoothA2dp mService;
private final Context mContext;
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 5eb655a..b792965 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -109,6 +109,8 @@
/** Default priority for headsets that should not be auto-connected
* and not allow incoming connections. */
public static final int PRIORITY_OFF = 0;
+ /** Default priority when not set or when the device is unpaired */
+ public static final int PRIORITY_UNDEFINED = -1;
/** The voice dialer 'works' but the user experience is poor. The voice
* recognizer has trouble dealing with the 8kHz SCO signal, and it still
diff --git a/core/java/android/bluetooth/package.html b/core/java/android/bluetooth/package.html
index 4f0755e..5ff240c 100644
--- a/core/java/android/bluetooth/package.html
+++ b/core/java/android/bluetooth/package.html
@@ -12,96 +12,16 @@
<li>Transfer data to and from other devices</li>
</ul>
-<p class="note"><strong>Note:</strong>
+<p>
To perform Bluetooth communication using these APIs, an application must
declare the {@link android.Manifest.permission#BLUETOOTH} permission. Some
-additional functionality, such as requesting device discovery and
-pairing also requires the {@link android.Manifest.permission#BLUETOOTH_ADMIN}
+additional functionality, such as requesting device discovery,
+also requires the {@link android.Manifest.permission#BLUETOOTH_ADMIN}
permission.
</p>
-<h3>Overview</h3>
-
-<p>Here's a basic introduction to the Bluetooth classes:</p>
-<dl>
- <dt>{@link android.bluetooth.BluetoothAdapter}</dt>
- <dd>This represents the local Bluetooth adapter, which is essentially the
- entry-point to performing any interaction with Bluetooth. With it, you can
- discover other Bluetooth devices, query a list of bonded (paired) devices,
- initialize a {@link android.bluetooth.BluetoothDevice} using a known MAC
- address, and create a {@link android.bluetooth.BluetoothServerSocket} to
- listen for communications from other devices.</dd>
-
- <dt>{@link android.bluetooth.BluetoothDevice}</dt>
- <dd>This represents a remote Bluetooth device. Use this to request a
- connection with a remote device through a
- {@link android.bluetooth.BluetoothSocket}
- or query information about the device such as its name, address, class, and
- bonding state.</dd>
-
- <dt>{@link android.bluetooth.BluetoothSocket}</dt>
- <dd>This represents the interface for a Bluetooth socket
- (similar to a TCP client-side {@link java.net.Socket}). This is the
- connection point that allows an app to transfer data with another Bluetooth
- device via {@link java.io.InputStream} and {@link java.io.OutputStream}.</dd>
- <dt>{@link android.bluetooth.BluetoothServerSocket}</dt>
-
- <dd>This represents an open server socket that listens for incoming requests
- (similar to a TCP server-side {@link java.net.ServerSocket}).
- When attempting to connect two Android devices, one device will need to open
- a server socket with this class. When a connection is accepted, a new
- {@link android.bluetooth.BluetoothSocket} will be returned,
- which can be used to manage the connection and transfer data.</dd>
-
- <dt>{@link android.bluetooth.BluetoothClass}</dt>
- <dd>This represents the Bluetooth class for a device which describes general
- characteristics and capabilities of a device. This class and its subclasses
- don't provide any actual functionality. The sub-classes are entirely composed
- of constants for the device and service class definitions.</dd>
-</dl>
-
-
-<h3>Example Procedure</h3>
-
-<p>For example, here's an pseudo-code procedure for discovering and
-connecting a remote device, and transfering data:</p>
-
-<ol>
- <li>Register a {@link android.content.BroadcastReceiver} that accepts the
- {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent.</li>
- <li>Call {@link android.bluetooth.BluetoothAdapter#getDefaultAdapter} to
- retrieve the Android system's local
- {@link android.bluetooth.BluetoothAdapter}.</li>
- <li>Call {@link android.bluetooth.BluetoothAdapter#startDiscovery()
- BluetoothAdapter.startDiscovery()} to scan for local devices. This is where
- the BroadcastReceiver comes in; Android now scans for devices and will
- broadcast the {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent
- for each remote device discovered. The
- {@link android.content.BroadcastReceiver}
- you created will receive each Intent.</li>
- <li>The {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent
- includes the {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE}
- Parcelable extra, which is a {@link android.bluetooth.BluetoothDevice}
- object. Extract this from the Intent and call
- {@link android.bluetooth.BluetoothDevice#createRfcommSocketToServiceRecord(java.util.UUID)
- BluetoothDevice.createRfcommSocketToServiceRecord()}
- to open a {@link android.bluetooth.BluetoothSocket} with a chosen
- remote device.</li>
- <li>Call {@link android.bluetooth.BluetoothSocket#connect()
- BluetoothSocket.connect()} to connect with the remote device.</li>
- <li>When successfully connected, call
- {@link android.bluetooth.BluetoothSocket#getInputStream()
- BluetoothSocket.getInputStream()} and/or
- {@link android.bluetooth.BluetoothSocket#getOutputStream()
- BluetoothSocket.getOutputStream()} to retreive an
- {@link java.io.InputStream} and {@link java.io.OutputStream}, respectively,
- which are hooked into the socket.</li>
- <li>Use {@link java.io.InputStream#read(byte[]) InputStream.read()} and
- {@link java.io.OutputStream#write(byte[]) OutputStream.write()} to transfer
- data.</li>
-</ol>
-
-
+<p>For a detailed guide to using the Bluetooth APIs, see the <a
+href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth Dev Guide topic</a>.</p>
<p class="note"><strong>Note:</strong>
Not all Android devices are guaranteed to have Bluetooth functionality.</p>
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index d784759..99ec60e 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -575,7 +575,7 @@
* {@link #setFlags} and {@link #addFlags}. See {@link #setFlags} for a list
* of all possible flags.
*/
-public class Intent implements Parcelable {
+public class Intent implements Parcelable, Cloneable {
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Standard intent activity actions (see action variable).
diff --git a/core/java/android/os/FileObserver.java b/core/java/android/os/FileObserver.java
index 38d252e..3457815 100644
--- a/core/java/android/os/FileObserver.java
+++ b/core/java/android/os/FileObserver.java
@@ -103,9 +103,7 @@
try {
observer.onEvent(mask, path);
} catch (Throwable throwable) {
- Log.e(LOG_TAG, "Unhandled throwable " + throwable.toString() +
- " (returned by observer " + observer + ")", throwable);
- RuntimeInit.crash("FileObserver", throwable);
+ Log.wtf(LOG_TAG, "Unhandled exception in FileObserver " + observer, throwable);
}
}
}
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 0afc537..23762ca 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -31,6 +31,7 @@
void preventScreenOn(boolean prevent);
boolean isScreenOn();
void reboot(String reason);
+ void crash(String message);
// sets the brightness of the backlights (screen, keyboard, button) 0-255
void setBacklightBrightness(int brightness);
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index caf0923..bc653d6 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -115,9 +115,7 @@
didIdle = true;
keep = ((IdleHandler)idler).queueIdle();
} catch (Throwable t) {
- Log.e("MessageQueue",
- "IdleHandler threw exception", t);
- RuntimeInit.crash("MessageQueue", t);
+ Log.wtf("MessageQueue", "IdleHandler threw exception", t);
}
if (!keep) {
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 293dabc..e4eaf45b 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -326,12 +326,11 @@
{
synchronized (mToken) {
if (mHeld) {
+ Log.wtf(TAG, "WakeLock finalized while still held: " + mTag);
try {
mService.releaseWakeLock(mToken, 0);
} catch (RemoteException e) {
}
- RuntimeInit.crash(TAG, new Exception(
- "WakeLock finalized while still held: "+mTag));
}
}
}
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index ed9198e..ac8bf91 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -35,6 +35,7 @@
import android.net.Uri;
import android.os.RemoteException;
import android.text.TextUtils;
+import android.util.DisplayMetrics;
import android.util.Pair;
import android.view.View;
@@ -294,7 +295,7 @@
* The display name for the contact.
* <P>Type: TEXT</P>
*/
- public static final String DISPLAY_NAME = "display_name";
+ public static final String DISPLAY_NAME = ContactNameColumns.DISPLAY_NAME_PRIMARY;
/**
* Reference to the row in the RawContacts table holding the contact name.
@@ -456,13 +457,13 @@
* The default text shown as the contact's display name. It is based on
* available data, see {@link #DISPLAY_NAME_SOURCE}.
*/
- public static final String DISPLAY_NAME = "display_name";
+ public static final String DISPLAY_NAME_PRIMARY = "display_name";
/**
* Alternative representation of the display name. If display name is
* based on the structured name and the structured name follows
* the Western full name style, then this field contains the "family name first"
- * version of the full name. Otherwise, it is the same as {@link #DISPLAY_NAME}.
+ * version of the full name. Otherwise, it is the same as DISPLAY_NAME_PRIMARY.
*/
public static final String DISPLAY_NAME_ALTERNATIVE = "display_name_alt";
@@ -483,7 +484,7 @@
* the sort key is the name's Pinyin spelling; for Japanese names
* it is the Hiragana version of the phonetic name.
*/
- public static final String SORT_KEY = "sort_key";
+ public static final String SORT_KEY_PRIMARY = "sort_key";
/**
* Sort key based on the alternative representation of the full name,
@@ -562,7 +563,7 @@
* </tr>
* <tr>
* <td>String</td>
- * <td>{@link #DISPLAY_NAME}</td>
+ * <td>DISPLAY_NAME_PRIMARY</td>
* <td>read-only</td>
* <td>The display name for the contact. It is the display name
* contributed by the raw contact referred to by the NAME_RAW_CONTACT_ID
@@ -692,7 +693,7 @@
* </table>
*/
public static class Contacts implements BaseColumns, ContactsColumns,
- ContactOptionsColumns, ContactStatusColumns {
+ ContactOptionsColumns, ContactNameColumns, ContactStatusColumns {
/**
* This utility class cannot be instantiated
*/
@@ -1519,6 +1520,7 @@
super(cursor);
}
+ @Override
public android.content.Entity getEntityAndIncrementCursor(Cursor cursor)
throws RemoteException {
final int columnRawContactId = cursor.getColumnIndexOrThrow(RawContacts._ID);
@@ -1757,8 +1759,8 @@
* @see ContactsContract.Data
*/
protected interface DataColumnsWithJoins extends BaseColumns, DataColumns, StatusColumns,
- RawContactsColumns, ContactsColumns, ContactOptionsColumns, ContactStatusColumns {
-
+ RawContactsColumns, ContactsColumns, ContactNameColumns, ContactOptionsColumns,
+ ContactStatusColumns {
}
/**
@@ -3039,7 +3041,7 @@
/**
* The alphabet used for capturing the phonetic name.
- * See {@link ContactsContract.PhoneticNameStyle}.
+ * See ContactsContract.PhoneticNameStyle.
* @hide
*/
public static final String PHONETIC_NAME_STYLE = DATA11;
@@ -3922,6 +3924,12 @@
* <td>{@link #DATA9}</td>
* <td></td>
* </tr>
+ * <tr>
+ * <td>String</td>
+ * <td>PHONETIC_NAME_STYLE</td>
+ * <td>{@link #DATA10}</td>
+ * <td></td>
+ * </tr>
* </table>
*/
public static final class Organization implements DataColumnsWithJoins, CommonColumns {
@@ -3979,6 +3987,13 @@
public static final String OFFICE_LOCATION = DATA9;
/**
+ * The alphabet used for capturing the phonetic name.
+ * See {@link ContactsContract.PhoneticNameStyle}.
+ * @hide
+ */
+ public static final String PHONETIC_NAME_STYLE = DATA10;
+
+ /**
* Return the string resource that best describes the given
* {@link #TYPE}. Will always return a valid resource.
*/
@@ -4599,6 +4614,7 @@
super(cursor);
}
+ @Override
public Entity getEntityAndIncrementCursor(Cursor cursor) throws RemoteException {
// we expect the cursor is already at the row we need to read from
final ContentValues values = new ContentValues();
@@ -4881,8 +4897,10 @@
/**
* Extra used to specify pivot dialog location in screen coordinates.
+ * @deprecated Use {@link Intent#setSourceBounds(Rect)} instead.
* @hide
*/
+ @Deprecated
public static final String EXTRA_TARGET_RECT = "target_rect";
/**
@@ -4942,15 +4960,17 @@
*/
public static void showQuickContact(Context context, View target, Uri lookupUri, int mode,
String[] excludeMimes) {
- // Find location and bounds of target view
- final int[] location = new int[2];
- target.getLocationOnScreen(location);
+ // Find location and bounds of target view, adjusting based on the
+ // assumed local density.
+ final float appScale = context.getResources().getCompatibilityInfo().applicationScale;
+ final int[] pos = new int[2];
+ target.getLocationOnScreen(pos);
final Rect rect = new Rect();
- rect.left = location[0];
- rect.top = location[1];
- rect.right = rect.left + target.getWidth();
- rect.bottom = rect.top + target.getHeight();
+ rect.left = (int) (pos[0] * appScale + 0.5f);
+ rect.top = (int) (pos[1] * appScale + 0.5f);
+ rect.right = (int) ((pos[0] + target.getWidth()) * appScale + 0.5f);
+ rect.bottom = (int) ((pos[1] + target.getHeight()) * appScale + 0.5f);
// Trigger with obtained rectangle
showQuickContact(context, rect, lookupUri, mode, excludeMimes);
@@ -4967,8 +4987,11 @@
* @param target Specific {@link Rect} that this dialog should be
* centered around, in screen coordinates. In particular, if
* the dialog has a "callout" arrow, it will be pointed and
- * centered around this {@link Rect}.
- * @param lookupUri A {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
+ * centered around this {@link Rect}. If you are running at a
+ * non-native density, you need to manually adjust using
+ * {@link DisplayMetrics#density} before calling.
+ * @param lookupUri A
+ * {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
* {@link Uri} that describes a specific contact to feature
* in this dialog.
* @param mode Any of {@link #MODE_SMALL}, {@link #MODE_MEDIUM}, or
@@ -4987,7 +5010,7 @@
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setData(lookupUri);
- intent.putExtra(EXTRA_TARGET_RECT, target);
+ intent.setSourceBounds(target);
intent.putExtra(EXTRA_MODE, mode);
intent.putExtra(EXTRA_EXCLUDE_MIMES, excludeMimes);
context.startActivity(intent);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 947ab19..09651f1 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3710,6 +3710,11 @@
"dropbox:";
/**
+ * Nonzero causes Log.wtf() to crash.
+ */
+ public static final String WTF_IS_FATAL = "wtf_is_fatal";
+
+ /**
* The length of time in milli-seconds that automatic small adjustments to
* SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded.
*/
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index 03dcf00..816ae14 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -96,11 +96,13 @@
BluetoothDevice.ERROR);
switch(bondState) {
case BluetoothDevice.BOND_BONDED:
- setSinkPriority(device, BluetoothA2dp.PRIORITY_ON);
+ if (getSinkPriority(device) == BluetoothA2dp.PRIORITY_UNDEFINED) {
+ setSinkPriority(device, BluetoothA2dp.PRIORITY_ON);
+ }
break;
case BluetoothDevice.BOND_BONDING:
case BluetoothDevice.BOND_NONE:
- setSinkPriority(device, BluetoothA2dp.PRIORITY_OFF);
+ setSinkPriority(device, BluetoothA2dp.PRIORITY_UNDEFINED);
break;
}
} else if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index 0d0d245..b28cf43 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -21,14 +21,15 @@
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothUuid;
-import android.os.ParcelUuid;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
+import android.os.ParcelUuid;
import android.util.Log;
import java.util.HashMap;
+import java.util.Set;
/**
* TODO: Move this to
@@ -553,7 +554,7 @@
if (mBluetoothService.isEnabled() &&
(BluetoothUuid.isAudioSource(uuid) || BluetoothUuid.isAvrcpTarget(uuid)
|| BluetoothUuid.isAdvAudioDist(uuid)) &&
- (a2dp.getNonDisconnectedSinks().size() == 0)) {
+ !isOtherSinkInNonDisconnectingState(address)) {
BluetoothDevice device = mAdapter.getRemoteDevice(address);
authorized = a2dp.getSinkPriority(device) > BluetoothA2dp.PRIORITY_OFF;
if (authorized) {
@@ -568,6 +569,16 @@
return authorized;
}
+ boolean isOtherSinkInNonDisconnectingState(String address) {
+ BluetoothA2dp a2dp = new BluetoothA2dp(mContext);
+ Set<BluetoothDevice> devices = a2dp.getNonDisconnectedSinks();
+ if (devices.size() == 0) return false;
+ for(BluetoothDevice dev: devices) {
+ if (!dev.getAddress().equals(address)) return true;
+ }
+ return false;
+ }
+
private void onAgentCancel() {
Intent intent = new Intent(BluetoothDevice.ACTION_PAIRING_CANCEL);
mContext.sendBroadcast(intent, BLUETOOTH_ADMIN_PERM);
diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java
index e95d0be..7a959a6 100644
--- a/core/java/android/util/Log.java
+++ b/core/java/android/util/Log.java
@@ -81,6 +81,13 @@
*/
public static final int ASSERT = 7;
+ /**
+ * Exception class used to capture a stack trace in {@link #wtf()}.
+ */
+ private static class TerribleFailure extends Exception {
+ TerribleFailure(String msg, Throwable cause) { super(msg, cause); }
+ }
+
private Log() {
}
@@ -170,24 +177,24 @@
/**
* Checks to see whether or not a log for the specified tag is loggable at the specified level.
- *
+ *
* The default level of any tag is set to INFO. This means that any level above and including
* INFO will be logged. Before you make any calls to a logging method you should check to see
* if your tag should be logged. You can change the default level by setting a system property:
* 'setprop log.tag.<YOUR_LOG_TAG> <LEVEL>'
- * Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPRESS will
+ * Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will
* turn off all logging for your tag. You can also create a local.prop file that with the
* following in it:
* 'log.tag.<YOUR_LOG_TAG>=<LEVEL>'
* and place that in /data/local.prop.
- *
+ *
* @param tag The tag to check.
* @param level The level to check.
* @return Whether or not that this is allowed to be logged.
* @throws IllegalArgumentException is thrown if the tag.length() > 23.
*/
public static native boolean isLoggable(String tag, int level);
-
+
/*
* Send a {@link #WARN} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
@@ -220,6 +227,46 @@
}
/**
+ * What a Terrible Failure: Report a condition that should never happen.
+ * The error will always be logged at level ASSERT with the call stack.
+ * Depending on system configuration, a report may be added to the
+ * {@link android.os.DropBoxManager} and/or the process may be terminated
+ * immediately with an error dialog.
+ * @param tag Used to identify the source of a log message.
+ * @param msg The message you would like logged.
+ * @pending
+ */
+ public static int wtf(String tag, String msg) {
+ return wtf(tag, msg, null);
+ }
+
+ /**
+ * What a Terrible Failure: Report an exception that should never happen.
+ * Similar to {@link #wtf(String, String)}, with an exception to log.
+ * @param tag Used to identify the source of a log message.
+ * @param tr An exception to log.
+ * @pending
+ */
+ public static int wtf(String tag, Throwable tr) {
+ return wtf(tag, tr.getMessage(), tr);
+ }
+
+ /**
+ * What a Terrible Failure: Report an exception that should never happen.
+ * Similar to {@link #wtf(String, Throwable)}, with a message as well.
+ * @param tag Used to identify the source of a log message.
+ * @param msg The message you would like logged.
+ * @param tr An exception to log. May be null.
+ * @pending
+ */
+ public static int wtf(String tag, String msg, Throwable tr) {
+ tr = new TerribleFailure(msg, tr);
+ int bytes = println(ASSERT, tag, getStackTraceString(tr));
+ RuntimeInit.wtf(tag, tr);
+ return bytes;
+ }
+
+ /**
* Handy function to get a loggable stack trace from a Throwable
* @param tr An exception to log
*/
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 4176ed1..5bd45a66a 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -1494,6 +1494,16 @@
* @hide
*/
static final int OPAQUE_MASK = 0x01800000;
+
+ /**
+ * Indicates a prepressed state;
+ * the short time between ACTION_DOWN and recognizing
+ * a 'real' press. Prepressed is used to recognize quick taps
+ * even when they are shorter than ViewConfiguration.getTapTimeout().
+ *
+ * @hide
+ */
+ private static final int PREPRESSED = 0x02000000;
/**
* The parent this view is attached to.
@@ -1722,6 +1732,8 @@
private int mNextFocusDownId = View.NO_ID;
private CheckForLongPress mPendingCheckForLongPress;
+ private CheckForTap mPendingCheckForTap = null;
+
private UnsetPressedState mUnsetPressedState;
/**
@@ -1762,6 +1774,11 @@
* Special tree observer used when mAttachInfo is null.
*/
private ViewTreeObserver mFloatingTreeObserver;
+
+ /**
+ * Cache the touch slop from the context that created the view.
+ */
+ private int mTouchSlop;
// Used for debug only
static long sInstanceCount = 0;
@@ -1777,6 +1794,7 @@
mResources = context != null ? context.getResources() : null;
mViewFlags = SOUND_EFFECTS_ENABLED | HAPTIC_FEEDBACK_ENABLED;
++sInstanceCount;
+ mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
/**
@@ -3951,7 +3969,7 @@
(event.getRepeatCount() == 0)) {
setPressed(true);
if ((mViewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) {
- postCheckForLongClick();
+ postCheckForLongClick(0);
}
return true;
}
@@ -4174,7 +4192,8 @@
(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
- if ((mPrivateFlags & PRESSED) != 0) {
+ boolean prepressed = (mPrivateFlags & PREPRESSED) != 0;
+ if ((mPrivateFlags & PRESSED) != 0 || prepressed) {
// take focus if we don't have it already and we should in
// touch mode.
boolean focusTaken = false;
@@ -4196,24 +4215,31 @@
mUnsetPressedState = new UnsetPressedState();
}
- if (!post(mUnsetPressedState)) {
+ if (prepressed) {
+ mPrivateFlags |= PRESSED;
+ refreshDrawableState();
+ postDelayed(mUnsetPressedState,
+ ViewConfiguration.getPressedStateDuration());
+ } else if (!post(mUnsetPressedState)) {
// If the post failed, unpress right now
mUnsetPressedState.run();
}
+ removeTapCallback();
}
break;
case MotionEvent.ACTION_DOWN:
- mPrivateFlags |= PRESSED;
- refreshDrawableState();
- if ((mViewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) {
- postCheckForLongClick();
+ if (mPendingCheckForTap == null) {
+ mPendingCheckForTap = new CheckForTap();
}
+ mPrivateFlags |= PREPRESSED;
+ postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout());
break;
case MotionEvent.ACTION_CANCEL:
mPrivateFlags &= ~PRESSED;
refreshDrawableState();
+ removeTapCallback();
break;
case MotionEvent.ACTION_MOVE:
@@ -4221,25 +4247,19 @@
final int y = (int) event.getY();
// Be lenient about moving outside of buttons
- int slop = ViewConfiguration.get(mContext).getScaledTouchSlop();
+ int slop = mTouchSlop;
if ((x < 0 - slop) || (x >= getWidth() + slop) ||
(y < 0 - slop) || (y >= getHeight() + slop)) {
// Outside button
+ removeTapCallback();
if ((mPrivateFlags & PRESSED) != 0) {
- // Remove any future long press checks
+ // Remove any future long press/tap checks
removeLongPressCallback();
// Need to switch from pressed to not pressed
mPrivateFlags &= ~PRESSED;
refreshDrawableState();
}
- } else {
- // Inside button
- if ((mPrivateFlags & PRESSED) == 0) {
- // Need to switch from not pressed to pressed
- mPrivateFlags |= PRESSED;
- refreshDrawableState();
- }
}
break;
}
@@ -4257,6 +4277,16 @@
removeCallbacks(mPendingCheckForLongPress);
}
}
+
+ /**
+ * Remove the tap detection timer.
+ */
+ private void removeTapCallback() {
+ if (mPendingCheckForTap != null) {
+ mPrivateFlags &= ~PREPRESSED;
+ removeCallbacks(mPendingCheckForTap);
+ }
+ }
/**
* Cancels a pending long press. Your subclass can use this if you
@@ -8427,14 +8457,15 @@
}
}
- private void postCheckForLongClick() {
+ private void postCheckForLongClick(int delayOffset) {
mHasPerformedLongPress = false;
if (mPendingCheckForLongPress == null) {
mPendingCheckForLongPress = new CheckForLongPress();
}
mPendingCheckForLongPress.rememberWindowAttachCount();
- postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout());
+ postDelayed(mPendingCheckForLongPress,
+ ViewConfiguration.getLongPressTimeout() - delayOffset);
}
private static int[] stateSetUnion(final int[] stateSet1,
@@ -8611,6 +8642,17 @@
mOriginalWindowAttachCount = mWindowAttachCount;
}
}
+
+ private final class CheckForTap implements Runnable {
+ public void run() {
+ mPrivateFlags &= ~PREPRESSED;
+ mPrivateFlags |= PRESSED;
+ refreshDrawableState();
+ if ((mViewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) {
+ postCheckForLongClick(ViewConfiguration.getTapTimeout());
+ }
+ }
+ }
/**
* Interface definition for a callback to be invoked when a key event is
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 993048f..2344c42 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -49,7 +49,7 @@
* Defines the duration in milliseconds of the pressed state in child
* components.
*/
- private static final int PRESSED_STATE_DURATION = 85;
+ private static final int PRESSED_STATE_DURATION = 125;
/**
* Defines the duration in milliseconds before a press turns into
@@ -69,7 +69,7 @@
* is a tap or a scroll. If the user does not move within this interval, it is
* considered to be a tap.
*/
- private static final int TAP_TIMEOUT = 100;
+ private static final int TAP_TIMEOUT = 115;
/**
* Defines the duration in milliseconds we will wait to see if a touch event
diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java
index 703a38f..d5e9af4 100644
--- a/core/java/android/view/ViewStub.java
+++ b/core/java/android/view/ViewStub.java
@@ -207,9 +207,11 @@
} else {
throw new IllegalStateException("setVisibility called on un-referenced view");
}
- } else if (visibility == VISIBLE || visibility == INVISIBLE) {
+ } else {
super.setVisibility(visibility);
- inflate();
+ if (visibility == VISIBLE || visibility == INVISIBLE) {
+ inflate();
+ }
}
}
@@ -244,7 +246,7 @@
parent.addView(view, index);
}
- mInflatedViewRef = new WeakReference(view);
+ mInflatedViewRef = new WeakReference<View>(view);
if (mInflateListener != null) {
mInflateListener.onInflate(this, view);
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 5d3840a..bbe9c1f 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -662,6 +662,14 @@
public boolean finishAnimationLw();
/**
+ * Return true if it is okay to perform animations for an app transition
+ * that is about to occur. You may return false for this if, for example,
+ * the lock screen is currently displayed so the switch should happen
+ * immediately.
+ */
+ public boolean allowAppAnimationsLw();
+
+ /**
* Called after the screen turns off.
*
* @param why {@link #OFF_BECAUSE_OF_USER} or
@@ -675,6 +683,11 @@
public void screenTurnedOn();
/**
+ * Return whether the screen is currently on.
+ */
+ public boolean isScreenOn();
+
+ /**
* Perform any initial processing of a low-level input event before the
* window manager handles special keys and generates a high-level event
* that is dispatched to the application.
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index b36fa8d..1337bed 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -339,6 +339,7 @@
// loadType is not used yet
if (isMainFrame) {
mCommitted = true;
+ mWebViewCore.getWebView().mViewManager.postResetStateAll();
}
}
diff --git a/core/java/android/webkit/DebugFlags.java b/core/java/android/webkit/DebugFlags.java
index 8e25395..dca52f6 100644
--- a/core/java/android/webkit/DebugFlags.java
+++ b/core/java/android/webkit/DebugFlags.java
@@ -32,6 +32,8 @@
public static final boolean CALLBACK_PROXY = false;
public static final boolean COOKIE_MANAGER = false;
public static final boolean COOKIE_SYNC_MANAGER = false;
+ public static final boolean DRAG_TRACKER = false;
+ public static final String DRAG_TRACKER_LOGTAG = "skia";
public static final boolean FRAME_LOADER = false;
public static final boolean J_WEB_CORE_JAVA_BRIDGE = false;// HIGHLY VERBOSE
public static final boolean LOAD_LISTENER = false;
diff --git a/core/java/android/webkit/ViewManager.java b/core/java/android/webkit/ViewManager.java
index 6a838c3..75db0a0 100644
--- a/core/java/android/webkit/ViewManager.java
+++ b/core/java/android/webkit/ViewManager.java
@@ -16,7 +16,6 @@
package android.webkit;
-import android.content.Context;
import android.view.View;
import android.widget.AbsoluteLayout;
@@ -26,6 +25,7 @@
private final WebView mWebView;
private final ArrayList<ChildView> mChildren = new ArrayList<ChildView>();
private boolean mHidden;
+ private boolean mReadyToDraw;
class ChildView {
int x;
@@ -70,6 +70,9 @@
void attachViewOnUIThread(AbsoluteLayout.LayoutParams lp) {
mWebView.addView(mView, lp);
mChildren.add(this);
+ if (!mReadyToDraw) {
+ mView.setVisibility(View.GONE);
+ }
}
void removeView() {
@@ -154,4 +157,23 @@
}
mHidden = false;
}
+
+ void postResetStateAll() {
+ mWebView.mPrivateHandler.post(new Runnable() {
+ public void run() {
+ mReadyToDraw = false;
+ }
+ });
+ }
+
+ void postReadyToDrawAll() {
+ mWebView.mPrivateHandler.post(new Runnable() {
+ public void run() {
+ mReadyToDraw = true;
+ for (ChildView v : mChildren) {
+ v.mView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ }
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index d99f9f2..bfe5b41 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -25,6 +25,7 @@
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.Paint;
import android.graphics.Picture;
import android.graphics.Point;
import android.graphics.Rect;
@@ -772,12 +773,11 @@
init();
mCallbackProxy = new CallbackProxy(context, this);
+ mViewManager = new ViewManager(this);
mWebViewCore = new WebViewCore(context, this, mCallbackProxy, javascriptInterfaces);
mDatabase = WebViewDatabase.getInstance(context);
mScroller = new Scroller(context);
- mViewManager = new ViewManager(this);
-
mZoomButtonsController = new ZoomButtonsController(this);
mZoomButtonsController.setOnZoomListener(mZoomListener);
// ZoomButtonsController positions the buttons at the bottom, but in
@@ -2867,16 +2867,7 @@
return super.drawChild(canvas, child, drawingTime);
}
- @Override
- protected void onDraw(Canvas canvas) {
- // if mNativeClass is 0, the WebView has been destroyed. Do nothing.
- if (mNativeClass == 0) {
- return;
- }
- int saveCount = canvas.save();
- if (mTitleBar != null) {
- canvas.translate(0, (int) mTitleBar.getHeight());
- }
+ private void drawContent(Canvas canvas) {
// Update the buttons in the picture, so when we draw the picture
// to the screen, they are in the correct state.
// Tell the native side if user is a) touching the screen,
@@ -2886,9 +2877,25 @@
// If mNativeClass is 0, we should not reach here, so we do not
// need to check it again.
nativeRecordButtons(hasFocus() && hasWindowFocus(),
- mTouchMode == TOUCH_SHORTPRESS_START_MODE
- || mTrackballDown || mGotCenterDown, false);
+ mTouchMode == TOUCH_SHORTPRESS_START_MODE
+ || mTrackballDown || mGotCenterDown, false);
drawCoreAndCursorRing(canvas, mBackgroundColor, mDrawCursorRing);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ // if mNativeClass is 0, the WebView has been destroyed. Do nothing.
+ if (mNativeClass == 0) {
+ return;
+ }
+
+ int saveCount = canvas.save();
+ if (mTitleBar != null) {
+ canvas.translate(0, (int) mTitleBar.getHeight());
+ }
+ if (mDragTrackerHandler == null || !mDragTrackerHandler.draw(canvas)) {
+ drawContent(canvas);
+ }
canvas.restoreToCount(saveCount);
// Now draw the shadow.
@@ -3865,6 +3872,166 @@
private static final float MAX_SLOPE_FOR_DIAG = 1.5f;
private static final int MIN_BREAK_SNAP_CROSS_DISTANCE = 80;
+ private static int sign(float x) {
+ return x > 0 ? 1 : (x < 0 ? -1 : 0);
+ }
+
+ // if the page can scroll <= this value, we won't allow the drag tracker
+ // to have any effect.
+ private static final int MIN_SCROLL_AMOUNT_TO_DISABLE_DRAG_TRACKER = 4;
+
+ private class DragTrackerHandler {
+ private final DragTracker mProxy;
+ private final float mStartY, mStartX;
+ private final float mMinDY, mMinDX;
+ private final float mMaxDY, mMaxDX;
+ private float mCurrStretchY, mCurrStretchX;
+ private int mSX, mSY;
+
+ public DragTrackerHandler(float x, float y, DragTracker proxy) {
+ mProxy = proxy;
+
+ int docBottom = computeVerticalScrollRange() + getTitleHeight();
+ int viewTop = getScrollY();
+ int viewBottom = viewTop + getHeight();
+
+ mStartY = y;
+ mMinDY = -viewTop;
+ mMaxDY = docBottom - viewBottom;
+
+ if (DebugFlags.DRAG_TRACKER) {
+ Log.d(DebugFlags.DRAG_TRACKER_LOGTAG, " dragtracker y= " + y +
+ " up/down= " + mMinDY + " " + mMaxDY);
+ }
+
+ int docRight = computeHorizontalScrollRange();
+ int viewLeft = getScrollX();
+ int viewRight = viewLeft + getWidth();
+ mStartX = x;
+ mMinDX = -viewLeft;
+ mMaxDX = docRight - viewRight;
+
+ mProxy.onStartDrag(x, y);
+
+ // ensure we buildBitmap at least once
+ mSX = -99999;
+ }
+
+ private float computeStretch(float delta, float min, float max) {
+ float stretch = 0;
+ if (max - min > MIN_SCROLL_AMOUNT_TO_DISABLE_DRAG_TRACKER) {
+ if (delta < min) {
+ stretch = delta - min;
+ } else if (delta > max) {
+ stretch = delta - max;
+ }
+ }
+ return stretch;
+ }
+
+ public void dragTo(float x, float y) {
+ float sy = computeStretch(mStartY - y, mMinDY, mMaxDY);
+ float sx = computeStretch(mStartX - x, mMinDX, mMaxDX);
+
+ if (mCurrStretchX != sx || mCurrStretchY != sy) {
+ mCurrStretchX = sx;
+ mCurrStretchY = sy;
+ if (DebugFlags.DRAG_TRACKER) {
+ Log.d(DebugFlags.DRAG_TRACKER_LOGTAG, "---- stretch " + sx +
+ " " + sy);
+ }
+ if (mProxy.onStretchChange(sx, sy)) {
+ invalidate();
+ }
+ }
+ }
+
+ public void stopDrag() {
+ if (DebugFlags.DRAG_TRACKER) {
+ Log.d(DebugFlags.DRAG_TRACKER_LOGTAG, "----- stopDrag");
+ }
+ mProxy.onStopDrag();
+ }
+
+ private int hiddenHeightOfTitleBar() {
+ return getTitleHeight() - getVisibleTitleHeight();
+ }
+
+ // need a way to know if 565 or 8888 is the right config for
+ // capturing the display and giving it to the drag proxy
+ private Bitmap.Config offscreenBitmapConfig() {
+ // hard code 565 for now
+ return Bitmap.Config.RGB_565;
+ }
+
+ /* If the tracker draws, then this returns true, otherwise it will
+ return false, and draw nothing.
+ */
+ public boolean draw(Canvas canvas) {
+ if (mCurrStretchX != 0 || mCurrStretchY != 0) {
+ int sx = getScrollX();
+ int sy = getScrollY() - hiddenHeightOfTitleBar();
+
+ if (mSX != sx || mSY != sy) {
+ buildBitmap(sx, sy);
+ mSX = sx;
+ mSY = sy;
+ }
+
+ int count = canvas.save(Canvas.MATRIX_SAVE_FLAG);
+ canvas.translate(sx, sy);
+ mProxy.onDraw(canvas);
+ canvas.restoreToCount(count);
+ return true;
+ }
+ if (DebugFlags.DRAG_TRACKER) {
+ Log.d(DebugFlags.DRAG_TRACKER_LOGTAG, " -- draw false " +
+ mCurrStretchX + " " + mCurrStretchY);
+ }
+ return false;
+ }
+
+ private void buildBitmap(int sx, int sy) {
+ int w = getWidth();
+ int h = getViewHeight();
+ Bitmap bm = Bitmap.createBitmap(w, h, offscreenBitmapConfig());
+ Canvas canvas = new Canvas(bm);
+ canvas.translate(-sx, -sy);
+ drawContent(canvas);
+
+ if (DebugFlags.DRAG_TRACKER) {
+ Log.d(DebugFlags.DRAG_TRACKER_LOGTAG, "--- buildBitmap " + sx +
+ " " + sy + " " + w + " " + h);
+ }
+ mProxy.onBitmapChange(bm);
+ }
+ }
+
+ /** @hide */
+ public static class DragTracker {
+ public void onStartDrag(float x, float y) {}
+ public boolean onStretchChange(float sx, float sy) {
+ // return true to have us inval the view
+ return false;
+ }
+ public void onStopDrag() {}
+ public void onBitmapChange(Bitmap bm) {}
+ public void onDraw(Canvas canvas) {}
+ }
+
+ /** @hide */
+ public DragTracker getDragTracker() {
+ return mDragTracker;
+ }
+
+ /** @hide */
+ public void setDragTracker(DragTracker tracker) {
+ mDragTracker = tracker;
+ }
+
+ private DragTracker mDragTracker;
+ private DragTrackerHandler mDragTrackerHandler;
+
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mNativeClass == 0 || !isClickable() || !isLongClickable()) {
@@ -3963,6 +4130,10 @@
mLastTouchTime = eventTime;
mVelocityTracker = VelocityTracker.obtain();
mSnapScrollMode = SNAP_NONE;
+ if (mDragTracker != null) {
+ mDragTrackerHandler = new DragTrackerHandler(x, y,
+ mDragTracker);
+ }
break;
}
case MotionEvent.ACTION_MOVE: {
@@ -4132,6 +4303,10 @@
}
}
+ if (mDragTrackerHandler != null) {
+ mDragTrackerHandler.dragTo(x, y);
+ }
+
if (keepScrollBarsVisible) {
if (mHeldMotionless != MOTIONLESS_TRUE) {
mHeldMotionless = MOTIONLESS_TRUE;
@@ -4147,6 +4322,10 @@
break;
}
case MotionEvent.ACTION_UP: {
+ if (mDragTrackerHandler != null) {
+ mDragTrackerHandler.stopDrag();
+ mDragTrackerHandler = null;
+ }
mLastTouchUpTime = eventTime;
switch (mTouchMode) {
case TOUCH_DOUBLE_TAP_MODE: // double tap
@@ -4237,6 +4416,10 @@
break;
}
case MotionEvent.ACTION_CANCEL: {
+ if (mDragTrackerHandler != null) {
+ mDragTrackerHandler.stopDrag();
+ mDragTrackerHandler = null;
+ }
// we also use mVelocityTracker == null to tell us that we are
// not "moving around", so we can take the slower/prettier
// mode in the drawing code
@@ -5226,7 +5409,8 @@
final Point viewSize = draw.mViewPoint;
boolean useWideViewport = settings.getUseWideViewPort();
WebViewCore.RestoreState restoreState = draw.mRestoreState;
- if (restoreState != null) {
+ boolean hasRestoreState = restoreState != null;
+ if (hasRestoreState) {
mInZoomOverview = false;
mLastScale = mInitialScaleInPercent > 0
? mInitialScaleInPercent / 100.0f
@@ -5316,6 +5500,9 @@
if (draw.mFocusSizeChanged && inEditingMode()) {
mFocusSizeChanged = true;
}
+ if (hasRestoreState) {
+ mViewManager.postReadyToDrawAll();
+ }
break;
}
case WEBCORE_INITIALIZED_MSG_ID:
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index ce2637b..fc22f37 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1924,7 +1924,14 @@
if (mWebView == null) return;
- setupViewport(standardLoad || mRestoredScale > 0);
+ boolean updateRestoreState = standardLoad || mRestoredScale > 0;
+ setupViewport(updateRestoreState);
+ // if updateRestoreState is true, ViewManager.postReadyToDrawAll() will
+ // be called after the WebView restore the state. If updateRestoreState
+ // is false, start to draw now as it is ready.
+ if (!updateRestoreState) {
+ mWebView.mViewManager.postReadyToDrawAll();
+ }
// reset the scroll position, the restored offset and scales
mWebkitScrollX = mWebkitScrollY = mRestoredX = mRestoredY
diff --git a/core/java/android/widget/ImageButton.java b/core/java/android/widget/ImageButton.java
index d417e40..2fc29bc 100644
--- a/core/java/android/widget/ImageButton.java
+++ b/core/java/android/widget/ImageButton.java
@@ -44,11 +44,11 @@
* <pre>
* <?xml version="1.0" encoding="utf-8"?>
* <selector xmlns:android="http://schemas.android.com/apk/res/android">
- * <item android:drawable="@drawable/button_normal" /> <!-- default -->
* <item android:state_pressed="true"
* android:drawable="@drawable/button_pressed" /> <!-- pressed -->
* <item android:state_focused="true"
* android:drawable="@drawable/button_focused" /> <!-- focused -->
+ * <item android:drawable="@drawable/button_normal" /> <!-- default -->
* </selector></pre>
*
* <p>Save the XML file in your project {@code res/drawable/} folder and then
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index b574d45..e0d2cef 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -3080,13 +3080,19 @@
if (gainFocus && previouslyFocusedRect != null) {
previouslyFocusedRect.offset(mScrollX, mScrollY);
+ final ListAdapter adapter = mAdapter;
+ final int firstPosition = mFirstPosition;
+ // Don't cache the result of getChildCount here, it could change in layoutChildren.
+ if (adapter.getCount() < getChildCount() + firstPosition) {
+ mLayoutMode = LAYOUT_NORMAL;
+ layoutChildren();
+ }
+
// figure out which item should be selected based on previously
// focused rect
Rect otherRect = mTempRect;
int minDistance = Integer.MAX_VALUE;
final int childCount = getChildCount();
- final int firstPosition = mFirstPosition;
- final ListAdapter adapter = mAdapter;
for (int i = 0; i < childCount; i++) {
// only consider selectable views
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index b847e57..c115073 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -137,11 +137,21 @@
if (target != null && pendingIntent != null) {
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
- int[] pos = new int[2];
+ // Find target view location in screen coordinates and
+ // fill into PendingIntent before sending.
+ final float appScale = v.getContext().getResources()
+ .getCompatibilityInfo().applicationScale;
+ final int[] pos = new int[2];
v.getLocationOnScreen(pos);
- Intent intent = new Intent();
- intent.setSourceBounds(new Rect(pos[0], pos[1],
- pos[0]+v.getWidth(), pos[1]+v.getHeight()));
+
+ final Rect rect = new Rect();
+ rect.left = (int) (pos[0] * appScale + 0.5f);
+ rect.top = (int) (pos[1] * appScale + 0.5f);
+ rect.right = (int) ((pos[0] + v.getWidth()) * appScale + 0.5f);
+ rect.bottom = (int) ((pos[1] + v.getHeight()) * appScale + 0.5f);
+
+ final Intent intent = new Intent();
+ intent.setSourceBounds(rect);
try {
// TODO: Unregister this handler if PendingIntent.FLAG_ONE_SHOT?
v.getContext().startIntentSender(
diff --git a/core/java/com/android/internal/os/LoggingPrintStream.java b/core/java/com/android/internal/os/LoggingPrintStream.java
index b3d6f20..451340b 100644
--- a/core/java/com/android/internal/os/LoggingPrintStream.java
+++ b/core/java/com/android/internal/os/LoggingPrintStream.java
@@ -16,11 +16,17 @@
package com.android.internal.os;
-import java.io.PrintStream;
-import java.io.OutputStream;
import java.io.IOException;
-import java.util.Locale;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.CodingErrorAction;
import java.util.Formatter;
+import java.util.Locale;
/**
* A print stream which logs output line by line.
@@ -31,6 +37,27 @@
private final StringBuilder builder = new StringBuilder();
+ /**
+ * A buffer that is initialized when raw bytes are first written to this
+ * stream. It may contain the leading bytes of multi-byte characters.
+ * Between writes this buffer is always ready to receive data; ie. the
+ * position is at the first unassigned byte and the limit is the capacity.
+ */
+ private ByteBuffer encodedBytes;
+
+ /**
+ * A buffer that is initialized when raw bytes are first written to this
+ * stream. Between writes this buffer is always clear; ie. the position is
+ * zero and the limit is the capacity.
+ */
+ private CharBuffer decodedChars;
+
+ /**
+ * Decodes bytes to characters using the system default charset. Initialized
+ * when raw bytes are first written to this stream.
+ */
+ private CharsetDecoder decoder;
+
protected LoggingPrintStream() {
super(new OutputStream() {
public void write(int oneByte) throws IOException {
@@ -80,20 +107,48 @@
}
}
- /*
- * We have no idea of how these bytes are encoded, so just ignore them.
- */
+ public void write(int oneByte) {
+ write(new byte[] { (byte) oneByte }, 0, 1);
+ }
- /** Ignored. */
- public void write(int oneByte) {}
-
- /** Ignored. */
@Override
- public void write(byte buffer[]) {}
+ public void write(byte[] buffer) {
+ write(buffer, 0, buffer.length);
+ }
- /** Ignored. */
@Override
- public void write(byte bytes[], int start, int count) {}
+ public synchronized void write(byte bytes[], int start, int count) {
+ if (decoder == null) {
+ encodedBytes = ByteBuffer.allocate(80);
+ decodedChars = CharBuffer.allocate(80);
+ decoder = Charset.defaultCharset().newDecoder()
+ .onMalformedInput(CodingErrorAction.REPLACE)
+ .onUnmappableCharacter(CodingErrorAction.REPLACE);
+ }
+
+ int end = start + count;
+ while (start < end) {
+ // copy some bytes from the array to the long-lived buffer. This
+ // way, if we end with a partial character we don't lose it.
+ int numBytes = Math.min(encodedBytes.remaining(), end - start);
+ encodedBytes.put(bytes, start, numBytes);
+ start += numBytes;
+
+ encodedBytes.flip();
+ CoderResult coderResult;
+ do {
+ // decode bytes from the byte buffer into the char buffer
+ coderResult = decoder.decode(encodedBytes, decodedChars, false);
+
+ // copy chars from the char buffer into our string builder
+ decodedChars.flip();
+ builder.append(decodedChars);
+ decodedChars.clear();
+ } while (coderResult.isOverflow());
+ encodedBytes.compact();
+ }
+ flush(false);
+ }
/** Always returns false. */
@Override
diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java
index b7bb72d..57a28e6 100644
--- a/core/java/com/android/internal/os/RuntimeInit.java
+++ b/core/java/com/android/internal/os/RuntimeInit.java
@@ -58,6 +58,10 @@
/** true if commonInit() has been called */
private static boolean initialized;
+ private static IBinder mApplicationObject;
+
+ private static volatile boolean mCrashing = false;
+
/**
* Use this to log a message when a thread exits due to an uncaught
* exception. The framework catches these for the main threads, so
@@ -66,14 +70,30 @@
private static class UncaughtHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
try {
- Log.e(TAG, "Uncaught handler: thread " + t.getName()
- + " exiting due to uncaught exception");
- } catch (Throwable error) {
- // Ignore the throwable, since we're in the process of crashing anyway.
- // If we don't, the crash won't happen properly and the process will
- // be left around in a bad state.
+ // Don't re-enter -- avoid infinite loops if crash-reporting crashes.
+ if (mCrashing) return;
+ mCrashing = true;
+
+ if (mApplicationObject == null) {
+ Log.e(TAG, "*** FATAL EXCEPTION IN SYSTEM PROCESS: " + t.getName(), e);
+ } else {
+ Log.e(TAG, "FATAL EXCEPTION: " + t.getName(), e);
+ }
+
+ // Bring up crash dialog, wait for it to be dismissed
+ ActivityManagerNative.getDefault().handleApplicationCrash(
+ mApplicationObject, new ApplicationErrorReport.CrashInfo(e));
+ } catch (Throwable t2) {
+ try {
+ Log.e(TAG, "Error reporting crash", t2);
+ } catch (Throwable t3) {
+ // Even Log.e() fails! Oh well.
+ }
+ } finally {
+ // Try everything to make sure this process goes away.
+ Process.killProcess(Process.myPid());
+ System.exit(10);
}
- crash(TAG, e);
}
}
@@ -300,46 +320,22 @@
public static native int getQwertyKeyboard();
/**
- * Report a fatal error in the current process. If this is a user-process,
- * a dialog may be displayed informing the user of the error. This
- * function does not return; it forces the current process to exit.
+ * Report a serious error in the current process. May or may not cause
+ * the process to terminate (depends on system settings).
*
- * @param tag to use when logging the error
- * @param t exception that was generated by the error
+ * @param tag to record with the error
+ * @param t exception describing the error site and conditions
*/
- public static void crash(String tag, Throwable t) {
- if (mApplicationObject != null) {
- try {
- // Log exception.
- Log.e(TAG, Log.getStackTraceString(t));
-
- // Show a message to the user.
- IActivityManager am = ActivityManagerNative.getDefault();
- am.handleApplicationError(mApplicationObject, tag,
- new ApplicationErrorReport.CrashInfo(t));
- } catch (Throwable t2) {
- try {
- // Log exception as a string so we don't get in an infinite loop.
- Log.e(TAG, "Error reporting crash: " + Log.getStackTraceString(t2));
- } catch (Throwable t3) {
- // Do nothing, must be OOM so we can't format the message
- }
- } finally {
- // Try everything to make sure this process goes away.
+ public static void wtf(String tag, Throwable t) {
+ try {
+ if (ActivityManagerNative.getDefault().handleApplicationWtf(
+ mApplicationObject, tag, new ApplicationErrorReport.CrashInfo(t))) {
+ // The Activity Manager has already written us off -- now exit.
Process.killProcess(Process.myPid());
System.exit(10);
}
- } else {
- try {
- Log.e(TAG, "*** EXCEPTION IN SYSTEM PROCESS. System will crash.");
- Log.e(tag, Log.getStackTraceString(t));
- } catch (Throwable t2) {
- // Do nothing, must be OOM so we can't format the message
- } finally {
- // Try everything to make sure this process goes away.
- Process.killProcess(Process.myPid());
- System.exit(10);
- }
+ } catch (Throwable t2) {
+ Log.e(TAG, "Error reporting WTF", t2);
}
}
@@ -361,6 +357,4 @@
// Register handlers for DDM messages.
android.ddm.DdmRegister.registerHandlers();
}
-
- private static IBinder mApplicationObject;
}
diff --git a/core/java/com/google/android/util/SimplePullParser.java b/core/java/com/google/android/util/SimplePullParser.java
deleted file mode 100644
index 031790b..0000000
--- a/core/java/com/google/android/util/SimplePullParser.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.util;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.io.Reader;
-import java.io.Closeable;
-
-import android.util.Xml;
-import android.util.Log;
-
-/**
- * This is an abstraction of a pull parser that provides several benefits:<ul>
- * <li>it is easier to use robustly because it makes it trivial to handle unexpected tags (which
- * might have children)</li>
- * <li>it makes the handling of text (cdata) blocks more convenient</li>
- * <li>it provides convenient methods for getting a mandatory attribute (and throwing an exception
- * if it is missing) or an optional attribute (and using a default value if it is missing)
- * </ul>
- */
-public class SimplePullParser {
- public static final String TEXT_TAG = "![CDATA[";
-
- private String mLogTag = null;
- private final XmlPullParser mParser;
- private Closeable source;
- private String mCurrentStartTag;
-
- /**
- * Constructs a new SimplePullParser to parse the stream
- * @param stream stream to parse
- * @param encoding the encoding to use
- */
- public SimplePullParser(InputStream stream, String encoding)
- throws ParseException, IOException {
- try {
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, encoding);
- moveToStartDocument(parser);
- mParser = parser;
- mCurrentStartTag = null;
- source = stream;
- } catch (XmlPullParserException e) {
- throw new ParseException(e);
- }
- }
-
- /**
- * Constructs a new SimplePullParser to parse the xml
- * @param parser the underlying parser to use
- */
- public SimplePullParser(XmlPullParser parser) {
- mParser = parser;
- mCurrentStartTag = null;
- source = null;
- }
-
- /**
- * Constructs a new SimplePullParser to parse the xml
- * @param xml the xml to parse
- */
- public SimplePullParser(String xml) throws IOException, ParseException {
- this(new StringReader(xml));
- }
-
- /**
- * Constructs a new SimplePullParser to parse the xml
- * @param reader a reader containing the xml
- */
- public SimplePullParser(Reader reader) throws IOException, ParseException {
- try {
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(reader);
- moveToStartDocument(parser);
- mParser = parser;
- mCurrentStartTag = null;
- source = reader;
- } catch (XmlPullParserException e) {
- throw new ParseException(e);
- }
- }
-
- private static void moveToStartDocument(XmlPullParser parser)
- throws XmlPullParserException, IOException {
- int eventType;
- eventType = parser.getEventType();
- if (eventType != XmlPullParser.START_DOCUMENT) {
- throw new XmlPullParserException("Not at start of response");
- }
- }
-
- /**
- * Enables logging to the provided log tag. A basic representation of the xml will be logged as
- * the xml is parsed. No logging is done unless this is called.
- *
- * @param logTag the log tag to use when logging
- */
- public void setLogTag(String logTag) {
- mLogTag = logTag;
- }
-
- /**
- * Returns the tag of the next element whose depth is parentDepth plus one
- * or null if there are no more such elements before the next start tag. When this returns,
- * getDepth() and all methods relating to attributes will refer to the element whose tag is
- * returned.
- *
- * @param parentDepth the depth of the parrent of the item to be returned
- * @param textBuilder if null then text blocks will be ignored. If
- * non-null then text blocks will be added to the builder and TEXT_TAG
- * will be returned when one is found
- * @return the next of the next child element's tag, TEXT_TAG if a text block is found, or null
- * if there are no more child elements or DATA blocks
- * @throws IOException propogated from the underlying parser
- * @throws ParseException if there was an error parsing the xml.
- */
- public String nextTagOrText(int parentDepth, StringBuilder textBuilder)
- throws IOException, ParseException {
- while (true) {
- int eventType = 0;
- try {
- eventType = mParser.next();
- } catch (XmlPullParserException e) {
- throw new ParseException(e);
- }
- int depth = mParser.getDepth();
- mCurrentStartTag = null;
-
- if (eventType == XmlPullParser.START_TAG && depth == parentDepth + 1) {
- mCurrentStartTag = mParser.getName();
- if (mLogTag != null && Log.isLoggable(mLogTag, Log.DEBUG)) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < depth; i++) sb.append(" ");
- sb.append("<").append(mParser.getName());
- int count = mParser.getAttributeCount();
- for (int i = 0; i < count; i++) {
- sb.append(" ");
- sb.append(mParser.getAttributeName(i));
- sb.append("=\"");
- sb.append(mParser.getAttributeValue(i));
- sb.append("\"");
- }
- sb.append(">");
- Log.d(mLogTag, sb.toString());
- }
- return mParser.getName();
- }
-
- if (eventType == XmlPullParser.END_TAG && depth == parentDepth) {
- if (mLogTag != null && Log.isLoggable(mLogTag, Log.DEBUG)) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < depth; i++) sb.append(" ");
- sb.append("</>"); // Not quite valid xml but it gets the job done.
- Log.d(mLogTag, sb.toString());
- }
- return null;
- }
-
- if (eventType == XmlPullParser.END_DOCUMENT && parentDepth == 0) {
- // we could just rely on the caller calling close(), which it should, but try
- // to auto-close for clients that might have missed doing so.
- if (source != null) {
- source.close();
- source = null;
- }
- return null;
- }
-
- if (eventType == XmlPullParser.TEXT && depth == parentDepth) {
- if (textBuilder == null) {
- continue;
- }
- String text = mParser.getText();
- textBuilder.append(text);
- return TEXT_TAG;
- }
- }
- }
-
- /**
- * The same as nextTagOrTexxt(int, StringBuilder) but ignores text blocks.
- */
- public String nextTag(int parentDepth) throws IOException, ParseException {
- return nextTagOrText(parentDepth, null /* ignore text */);
- }
-
- /**
- * Returns the depth of the current element. The depth is 0 before the first
- * element has been returned, 1 after that, etc.
- *
- * @return the depth of the current element
- */
- public int getDepth() {
- return mParser.getDepth();
- }
-
- /**
- * Consumes the rest of the children, accumulating any text at this level into the builder.
- *
- * @param textBuilder the builder to contain any text
- * @throws IOException propogated from the XmlPullParser
- * @throws ParseException if there was an error parsing the xml.
- */
- public void readRemainingText(int parentDepth, StringBuilder textBuilder)
- throws IOException, ParseException {
- while (nextTagOrText(parentDepth, textBuilder) != null) {
- }
- }
-
- /**
- * Returns the number of attributes on the current element.
- *
- * @return the number of attributes on the current element
- */
- public int numAttributes() {
- return mParser.getAttributeCount();
- }
-
- /**
- * Returns the name of the nth attribute on the current element.
- *
- * @return the name of the nth attribute on the current element
- */
- public String getAttributeName(int i) {
- return mParser.getAttributeName(i);
- }
-
- /**
- * Returns the namespace of the nth attribute on the current element.
- *
- * @return the namespace of the nth attribute on the current element
- */
- public String getAttributeNamespace(int i) {
- return mParser.getAttributeNamespace(i);
- }
-
- /**
- * Returns the string value of the named attribute.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute
- * @param defaultValue the value to return if the attribute is not specified
- * @return the value of the attribute
- */
- public String getStringAttribute(
- String namespace, String name, String defaultValue) {
- String value = mParser.getAttributeValue(namespace, name);
- if (null == value) return defaultValue;
- return value;
- }
-
- /**
- * Returns the string value of the named attribute. An exception will
- * be thrown if the attribute is not present.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute @return the value of the attribute
- * @throws ParseException thrown if the attribute is missing
- */
- public String getStringAttribute(String namespace, String name) throws ParseException {
- String value = mParser.getAttributeValue(namespace, name);
- if (null == value) {
- throw new ParseException(
- "missing '" + name + "' attribute on '" + mCurrentStartTag + "' element");
- }
- return value;
- }
-
- /**
- * Returns the string value of the named attribute. An exception will
- * be thrown if the attribute is not a valid integer.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute
- * @param defaultValue the value to return if the attribute is not specified
- * @return the value of the attribute
- * @throws ParseException thrown if the attribute not a valid integer.
- */
- public int getIntAttribute(String namespace, String name, int defaultValue)
- throws ParseException {
- String value = mParser.getAttributeValue(namespace, name);
- if (null == value) return defaultValue;
- try {
- return Integer.parseInt(value);
- } catch (NumberFormatException e) {
- throw new ParseException("Cannot parse '" + value + "' as an integer");
- }
- }
-
- /**
- * Returns the string value of the named attribute. An exception will
- * be thrown if the attribute is not present or is not a valid integer.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute @return the value of the attribute
- * @throws ParseException thrown if the attribute is missing or not a valid integer.
- */
- public int getIntAttribute(String namespace, String name)
- throws ParseException {
- String value = getStringAttribute(namespace, name);
- try {
- return Integer.parseInt(value);
- } catch (NumberFormatException e) {
- throw new ParseException("Cannot parse '" + value + "' as an integer");
- }
- }
-
- /**
- * Returns the string value of the named attribute. An exception will
- * be thrown if the attribute is not a valid long.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute @return the value of the attribute
- * @throws ParseException thrown if the attribute is not a valid long.
- */
- public long getLongAttribute(String namespace, String name, long defaultValue)
- throws ParseException {
- String value = mParser.getAttributeValue(namespace, name);
- if (null == value) return defaultValue;
- try {
- return Long.parseLong(value);
- } catch (NumberFormatException e) {
- throw new ParseException("Cannot parse '" + value + "' as a long");
- }
- }
-
- /**
- * Close this SimplePullParser and any underlying resources (e.g., its InputStream or
- * Reader source) used by this SimplePullParser.
- */
- public void close() {
- if (source != null) {
- try {
- source.close();
- } catch (IOException ioe) {
- // ignore
- }
- }
- }
-
- /**
- * Returns the string value of the named attribute. An exception will
- * be thrown if the attribute is not present or is not a valid long.
- *
- * @param namespace the namespace of the attribute
- * @param name the name of the attribute @return the value of the attribute
- * @throws ParseException thrown if the attribute is missing or not a valid long.
- */
- public long getLongAttribute(String namespace, String name)
- throws ParseException {
- String value = getStringAttribute(namespace, name);
- try {
- return Long.parseLong(value);
- } catch (NumberFormatException e) {
- throw new ParseException("Cannot parse '" + value + "' as a long");
- }
- }
-
- public static final class ParseException extends Exception {
- public ParseException(String message) {
- super(message);
- }
-
- public ParseException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public ParseException(Throwable cause) {
- super(cause);
- }
- }
-}
diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp
index fde6ca6..d89a7e6 100644
--- a/core/jni/android_text_format_Time.cpp
+++ b/core/jni/android_text_format_Time.cpp
@@ -382,7 +382,7 @@
jchar c = s[spos];
if (c != expected) {
char msg[100];
- sprintf(msg, "Unexpected %c at pos=%d. Expected %c.", c, spos,
+ sprintf(msg, "Unexpected character 0x%02x at pos=%d. Expected %c.", c, spos,
expected);
jniThrowException(env, "android/util/TimeFormatException", msg);
return false;
@@ -483,6 +483,12 @@
int n;
jboolean inUtc = false;
+ if (len < 10) {
+ jniThrowException(env, "android/util/TimeFormatException",
+ "Time input is too short; must be at least 10 characters");
+ return false;
+ }
+
// year
n = get_char(env, s, 0, 1000, &thrown);
n += get_char(env, s, 1, 100, &thrown);
@@ -510,7 +516,7 @@
if (thrown) return false;
env->SetIntField(This, g_mdayField, n);
- if (len >= 17) {
+ if (len >= 19) {
// T
if (!check_char(env, s, 10, 'T')) return false;
@@ -541,10 +547,19 @@
if (thrown) return false;
env->SetIntField(This, g_secField, n);
- // skip the '.XYZ' -- we don't care about subsecond precision.
+ // skip the '.XYZ' -- we don't care about subsecond precision.
+ int tz_index = 19;
+ if (tz_index < len && s[tz_index] == '.') {
+ do {
+ tz_index++;
+ } while (tz_index < len
+ && s[tz_index] >= '0'
+ && s[tz_index] <= '9');
+ }
+
int offset = 0;
- if (len >= 23) {
- char c = s[23];
+ if (len > tz_index) {
+ char c = s[tz_index];
// NOTE: the offset is meant to be subtracted to get from local time
// to UTC. we therefore use 1 for '-' and -1 for '+'.
@@ -561,27 +576,34 @@
break;
default:
char msg[100];
- sprintf(msg, "Unexpected %c at position 19. Expected + or -",
- c);
+ sprintf(msg, "Unexpected character 0x%02x at position %d. Expected + or -",
+ c, tz_index);
jniThrowException(env, "android/util/TimeFormatException", msg);
return false;
}
inUtc = true;
if (offset != 0) {
+ if (len < tz_index + 5) {
+ char msg[100];
+ sprintf(msg, "Unexpected length; should be %d characters", tz_index + 5);
+ jniThrowException(env, "android/util/TimeFormatException", msg);
+ return false;
+ }
+
// hour
- n = get_char(env, s, 24, 10, &thrown);
- n += get_char(env, s, 25, 1, &thrown);
+ n = get_char(env, s, tz_index + 1, 10, &thrown);
+ n += get_char(env, s, tz_index + 2, 1, &thrown);
if (thrown) return false;
n *= offset;
hour += n;
// :
- if (!check_char(env, s, 26, ':')) return false;
+ if (!check_char(env, s, tz_index + 3, ':')) return false;
// minute
- n = get_char(env, s, 27, 10, &thrown);
- n += get_char(env, s, 28, 1, &thrown);
+ n = get_char(env, s, tz_index + 4, 10, &thrown);
+ n += get_char(env, s, tz_index + 5, 1, &thrown);
if (thrown) return false;
n *= offset;
minute += n;
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 4a7adcc..72ad324 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -403,7 +403,13 @@
android:label="@string/permlab_recordAudio"
android:description="@string/permdesc_recordAudio" />
- <!-- Required to be able to access the camera device. -->
+ <!-- Required to be able to access the camera device.
+ <p>This will automatically enforce the <a
+ href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+ <uses-feature>}</a> manifest element for <em>all</em> camera features.
+ If you do not require all camera features or can properly operate if a camera
+ is not available, then you must modify your manifest as appropriate in order to
+ install on devices that don't support all camera features.</p> -->
<permission android:name="android.permission.CAMERA"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="dangerous"
diff --git a/core/res/res/anim/lock_screen_enter.xml b/core/res/res/anim/lock_screen_enter.xml
new file mode 100644
index 0000000..dd47ff8
--- /dev/null
+++ b/core/res/res/anim/lock_screen_enter.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2007, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@anim/decelerate_interpolator">
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/lock_screen_exit.xml b/core/res/res/anim/lock_screen_exit.xml
index 58bc6db..077fc6b 100644
--- a/core/res/res/anim/lock_screen_exit.xml
+++ b/core/res/res/anim/lock_screen_exit.xml
@@ -17,7 +17,8 @@
*/
-->
-<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/accelerate_interpolator">
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@anim/accelerate_interpolator">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_longAnimTime" />
</set>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
index 45e96a3..2a23ada 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -16,59 +16,55 @@
** limitations under the License.
*/
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
+ android:orientation="vertical"
android:background="@android:color/background_dark"
- >
+ android:gravity="center_horizontal">
<LinearLayout android:id="@+id/topDisplayGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:orientation="vertical"
- >
+ android:orientation="vertical">
<!-- header text ('Enter Pin Code') -->
<TextView android:id="@+id/headerText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="9dip"
android:gravity="center"
android:lines="2"
- android:textAppearance="?android:attr/textAppearanceLarge"
- />
+ android:textAppearance="?android:attr/textAppearanceLarge"/>
- <RelativeLayout
+ <!-- password entry -->
+ <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="18dip"
+ android:orientation="horizontal"
android:layout_marginRight="6dip"
android:layout_marginLeft="6dip"
- android:background="@android:drawable/edit_text"
- >
+ android:gravity="center_vertical"
+ android:background="@android:drawable/edit_text">
<!-- displays dots as user enters pin -->
<TextView android:id="@+id/pinDisplay"
- android:layout_width="wrap_content"
- android:layout_height="64dip"
- android:layout_centerInParent="true"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceLargeInverse"
android:textStyle="bold"
android:inputType="textPassword"
- />
+ />
<ImageButton android:id="@+id/backspace"
android:src="@android:drawable/ic_input_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:layout_marginRight="1dip"
- />
- </RelativeLayout>
-
+ android:layout_marginRight="-3dip"
+ android:layout_marginBottom="-3dip"
+ />
+ </LinearLayout>
</LinearLayout>
@@ -78,16 +74,14 @@
android:layout_height="wrap_content"
android:layout_below="@id/topDisplayGroup"
android:layout_marginTop="10dip"
- android:orientation="vertical"
- >
+ android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="64dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
- android:orientation="horizontal"
- >
+ android:orientation="horizontal">
<Button android:id="@+id/one"
android:layout_width="0sp"
@@ -125,8 +119,7 @@
android:layout_height="64dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
- android:orientation="horizontal"
- >
+ android:orientation="horizontal">
<Button android:id="@+id/four"
android:layout_width="0sp"
@@ -164,8 +157,7 @@
android:layout_height="64dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
- android:orientation="horizontal"
- >
+ android:orientation="horizontal">
<Button android:id="@+id/seven"
android:layout_width="0sp"
@@ -203,8 +195,7 @@
android:layout_height="64dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
- android:orientation="horizontal"
- >
+ android:orientation="horizontal">
<Button android:id="@+id/ok"
android:layout_width="0sp"
@@ -242,27 +233,33 @@
<!-- end keypad -->
</LinearLayout>
-
- <!-- emergency call button -->
- <Button
- android:id="@+id/emergencyCall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
-
<!-- spacer below keypad -->
<View
android:id="@+id/spacerBottom"
android:layout_width="fill_parent"
android:layout_height="1dip"
- android:layout_marginBottom="6dip"
+ android:layout_marginTop="6dip"
android:layout_above="@id/emergencyCall"
- android:background="@android:drawable/divider_horizontal_dark"/>
+ android:background="@android:drawable/divider_horizontal_dark"
+ />
+ <!-- The emergency button should take the rest of the space and be centered vertically -->
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:orientation="vertical">
-</RelativeLayout>
+ <!-- emergency call button -->
+ <Button
+ android:id="@+id/emergencyCall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:drawableLeft="@android:drawable/ic_emergency"
+ android:drawablePadding="8dip"
+ android:text="@android:string/lockscreen_emergency_call"
+ />
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index b155769..f2b52d9 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -101,6 +101,7 @@
<!-- Standard animations for a non-full-screen window or activity. -->
<style name="Animation.LockScreen">
+ <item name="windowEnterAnimation">@anim/lock_screen_enter</item>
<item name="windowExitAnimation">@anim/lock_screen_exit</item>
</style>
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index e508392..63bb934 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -7,17 +7,20 @@
<dd>
<pre class="stx">
<uses-feature android:<a href="#glEsVersion">glEsVersion</a>="<em>integer</em>"
- android:<a href="#name">name</a>="<em>string</em>" />
+ android:<a href="#name">name</a>="<em>string</em>"
+ android:<a href="#required">required</a>=["true" | "false"] />
</pre>
</dd>
<dt>contained in:</dt>
-<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd>
+<dd><code><a
+href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd>
<dt>description:</dt>
<dd>This element declares a specific feature used by the application.
Android provides some features that may not be equally supported by all
-Android devices. In a manner similar to the <code><a href="uses-sdk-element.html"><uses-sdk></a></code>
+Android devices. In a manner similar to the <code><a
+href="uses-sdk-element.html"><uses-sdk></a></code>
element, this element allows an application to specify which device-variable
features it uses. In this way, the application
will not be installed on devices that do not offer the feature.</p>
@@ -27,14 +30,14 @@
installation of the application.</p>
<p>In order to maintain strict device compatibility, it's very important that you use
-this element to declare all features that your application uses. Failure to declare
-a feature may result your application being installed on a device
+this element to declare all applicable features (listed below) that your application uses. Failure
+to declare a feature may result in your application being installed on a device
that does not support the feature and your application failing.</p>
<p>For some features, there may exist a specfic attribute that allows you to define
a version of the feature, such as the version of Open GL used (declared with
<a href="#glEsVersion">{@code glEsVersion}</a>). Other features that either do or do not
-exist for a device, such as camera auto-focus, are declared using the
+exist for a device, such as a camera, are declared using the
<a href="#name">{@code name}</a> attribute.</p>
<p>Any software or hardware features that may vary among Android-powered
@@ -47,13 +50,12 @@
<uses-feature android:name="android.hardware.camera" />
</pre>
-<p>If you declare "android.hardware.camera", then your application is considered
-compatible with all devices that include a camera, regardless of whether auto-focus is
-available or not. If you also use the auto-focus features (available through the {@link
-android.hardware.Camera Camera API}), then you need to include an additional
-{@code <uses-feature>} element that declares the "android.hardware.camera.autofocus"
+<p>If you declare {@code android.hardware.camera} this way, then your application is considered
+compatible with all devices that include a camera. If your application also uses auto-focus
+features, then you also need to include a
+{@code <uses-feature>} element that declares the {@code android.hardware.camera.autofocus}
feature. Also note that you must still request the {@link android.Manifest.permission#CAMERA
-CAMERA permission}. Requesting permission grants your application access to the
+CAMERA} permission. Requesting the permission grants your application access to the
appropriate hardware and software, while declaring the features used by
your application ensures proper device compatibility.</p>
@@ -75,50 +77,113 @@
<dt>attributes:</dt>
<dd>
-<dl class="attr"><dt><a name="glEsVersion"></a>{@code android:glEsVersion}</dt>
+<dl class="attr">
+ <dt><a name="glEsVersion"></a>{@code android:glEsVersion}</dt>
<dd>The GLES version needed by the application.
The higher 16 bits represent the major number and the lower 16 bits
- represent the minor number. For example, for GL 1.2 referring to
- 0x00000102, the actual value should be set as 0x00010002.
+ represent the minor number. For example, for GL 1.2,
+ the value should be set as {@code 0x00010002}.
</dd>
-</dl>
-</dd>
-<dd>
-<dl class="attr"><dt><a name="name"></a>{@code android:name}</dt>
+ <dt><a name="name"></a>{@code android:name}</dt>
<dd>The name of a feature required by the application.
The value must be one of the following accepted strings:
-
- <table>
+
+ <table>
<tr>
<th>Feature</th>
<th>Value</th>
<th>Description</th>
- </tr><tr>
- <td rowspan="3">Camera</td>
- <td>"{@code android.hardware.camera}"</td>
+ </tr><tr>
+ <td rowspan="2">Camera</td>
+ <td>{@code android.hardware.camera}</td>
<td>The application requires a camera.</td>
- </tr><tr>
- <td>"{@code android.hardware.camera.autofocus}"</td>
- <td>The application requires a camera with auto-focus capability.
- As a prerequisite, "{@code android.hardware.camera}" must also be declared
- with a separate {@code <uses-feature>} element.
- </td>
- <tr>
+ </tr><tr>
<td colspan="2">
<strong>Note:</strong> Any application that requests the
- {@link android.Manifest.permission#CAMERA CAMERA permission} but does <em>not</em>
+ {@link android.Manifest.permission#CAMERA} permission but does <em>not</em>
declare any camera features with the {@code <uses-feature>} element will be assumed
- to use all camera features (such as auto-focus). Thus, the application will not
- be compatible with devices that do not support all features. Please use
- {@code <uses-feature>} to declare only the camera features that your
- application needs.
+ to use all camera features (auto-focus and flash). Thus, the application will not
+ be compatible with devices that do not support all camera features. Please use
+ {@code <uses-feature>} to declare only the camera features that your
+ application does need. For instance, if you request the
+ {@link android.Manifest.permission#CAMERA} permission, but you do not need auto-focus or
+ flash, then declare only the {@code android.hardware.camera} feature—the other
+ camera features that you do not request will no longer be assumed as required.
</td>
- </tr>
+ </tr><tr>
+ <td>Camera auto-focus</td>
+ <td>{@code android.hardware.camera.autofocus}</td>
+ <td>The application requires a camera with auto-focus capability.
+ As a prerequisite, {@code android.hardware.camera} must also be declared
+ with a separate {@code <uses-feature>} element.
+ </td>
+ </tr><tr>
+ <td>Camera flash</td>
+ <td>{@code android.hardware.camera.flash}</td>
+ <td>The application requires a camera with a flash.
+ As a prerequisite, both {@code android.hardware.camera} and {@code
+ android.hardware.camera.autofocus} must also be declared
+ with separate {@code <uses-feature>} elements.
+ </td>
+ </tr><tr>
+ <td>Light sensor</td>
+ <td>{@code android.hardware.sensor.light}</td>
+ <td>The application requires a device with a light sensor.
+ </td>
+ </tr><tr>
+ <td>Proximity sensor</td>
+ <td>{@code android.hardware.sensor.proximity}</td>
+ <td>The application requires a device with a proximity sensor.
+ </td>
+ </tr><tr>
+ <td>Multitouch screen</td>
+ <td>{@code android.hardware.touchscreen.multitouch}</td>
+ <td>The application requires a device that supports multitouch.
+ </td>
+ </tr><tr>
+ <td>Telephony</td>
+ <td>{@code android.hardware.telephony}</td>
+ <td>The application requires a device that includes a telephony radio with data
+ communication services.
+ </td>
+ </tr><tr>
+ <td>CDMA telephony</td>
+ <td>{@code android.hardware.telephony.cdma}</td>
+ <td>The application requires a device that includes a CDMA telephony radio. As a
+ prerequisite, {@code android.hardware.telephony} must also be declared
+ with a separate {@code <uses-feature>} element.
+ </td>
+ </tr><tr>
+ <td>GSM telephony</td>
+ <td>{@code android.hardware.telephony.gsm}</td>
+ <td>The application requires a device that includes a GSM telephony radio. As a
+ prerequisite, {@code android.hardware.telephony} must also be declared
+ with a separate {@code <uses-feature>} element.
+ </td>
</tr>
</table>
-
</dd>
+
+ <dt><a name="required"></a>{@code android:required}</dt> <!-- added in api level 5 -->
+ <dd>Indicates whether the feature is required by the application. This is
+ {@code true} by default. <strong>You should not use this attribute for most cases.</strong>
+ </p>
+
+ <p>The only situation in which you should set this attribute {@code false} is when your
+ application requests the {@link android.Manifest.permission#CAMERA} permission, but will degrade
+ gracefully and perform without failure if the device does not have a camera. In this situation,
+ you must declare the {@code android.hardware.camera} feature and set the {@code required}
+ attribute {@code false}. This is necessary because the {@link
+ android.Manifest.permission#CAMERA} permission will automatically turn on the requirement for
+ all camera features. So if your application uses this permission but is still compatible with
+ devices without a camera, then you must set the {@code required} attribute {@code false} for
+ {@code android.hardware.camera} or else it will not install on devices without a camera. Note
+ that, while the permission will enable the requirement for <em>all</em> camera features, you
+ only need to off the requirement for the basic camera feature.</p>
+
+ </dd>
+
</dl>
</dd>
diff --git a/docs/html/guide/topics/wireless/bluetooth.jd b/docs/html/guide/topics/wireless/bluetooth.jd
index 8a0efc9..80aa0d7 100644
--- a/docs/html/guide/topics/wireless/bluetooth.jd
+++ b/docs/html/guide/topics/wireless/bluetooth.jd
@@ -34,6 +34,12 @@
<li><a href="#ManagingAConnection">Managing a Connection</a></li>
</ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample
+ app</a></li>
+ </ol>
+
</div>
</div>
@@ -826,4 +832,7 @@
This should always be called when you're done using the Bluetooth
connection.</p>
-
+<div class="special">
+<p>For a complete demonstration using the Bluetooth APIs, see the <a
+href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample app</a>.</p>
+</div>
diff --git a/docs/html/guide/topics/wireless/index.jd b/docs/html/guide/topics/wireless/index.jd
index a3a2b363f..23d2f0f 100644
--- a/docs/html/guide/topics/wireless/index.jd
+++ b/docs/html/guide/topics/wireless/index.jd
@@ -1,8 +1,9 @@
page.title=Wireless Controls
@jd:body
+Go away.
-
+<!--
<h2>Wi-Fi</h2>
<p>The Wi-Fi APIs provide a means by which application can communicate with the lower-level
wireless stack that provides Wi-Fi network access. Almost all information from the device supplicant
@@ -12,8 +13,11 @@
<h2>Bluetooth</h2>
-<p>The Bluetooth APIs allow applications to scan, connect and pair with other Bluetooth devices.
-THESE APIS ARE NOT YET AVAILABLE.</p>
-
+<p>The Android platform includes support for the Bluetooth network stack, which allows a device to
+wirelessly exchange data with other Bluetooth devices. The application framework provides access to
+the Bluetooth functionality through the Android Bluetooth APIs. These APIs let applications
+wirelessly connect to other Bluetooth devices, enabling point-to-point and multipoint wireless
+features.</p>
+-->
diff --git a/docs/html/guide/topics/wireless/wifi.jd b/docs/html/guide/topics/wireless/wifi.jd
index 520feafe..761e463 100644
--- a/docs/html/guide/topics/wireless/wifi.jd
+++ b/docs/html/guide/topics/wireless/wifi.jd
@@ -15,4 +15,4 @@
</div>
-TODO
\ No newline at end of file
+Go away.
\ No newline at end of file
diff --git a/docs/html/index.jd b/docs/html/index.jd
index d340793..b9854c9 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -20,7 +20,8 @@
</div> <!-- end annoucement -->
</div> <!-- end annoucement-block -->
</div><!-- end topAnnouncement -->
- <div id="carouselMain" style="height:215px"> <!-- this height can be adjusted based on the content height -->
+ <div id="carouselMain" style="height:200px"> <!-- this height can be
+ adjusted based on the content height -->
</div>
<div class="clearer"></div>
<div id="carouselWheel">
@@ -126,18 +127,17 @@
'sdk': {
'layout':"imgLeft",
'icon':"sdk-small.png",
- 'name':"Android 2.0.1",
- 'img':"eclair-android.png",
- 'title':"Android 2.0.1",
- 'desc': "<p>Android 2.0.1 is a minor platform update to Android 2.0. "
- + "For information about what's included in the new platform, read "
- + "the <a href='{@docRoot}sdk/android-2.0.1.html'>Android 2.0.1 "
+ 'name':"Android 2.1",
+ 'img':"sdk-large.png",
+ 'title':"Android 2.1 is now available",
+ 'desc': "<p>Android 2.1 is a small feature release that includes new developer APIs "
+ + "and documentation. For information about what's included in the platform, "
+ + "read the <a href='{@docRoot}sdk/android-2.1.html'>Android 2.1 "
+ "version notes</a>.</p>"
- + "<p>You can update your existing environment "
- + "by installing the Android 2.0.1 platform and updated tools as"
- + " <a href='{@docRoot}sdk/adding-components.html'>SDK "
- + "components</a>. Otherwise, "
- + "<a href='{@docRoot}sdk/index.html'>download a new Android SDK</a>.</p>"
+ + "<p>You can update your existing development environment "
+ + "by installing the Android 2.1 platform as an "
+ + "<a href='{@docRoot}sdk/adding-components.html'>SDK "
+ + "component</a>."
},
'devphone': {
diff --git a/docs/html/robots.txt b/docs/html/robots.txt
index 878996f..503e4b1 100644
--- a/docs/html/robots.txt
+++ b/docs/html/robots.txt
@@ -12,4 +12,6 @@
Disallow: /sdk/1.5_r3/
Disallow: /sdk/1.6_r1/
Disallow: /shareables/
+Disallow: /guide/tutorials/
+Disallow: /guide/samples/
Sitemap: http://developer.android.com/sitemap.txt
diff --git a/docs/html/sdk/api_diff/7/changes.html b/docs/html/sdk/api_diff/7/changes.html
new file mode 100644
index 0000000..3e5a746
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<!-- on Fri Dec 18 22:29:37 PST 2009 -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+API Differences between 6 and 7
+</TITLE>
+<link href="../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</head>
+<frameset cols="242,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+<frameset rows="174,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+ <frame src="changes/jdiff_topleftframe.html" scrolling="no" name="topleftframe" frameborder="1">
+ <frame src="changes/alldiffs_index_all.html" scrolling="auto" name="bottomleftframe" frameborder="1">
+ </frameset>
+ <frame src="changes/changes-summary.html" scrolling="auto" name="rightframe" frameborder="1">
+</frameset>
+<noframes>
+<h2>
+Frame Alert
+</h2>
+
+<p>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<br>
+Link to <a href="changes/changes-summary.html" target="_top">Non-frame version.</A>
+</noframes>
+</html>
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html
new file mode 100644
index 0000000..5f2347a
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html
@@ -0,0 +1,574 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Field ACTION_LIVE_WALLPAPER_CHOOSER -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER" class="hiddenlink" target="rightframe">ACTION_LIVE_WALLPAPER_CHOOSER</A>
+</nobr><br>
+<!-- Field ACTION_LOCALE_CHANGED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_LOCALE_CHANGED" class="hiddenlink" target="rightframe">ACTION_LOCALE_CHANGED</A>
+</nobr><br>
+<!-- Method addView -->
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)" class="hiddenlink" target="rightframe"><b>addView</b>
+(<code>int, RemoteViews</code>)</A></nobr><br>
+<!-- Method allow -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.allow_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>allow</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Package android.service.wallpaper -->
+<A HREF="changes-summary.html#android.service.wallpaper" class="hiddenlink" target="rightframe"><b>android.service.wallpaper</b></A><br>
+<!-- Field author -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.author" class="hiddenlink" target="rightframe">author</A>
+</nobr><br>
+<!-- Field autoStart -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.autoStart" class="hiddenlink" target="rightframe">autoStart</A>
+</nobr><br>
+<!-- Field CAMCORDER -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.CAMCORDER" class="hiddenlink" target="rightframe">CAMCORDER</A>
+</nobr><br>
+<!-- Method clear -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clear_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>clear</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method clearAll -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clearAll_added()" class="hiddenlink" target="rightframe"><b>clearAll</b>
+()</A></nobr><br>
+<!-- Field COMMAND_DROP -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_DROP" class="hiddenlink" target="rightframe">COMMAND_DROP</A>
+</nobr><br>
+<!-- Field COMMAND_TAP -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_TAP" class="hiddenlink" target="rightframe">COMMAND_TAP</A>
+</nobr><br>
+<!-- Method deleteAllData -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteAllData_added()" class="hiddenlink" target="rightframe"><b>deleteAllData</b>
+()</A></nobr><br>
+<!-- Method deleteOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteOrigin_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>deleteOrigin</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Field ECLAIR_MR1 -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ECLAIR_MR1" class="hiddenlink" target="rightframe">ECLAIR_MR1</A>
+</nobr><br>
+<!-- Field EXTRA_CHANGED_COMPONENT_NAME_LIST -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME_LIST</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA" class="hiddenlink" target="rightframe">FEATURE_CAMERA</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA_AUTOFOCUS -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS" class="hiddenlink" target="rightframe">FEATURE_CAMERA_AUTOFOCUS</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA_FLASH -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_FLASH" class="hiddenlink" target="rightframe">FEATURE_CAMERA_FLASH</A>
+</nobr><br>
+<!-- Field FEATURE_LIVE_WALLPAPER -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER" class="hiddenlink" target="rightframe">FEATURE_LIVE_WALLPAPER</A>
+</nobr><br>
+<!-- Field FEATURE_SENSOR_LIGHT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT" class="hiddenlink" target="rightframe">FEATURE_SENSOR_LIGHT</A>
+</nobr><br>
+<!-- Field FEATURE_SENSOR_PROXIMITY -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY" class="hiddenlink" target="rightframe">FEATURE_SENSOR_PROXIMITY</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY_CDMA -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_CDMA</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY_GSM -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_GSM</A>
+</nobr><br>
+<!-- Field FEATURE_TOUCHSCREEN_MULTITOUCH -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH" class="hiddenlink" target="rightframe">FEATURE_TOUCHSCREEN_MULTITOUCH</A>
+</nobr><br>
+<!-- Field FILL_IN_SOURCE_BOUNDS -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.FILL_IN_SOURCE_BOUNDS" class="hiddenlink" target="rightframe">FILL_IN_SOURCE_BOUNDS</A>
+</nobr><br>
+<!-- Method flattenToString -->
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.flattenToString_added()" class="hiddenlink" target="rightframe"><b>flattenToString</b>
+()</A></nobr><br>
+<!-- Method freeMemory -->
+<nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.freeMemory_added()" class="hiddenlink" target="rightframe"><b>freeMemory</b>
+()</A></nobr><br>
+<!-- Method getAllowed -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)" class="hiddenlink" target="rightframe"><b>getAllowed</b>
+(<code>String, ValueCallback<Boolean></code>)</A></nobr><br>
+<!-- Method getContentDisposition -->
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getContentDisposition_added()" class="hiddenlink" target="rightframe"><b>getContentDisposition</b>
+()</A></nobr><br>
+<!-- Method getDefaultVideoPoster -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getDefaultVideoPoster_added()" class="hiddenlink" target="rightframe"><b>getDefaultVideoPoster</b>
+()</A></nobr><br>
+<!-- Method getDefaultZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDefaultZoom_added()" class="hiddenlink" target="rightframe"><b>getDefaultZoom</b>
+()</A></nobr><br>
+<!-- Method getDomStorageEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDomStorageEnabled_added()" class="hiddenlink" target="rightframe"><b>getDomStorageEnabled</b>
+()</A></nobr><br>
+<!-- Method getExpiresString -->
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getExpiresString_added()" class="hiddenlink" target="rightframe"><b>getExpiresString</b>
+()</A></nobr><br>
+<!-- Method getInstance -->
+<i>getInstance</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+<!-- Method getInstance -->
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.WebStorage
+</A></nobr><br>
+<!-- Method getLoadWithOverviewMode -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getLoadWithOverviewMode_added()" class="hiddenlink" target="rightframe"><b>getLoadWithOverviewMode</b>
+()</A></nobr><br>
+<!-- Method getOrigins -->
+<i>getOrigins</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Set<String>></code>)</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+<!-- Method getOrigins -->
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Map></code>)</b> in android.webkit.WebStorage
+</A></nobr><br>
+<!-- Method getQuotaForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getQuotaForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<!-- Method getSourceBounds -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.getSourceBounds_added()" class="hiddenlink" target="rightframe"><b>getSourceBounds</b>
+()</A></nobr><br>
+<!-- Method getUsageForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getUsageForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<!-- Method getVideoLoadingProgressView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVideoLoadingProgressView_added()" class="hiddenlink" target="rightframe"><b>getVideoLoadingProgressView</b>
+()</A></nobr><br>
+<!-- Method getVisitedHistory -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)" class="hiddenlink" target="rightframe"><b>getVisitedHistory</b>
+(<code>ValueCallback<String[]></code>)</A></nobr><br>
+<!-- Method getWallpaperInfo -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.getWallpaperInfo_added()" class="hiddenlink" target="rightframe"><b>getWallpaperInfo</b>
+()</A></nobr><br>
+<!-- Method isAutoStart -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.isAutoStart_added()" class="hiddenlink" target="rightframe"><b>isAutoStart</b>
+()</A></nobr><br>
+<!-- Method isChildrenDrawingOrderEnabled -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()" class="hiddenlink" target="rightframe"><b>isChildrenDrawingOrderEnabled</b>
+()</A></nobr><br>
+<!-- Method isOpaque -->
+<nobr><A HREF="android.view.View.html#android.view.View.isOpaque_added()" class="hiddenlink" target="rightframe"><b>isOpaque</b>
+()</A></nobr><br>
+<!-- Method isScreenOn -->
+<nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.isScreenOn_added()" class="hiddenlink" target="rightframe"><b>isScreenOn</b>
+()</A></nobr><br>
+<!-- Field LISTEN_SIGNAL_STRENGTHS -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTHS</A>
+</nobr><br>
+<!-- Constructor NeighboringCellInfo -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
+(<code>int, String, int</code>)</A></nobr> constructor<br>
+<!-- Method onConsoleMessage -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)" class="hiddenlink" target="rightframe"><b>onConsoleMessage</b>
+(<code>String, int, String</code>)</A></nobr><br>
+<!-- Method onDataConnectionStateChanged -->
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)" class="hiddenlink" target="rightframe"><b>onDataConnectionStateChanged</b>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onDrawScrollBars -->
+<nobr><A HREF="android.view.View.html#android.view.View.onDrawScrollBars_added(android.graphics.Canvas)" class="hiddenlink" target="rightframe"><b>onDrawScrollBars</b>
+(<code>Canvas</code>)</A></nobr><br>
+<!-- Method onHideCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onHideCustomView_added()" class="hiddenlink" target="rightframe"><b>onHideCustomView</b>
+()</A></nobr><br>
+<!-- Method onJsTimeout -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onJsTimeout_added()" class="hiddenlink" target="rightframe"><b>onJsTimeout</b>
+()</A></nobr><br>
+<!-- Method onReachedMaxAppCacheSize -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)" class="hiddenlink" target="rightframe"><b>onReachedMaxAppCacheSize</b>
+(<code>long, long, QuotaUpdater</code>)</A></nobr><br>
+<!-- Method onReceivedTouchIconUrl -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)" class="hiddenlink" target="rightframe"><b>onReceivedTouchIconUrl</b>
+(<code>WebView, String, boolean</code>)</A></nobr><br>
+<!-- Method onShowCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, CustomViewCallback</code>)</A></nobr><br>
+<!-- Method onSignalStrengthsChanged -->
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)" class="hiddenlink" target="rightframe"><b>onSignalStrengthsChanged</b>
+(<code>SignalStrength</code>)</A></nobr><br>
+<!-- Method removeAllViews -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.removeAllViews_added(int)" class="hiddenlink" target="rightframe"><b>removeAllViews</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method sendWallpaperCommand -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)" class="hiddenlink" target="rightframe"><b>sendWallpaperCommand</b>
+(<code>IBinder, String, int, int, int, Bundle</code>)</A></nobr><br>
+<!-- Method setAppCacheEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAppCacheEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAppCacheMaxSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheMaxSize_added(long)" class="hiddenlink" target="rightframe"><b>setAppCacheMaxSize</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method setAppCachePath -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCachePath_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>setAppCachePath</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method setAutoStart -->
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.setAutoStart_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoStart</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setChildrenDrawingOrderEnabled -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setChildrenDrawingOrderEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setDefaultZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)" class="hiddenlink" target="rightframe"><b>setDefaultZoom</b>
+(<code>ZoomDensity</code>)</A></nobr><br>
+<!-- Method setDomStorageEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDomStorageEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setDomStorageEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setLoadWithOverviewMode -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)" class="hiddenlink" target="rightframe"><b>setLoadWithOverviewMode</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setQuotaForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)" class="hiddenlink" target="rightframe"><b>setQuotaForOrigin</b>
+(<code>String, long</code>)</A></nobr><br>
+<!-- Method setSourceBounds -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.setSourceBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setSourceBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<!-- Method setWallpaperOffsetSteps -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)" class="hiddenlink" target="rightframe"><b>setWallpaperOffsetSteps</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Class SignalStrength -->
+<A HREF="pkg_android.telephony.html#SignalStrength" class="hiddenlink" target="rightframe"><b>SignalStrength</b></A><br>
+<!-- Method unflattenFromString -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Class ValueCallback -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.webkit.html#ValueCallback" class="hiddenlink" target="rightframe"><b><i>ValueCallback</i></b></A><br>
+<!-- Field VOICE_RECOGNITION -->
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
+</nobr><br>
+<!-- Class WallpaperInfo -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.app.html#WallpaperInfo" class="hiddenlink" target="rightframe"><b>WallpaperInfo</b></A><br>
+<!-- Class WebChromeClient.CustomViewCallback -->
+<A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
+<!-- Class WebSettings.ZoomDensity -->
+<A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html
new file mode 100644
index 0000000..f0df458
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html
@@ -0,0 +1,762 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>All Differences</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Field ACTION_LIVE_WALLPAPER_CHOOSER -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER" class="hiddenlink" target="rightframe">ACTION_LIVE_WALLPAPER_CHOOSER</A>
+</nobr><br>
+<!-- Field ACTION_LOCALE_CHANGED -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_LOCALE_CHANGED" class="hiddenlink" target="rightframe">ACTION_LOCALE_CHANGED</A>
+</nobr><br>
+<!-- Method addPackageToPreferred -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">addPackageToPreferred
+(<code>String</code>)</A></nobr><br>
+<!-- Method addView -->
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)" class="hiddenlink" target="rightframe"><b>addView</b>
+(<code>int, RemoteViews</code>)</A></nobr><br>
+<!-- Method allow -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.allow_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>allow</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Package android -->
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<!-- Package android.app -->
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<!-- Package android.content -->
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<!-- Package android.content.pm -->
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<!-- Package android.graphics -->
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<!-- Package android.media -->
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<!-- Package android.os -->
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Package android.service.wallpaper -->
+<A HREF="changes-summary.html#android.service.wallpaper" class="hiddenlink" target="rightframe"><b>android.service.wallpaper</b></A><br>
+<!-- Package android.telephony -->
+<A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
+<!-- Package android.view -->
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<!-- Package android.webkit -->
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<!-- Package android.widget -->
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Field author -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.author" class="hiddenlink" target="rightframe">author</A>
+</nobr><br>
+<!-- Field autoStart -->
+<nobr><A HREF="android.R.attr.html#android.R.attr.autoStart" class="hiddenlink" target="rightframe">autoStart</A>
+</nobr><br>
+<!-- Class Build.VERSION_CODES -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<!-- Class CacheManager.CacheResult -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.CacheManager.CacheResult.html" class="hiddenlink" target="rightframe">CacheManager.CacheResult</A><br>
+<!-- Field CAMCORDER -->
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.CAMCORDER" class="hiddenlink" target="rightframe">CAMCORDER</A>
+</nobr><br>
+<!-- Method clear -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clear_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>clear</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method clearAll -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clearAll_added()" class="hiddenlink" target="rightframe"><b>clearAll</b>
+()</A></nobr><br>
+<!-- Field COMMAND_DROP -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_DROP" class="hiddenlink" target="rightframe">COMMAND_DROP</A>
+</nobr><br>
+<!-- Field COMMAND_TAP -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_TAP" class="hiddenlink" target="rightframe">COMMAND_TAP</A>
+</nobr><br>
+<!-- Method deleteAllData -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteAllData_added()" class="hiddenlink" target="rightframe"><b>deleteAllData</b>
+()</A></nobr><br>
+<!-- Method deleteOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteOrigin_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>deleteOrigin</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Field ECLAIR_MR1 -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ECLAIR_MR1" class="hiddenlink" target="rightframe">ECLAIR_MR1</A>
+</nobr><br>
+<!-- Field EXTRA_CHANGED_COMPONENT_NAME -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME</A>
+</nobr><br>
+<!-- Field EXTRA_CHANGED_COMPONENT_NAME_LIST -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME_LIST</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA" class="hiddenlink" target="rightframe">FEATURE_CAMERA</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA_AUTOFOCUS -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS" class="hiddenlink" target="rightframe">FEATURE_CAMERA_AUTOFOCUS</A>
+</nobr><br>
+<!-- Field FEATURE_CAMERA_FLASH -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_FLASH" class="hiddenlink" target="rightframe">FEATURE_CAMERA_FLASH</A>
+</nobr><br>
+<!-- Field FEATURE_LIVE_WALLPAPER -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER" class="hiddenlink" target="rightframe">FEATURE_LIVE_WALLPAPER</A>
+</nobr><br>
+<!-- Field FEATURE_SENSOR_LIGHT -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT" class="hiddenlink" target="rightframe">FEATURE_SENSOR_LIGHT</A>
+</nobr><br>
+<!-- Field FEATURE_SENSOR_PROXIMITY -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY" class="hiddenlink" target="rightframe">FEATURE_SENSOR_PROXIMITY</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY_CDMA -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_CDMA</A>
+</nobr><br>
+<!-- Field FEATURE_TELEPHONY_GSM -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_GSM</A>
+</nobr><br>
+<!-- Field FEATURE_TOUCHSCREEN_MULTITOUCH -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH" class="hiddenlink" target="rightframe">FEATURE_TOUCHSCREEN_MULTITOUCH</A>
+</nobr><br>
+<!-- Field FILL_IN_SOURCE_BOUNDS -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.FILL_IN_SOURCE_BOUNDS" class="hiddenlink" target="rightframe">FILL_IN_SOURCE_BOUNDS</A>
+</nobr><br>
+<!-- Method flattenToString -->
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.flattenToString_added()" class="hiddenlink" target="rightframe"><b>flattenToString</b>
+()</A></nobr><br>
+<!-- Method freeMemory -->
+<nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.freeMemory_added()" class="hiddenlink" target="rightframe"><b>freeMemory</b>
+()</A></nobr><br>
+<!-- Class GeolocationPermissions -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.GeolocationPermissions.html" class="hiddenlink" target="rightframe">GeolocationPermissions</A><br>
+<!-- Method getAllowed -->
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)" class="hiddenlink" target="rightframe"><b>getAllowed</b>
+(<code>String, ValueCallback<Boolean></code>)</A></nobr><br>
+<!-- Method getContentDisposition -->
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getContentDisposition_added()" class="hiddenlink" target="rightframe"><b>getContentDisposition</b>
+()</A></nobr><br>
+<!-- Method getDefaultVideoPoster -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getDefaultVideoPoster_added()" class="hiddenlink" target="rightframe"><b>getDefaultVideoPoster</b>
+()</A></nobr><br>
+<!-- Method getDefaultZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDefaultZoom_added()" class="hiddenlink" target="rightframe"><b>getDefaultZoom</b>
+()</A></nobr><br>
+<!-- Method getDomStorageEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDomStorageEnabled_added()" class="hiddenlink" target="rightframe"><b>getDomStorageEnabled</b>
+()</A></nobr><br>
+<!-- Method getExpiresString -->
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getExpiresString_added()" class="hiddenlink" target="rightframe"><b>getExpiresString</b>
+()</A></nobr><br>
+<!-- Method getInstance -->
+<i>getInstance</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+<!-- Method getInstance -->
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.WebStorage
+</A></nobr><br>
+<!-- Method getLoadWithOverviewMode -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getLoadWithOverviewMode_added()" class="hiddenlink" target="rightframe"><b>getLoadWithOverviewMode</b>
+()</A></nobr><br>
+<!-- Method getOrigins -->
+<i>getOrigins</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Set<String>></code>)</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+<!-- Method getOrigins -->
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Map></code>)</b> in android.webkit.WebStorage
+</A></nobr><br>
+<!-- Method getQuotaForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getQuotaForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<!-- Method getSourceBounds -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.getSourceBounds_added()" class="hiddenlink" target="rightframe"><b>getSourceBounds</b>
+()</A></nobr><br>
+<!-- Method getUsageForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getUsageForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<!-- Method getVideoLoadingProgressView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVideoLoadingProgressView_added()" class="hiddenlink" target="rightframe"><b>getVideoLoadingProgressView</b>
+()</A></nobr><br>
+<!-- Method getVisitedHistory -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)" class="hiddenlink" target="rightframe"><b>getVisitedHistory</b>
+(<code>ValueCallback<String[]></code>)</A></nobr><br>
+<!-- Method getWallpaperInfo -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.getWallpaperInfo_added()" class="hiddenlink" target="rightframe"><b>getWallpaperInfo</b>
+()</A></nobr><br>
+<!-- Class Intent -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<!-- Method isAutoStart -->
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.isAutoStart_added()" class="hiddenlink" target="rightframe"><b>isAutoStart</b>
+()</A></nobr><br>
+<!-- Method isChildrenDrawingOrderEnabled -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()" class="hiddenlink" target="rightframe"><b>isChildrenDrawingOrderEnabled</b>
+()</A></nobr><br>
+<!-- Method isOpaque -->
+<nobr><A HREF="android.view.View.html#android.view.View.isOpaque_added()" class="hiddenlink" target="rightframe"><b>isOpaque</b>
+()</A></nobr><br>
+<!-- Method isScreenOn -->
+<nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.isScreenOn_added()" class="hiddenlink" target="rightframe"><b>isScreenOn</b>
+()</A></nobr><br>
+<!-- Field LISTEN_SIGNAL_STRENGTH -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTH</A>
+</nobr><br>
+<!-- Field LISTEN_SIGNAL_STRENGTHS -->
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTHS</A>
+</nobr><br>
+<!-- Class Manifest.permission -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<!-- Class MediaRecorder.AudioSource -->
+<A HREF="android.media.MediaRecorder.AudioSource.html" class="hiddenlink" target="rightframe">MediaRecorder.AudioSource</A><br>
+<!-- Class NeighboringCellInfo -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>NeighboringCellInfo</i><br>
+ <A HREF="android.telephony.NeighboringCellInfo.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
+<!-- Constructor NeighboringCellInfo -->
+ <nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
+(<code>int, String, int</code>)</A></nobr> constructor<br>
+<!-- Method onConsoleMessage -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)" class="hiddenlink" target="rightframe"><b>onConsoleMessage</b>
+(<code>String, int, String</code>)</A></nobr><br>
+<!-- Method onDataConnectionStateChanged -->
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)" class="hiddenlink" target="rightframe"><b>onDataConnectionStateChanged</b>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onDrawScrollBars -->
+<nobr><A HREF="android.view.View.html#android.view.View.onDrawScrollBars_added(android.graphics.Canvas)" class="hiddenlink" target="rightframe"><b>onDrawScrollBars</b>
+(<code>Canvas</code>)</A></nobr><br>
+<!-- Method onHideCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onHideCustomView_added()" class="hiddenlink" target="rightframe"><b>onHideCustomView</b>
+()</A></nobr><br>
+<!-- Method onJsTimeout -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onJsTimeout_added()" class="hiddenlink" target="rightframe"><b>onJsTimeout</b>
+()</A></nobr><br>
+<!-- Method onReachedMaxAppCacheSize -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)" class="hiddenlink" target="rightframe"><b>onReachedMaxAppCacheSize</b>
+(<code>long, long, QuotaUpdater</code>)</A></nobr><br>
+<!-- Method onReceivedTouchIconUrl -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)" class="hiddenlink" target="rightframe"><b>onReceivedTouchIconUrl</b>
+(<code>WebView, String, boolean</code>)</A></nobr><br>
+<!-- Method onShowCustomView -->
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, CustomViewCallback</code>)</A></nobr><br>
+<!-- Method onSignalStrengthsChanged -->
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)" class="hiddenlink" target="rightframe"><b>onSignalStrengthsChanged</b>
+(<code>SignalStrength</code>)</A></nobr><br>
+<!-- Class PackageManager -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<!-- Class PhoneStateListener -->
+<A HREF="android.telephony.PhoneStateListener.html" class="hiddenlink" target="rightframe">PhoneStateListener</A><br>
+<!-- Class PowerManager -->
+<A HREF="android.os.PowerManager.html" class="hiddenlink" target="rightframe">PowerManager</A><br>
+<!-- Class R.attr -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<!-- Class Rect -->
+<A HREF="android.graphics.Rect.html" class="hiddenlink" target="rightframe">Rect</A><br>
+<!-- Class RemoteViews -->
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<!-- Method removeAllViews -->
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.removeAllViews_added(int)" class="hiddenlink" target="rightframe"><b>removeAllViews</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method removePackageFromPreferred -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">removePackageFromPreferred
+(<code>String</code>)</A></nobr><br>
+<!-- Method sendWallpaperCommand -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)" class="hiddenlink" target="rightframe"><b>sendWallpaperCommand</b>
+(<code>IBinder, String, int, int, int, Bundle</code>)</A></nobr><br>
+<!-- Field SET_PREFERRED_APPLICATIONS -->
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PREFERRED_APPLICATIONS" class="hiddenlink" target="rightframe">SET_PREFERRED_APPLICATIONS</A>
+</nobr><br>
+<!-- Method setAppCacheEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAppCacheEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setAppCacheMaxSize -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheMaxSize_added(long)" class="hiddenlink" target="rightframe"><b>setAppCacheMaxSize</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Method setAppCachePath -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCachePath_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>setAppCachePath</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method setAutoStart -->
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.setAutoStart_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoStart</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setChildrenDrawingOrderEnabled -->
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setChildrenDrawingOrderEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setDefaultZoom -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)" class="hiddenlink" target="rightframe"><b>setDefaultZoom</b>
+(<code>ZoomDensity</code>)</A></nobr><br>
+<!-- Method setDomStorageEnabled -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDomStorageEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setDomStorageEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setLoadWithOverviewMode -->
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)" class="hiddenlink" target="rightframe"><b>setLoadWithOverviewMode</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setQuotaForOrigin -->
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)" class="hiddenlink" target="rightframe"><b>setQuotaForOrigin</b>
+(<code>String, long</code>)</A></nobr><br>
+<!-- Method setSourceBounds -->
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.setSourceBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setSourceBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<!-- Method setWallpaperOffsetSteps -->
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)" class="hiddenlink" target="rightframe"><b>setWallpaperOffsetSteps</b>
+(<code>float, float</code>)</A></nobr><br>
+<!-- Class SignalStrength -->
+<A HREF="pkg_android.telephony.html#SignalStrength" class="hiddenlink" target="rightframe"><b>SignalStrength</b></A><br>
+<!-- Method unflattenFromString -->
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Class ValueCallback -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.webkit.html#ValueCallback" class="hiddenlink" target="rightframe"><b><i>ValueCallback</i></b></A><br>
+<!-- Class View -->
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<!-- Class ViewFlipper -->
+<A HREF="android.widget.ViewFlipper.html" class="hiddenlink" target="rightframe">ViewFlipper</A><br>
+<!-- Class ViewGroup -->
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<!-- Field VOICE_RECOGNITION -->
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
+</nobr><br>
+<!-- Class WallpaperInfo -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.app.html#WallpaperInfo" class="hiddenlink" target="rightframe"><b>WallpaperInfo</b></A><br>
+<!-- Class WallpaperManager -->
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<!-- Class WebChromeClient -->
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<!-- Class WebChromeClient.CustomViewCallback -->
+<A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
+<!-- Class WebSettings -->
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<!-- Class WebSettings.ZoomDensity -->
+<A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
+<!-- Class WebStorage -->
+<A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
+<!-- Class WebView -->
+<A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html
new file mode 100644
index 0000000..173d8e9
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html
@@ -0,0 +1,378 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Method addPackageToPreferred -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">addPackageToPreferred
+(<code>String</code>)</A></nobr><br>
+<!-- Package android -->
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<!-- Package android.app -->
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<!-- Package android.content -->
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<!-- Package android.content.pm -->
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<!-- Package android.graphics -->
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<!-- Package android.media -->
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<!-- Package android.os -->
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<!-- Package android.telephony -->
+<A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
+<!-- Package android.view -->
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<!-- Package android.webkit -->
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<!-- Package android.widget -->
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<!-- Class Build.VERSION_CODES -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<!-- Class CacheManager.CacheResult -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.CacheManager.CacheResult.html" class="hiddenlink" target="rightframe">CacheManager.CacheResult</A><br>
+<!-- Field EXTRA_CHANGED_COMPONENT_NAME -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME</A>
+</nobr><br>
+<!-- Class GeolocationPermissions -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.GeolocationPermissions.html" class="hiddenlink" target="rightframe">GeolocationPermissions</A><br>
+<!-- Class Intent -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<!-- Field LISTEN_SIGNAL_STRENGTH -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTH</A>
+</nobr><br>
+<!-- Class Manifest.permission -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<!-- Class MediaRecorder.AudioSource -->
+<A HREF="android.media.MediaRecorder.AudioSource.html" class="hiddenlink" target="rightframe">MediaRecorder.AudioSource</A><br>
+<!-- Class NeighboringCellInfo -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.telephony.NeighboringCellInfo.html" class="hiddenlink" target="rightframe">NeighboringCellInfo</A><br>
+<!-- Class PackageManager -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<!-- Class PhoneStateListener -->
+<A HREF="android.telephony.PhoneStateListener.html" class="hiddenlink" target="rightframe">PhoneStateListener</A><br>
+<!-- Class PowerManager -->
+<A HREF="android.os.PowerManager.html" class="hiddenlink" target="rightframe">PowerManager</A><br>
+<!-- Class R.attr -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<!-- Class Rect -->
+<A HREF="android.graphics.Rect.html" class="hiddenlink" target="rightframe">Rect</A><br>
+<!-- Class RemoteViews -->
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<!-- Method removePackageFromPreferred -->
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">removePackageFromPreferred
+(<code>String</code>)</A></nobr><br>
+<!-- Field SET_PREFERRED_APPLICATIONS -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PREFERRED_APPLICATIONS" class="hiddenlink" target="rightframe">SET_PREFERRED_APPLICATIONS</A>
+</nobr><br>
+<!-- Class View -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<!-- Class ViewFlipper -->
+<A HREF="android.widget.ViewFlipper.html" class="hiddenlink" target="rightframe">ViewFlipper</A><br>
+<!-- Class ViewGroup -->
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<!-- Class WallpaperManager -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<!-- Class WebChromeClient -->
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<!-- Class WebSettings -->
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<!-- Class WebStorage -->
+<A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
+<!-- Class WebView -->
+<A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html
new file mode 100644
index 0000000..68d2c20
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html
new file mode 100644
index 0000000..48b3bb0
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.Manifest.permission
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/Manifest.permission.html" target="_top"><font size="+2"><code>Manifest.permission</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.Manifest.permission.SET_PREFERRED_APPLICATIONS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/Manifest.permission.html#SET_PREFERRED_APPLICATIONS" target="_top"><code>SET_PREFERRED_APPLICATIONS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.R.attr.html b/docs/html/sdk/api_diff/7/changes/android.R.attr.html
new file mode 100644
index 0000000..609b2fc
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.R.attr.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.R.attr
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.<A HREF="../../../../reference/android/R.attr.html" target="_top"><font size="+2"><code>R.attr</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.author"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#author" target="_top"><code>author</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.R.attr.autoStart"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/R.attr.html#autoStart" target="_top"><code>autoStart</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html
new file mode 100644
index 0000000..45db50d
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app.WallpaperManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.app.<A HREF="../../../../reference/android/app/WallpaperManager.html" target="_top"><font size="+2"><code>WallpaperManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.getWallpaperInfo_added()"></A>
+ <nobr><code>WallpaperInfo</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#getWallpaperInfo()" target="_top"><code>getWallpaperInfo</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)" target="_top"><code>sendWallpaperCommand</code></A>(<code>IBinder,</nobr> String<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> Bundle<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#setWallpaperOffsetSteps(float, float)" target="_top"><code>setWallpaperOffsetSteps</code></A>(<code>float,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#ACTION_LIVE_WALLPAPER_CHOOSER" target="_top"><code>ACTION_LIVE_WALLPAPER_CHOOSER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.COMMAND_DROP"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#COMMAND_DROP" target="_top"><code>COMMAND_DROP</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app.WallpaperManager.COMMAND_TAP"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/app/WallpaperManager.html#COMMAND_TAP" target="_top"><code>COMMAND_TAP</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.content.Intent.html b/docs/html/sdk/api_diff/7/changes/android.content.Intent.html
new file mode 100644
index 0000000..4eb6058
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.content.Intent.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.Intent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.<A HREF="../../../../reference/android/content/Intent.html" target="_top"><font size="+2"><code>Intent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.getSourceBounds_added()"></A>
+ <nobr><code>Rect</code> <A HREF="../../../../reference/android/content/Intent.html#getSourceBounds()" target="_top"><code>getSourceBounds</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.setSourceBounds_added(android.graphics.Rect)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/Intent.html#setSourceBounds(android.graphics.Rect)" target="_top"><code>setSourceBounds</code></A>(<code>Rect</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.ACTION_LOCALE_CHANGED"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#ACTION_LOCALE_CHANGED" target="_top"><code>ACTION_LOCALE_CHANGED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_CHANGED_COMPONENT_NAME_LIST" target="_top"><code>EXTRA_CHANGED_COMPONENT_NAME_LIST</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.FILL_IN_SOURCE_BOUNDS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/content/Intent.html#FILL_IN_SOURCE_BOUNDS" target="_top"><code>FILL_IN_SOURCE_BOUNDS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/Intent.html#EXTRA_CHANGED_COMPONENT_NAME" target="_top"><code>EXTRA_CHANGED_COMPONENT_NAME</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
new file mode 100644
index 0000000..58b17ee
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm.PackageManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.content.pm.<A HREF="../../../../reference/android/content/pm/PackageManager.html" target="_top"><font size="+2"><code>PackageManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#addPackageToPreferred(java.lang.String)" target="_top"><code>addPackageToPreferred</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#removePackageFromPreferred(java.lang.String)" target="_top"><code>removePackageFromPreferred</code></A>(<code>String</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_CAMERA"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_CAMERA" target="_top"><code>FEATURE_CAMERA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_CAMERA_AUTOFOCUS" target="_top"><code>FEATURE_CAMERA_AUTOFOCUS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_CAMERA_FLASH"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_CAMERA_FLASH" target="_top"><code>FEATURE_CAMERA_FLASH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_LIVE_WALLPAPER" target="_top"><code>FEATURE_LIVE_WALLPAPER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_SENSOR_LIGHT" target="_top"><code>FEATURE_SENSOR_LIGHT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_SENSOR_PROXIMITY" target="_top"><code>FEATURE_SENSOR_PROXIMITY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_TELEPHONY"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_TELEPHONY" target="_top"><code>FEATURE_TELEPHONY</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_TELEPHONY_CDMA" target="_top"><code>FEATURE_TELEPHONY_CDMA</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_TELEPHONY_GSM" target="_top"><code>FEATURE_TELEPHONY_GSM</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/content/pm/PackageManager.html#FEATURE_TOUCHSCREEN_MULTITOUCH" target="_top"><code>FEATURE_TOUCHSCREEN_MULTITOUCH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html b/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html
new file mode 100644
index 0000000..dad11c7
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics.Rect
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.graphics.<A HREF="../../../../reference/android/graphics/Rect.html" target="_top"><font size="+2"><code>Rect</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Rect.flattenToString_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/graphics/Rect.html#flattenToString()" target="_top"><code>flattenToString</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics.Rect.unflattenFromString_added(java.lang.String)"></A>
+ <nobr><code>Rect</code> <A HREF="../../../../reference/android/graphics/Rect.html#unflattenFromString(java.lang.String)" target="_top"><code>unflattenFromString</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html b/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
new file mode 100644
index 0000000..b08003c
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media.MediaRecorder.AudioSource
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.media.<A HREF="../../../../reference/android/media/MediaRecorder.AudioSource.html" target="_top"><font size="+2"><code>MediaRecorder.AudioSource</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaRecorder.AudioSource.CAMCORDER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaRecorder.AudioSource.html#CAMCORDER" target="_top"><code>CAMCORDER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/media/MediaRecorder.AudioSource.html#VOICE_RECOGNITION" target="_top"><code>VOICE_RECOGNITION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
new file mode 100644
index 0000000..26b054be
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.Build.VERSION_CODES
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/Build.VERSION_CODES.html" target="_top"><font size="+2"><code>Build.VERSION_CODES</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.Build.VERSION_CODES.ECLAIR_MR1"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/os/Build.VERSION_CODES.html#ECLAIR_MR1" target="_top"><code>ECLAIR_MR1</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html
new file mode 100644
index 0000000..f766c93
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os.PowerManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.os.<A HREF="../../../../reference/android/os/PowerManager.html" target="_top"><font size="+2"><code>PowerManager</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os.PowerManager.isScreenOn_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/os/PowerManager.html#isScreenOn()" target="_top"><code>isScreenOn</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html b/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
new file mode 100644
index 0000000..e59d1e8
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.telephony.NeighboringCellInfo
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.telephony.<A HREF="../../../../reference/android/telephony/NeighboringCellInfo.html" target="_top"><font size="+2"><code>NeighboringCellInfo</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)"></A>
+ <nobr><A HREF="../../../../reference/android/telephony/NeighboringCellInfo.html#NeighboringCellInfo(int, java.lang.String, int)" target="_top"><code>NeighboringCellInfo</code></A>(<code>int,</nobr> String<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html b/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
new file mode 100644
index 0000000..aa87eb8
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.telephony.PhoneStateListener
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.telephony.<A HREF="../../../../reference/android/telephony/PhoneStateListener.html" target="_top"><font size="+2"><code>PhoneStateListener</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/telephony/PhoneStateListener.html#onDataConnectionStateChanged(int, int)" target="_top"><code>onDataConnectionStateChanged</code></A>(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/telephony/PhoneStateListener.html#onSignalStrengthsChanged(android.telephony.SignalStrength)" target="_top"><code>onSignalStrengthsChanged</code></A>(<code>SignalStrength</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/telephony/PhoneStateListener.html#LISTEN_SIGNAL_STRENGTHS" target="_top"><code>LISTEN_SIGNAL_STRENGTHS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/telephony/PhoneStateListener.html#LISTEN_SIGNAL_STRENGTH" target="_top"><code>LISTEN_SIGNAL_STRENGTH</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.view.View.html b/docs/html/sdk/api_diff/7/changes/android.view.View.html
new file mode 100644
index 0000000..1194d59
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.view.View.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.View
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/View.html" target="_top"><font size="+2"><code>View</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.isOpaque_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/View.html#isOpaque()" target="_top"><code>isOpaque</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.View.onDrawScrollBars_added(android.graphics.Canvas)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/View.html#onDrawScrollBars(android.graphics.Canvas)" target="_top"><code>onDrawScrollBars</code></A>(<code>Canvas</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html
new file mode 100644
index 0000000..d7c030c
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view.ViewGroup
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.view.<A HREF="../../../../reference/android/view/ViewGroup.html" target="_top"><font size="+2"><code>ViewGroup</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/view/ViewGroup.html#isChildrenDrawingOrderEnabled()" target="_top"><code>isChildrenDrawingOrderEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/view/ViewGroup.html#setChildrenDrawingOrderEnabled(boolean)" target="_top"><code>setChildrenDrawingOrderEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html b/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
new file mode 100644
index 0000000..869421e
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.CacheManager.CacheResult
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/CacheManager.CacheResult.html" target="_top"><font size="+2"><code>CacheManager.CacheResult</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.CacheManager.CacheResult.getContentDisposition_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/webkit/CacheManager.CacheResult.html#getContentDisposition()" target="_top"><code>getContentDisposition</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.CacheManager.CacheResult.getExpiresString_added()"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/webkit/CacheManager.CacheResult.html#getExpiresString()" target="_top"><code>getExpiresString</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html b/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
new file mode 100644
index 0000000..2dacbba
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.GeolocationPermissions
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/GeolocationPermissions.html" target="_top"><font size="+2"><code>GeolocationPermissions</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.allow_added(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#allow(java.lang.String)" target="_top"><code>allow</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.clear_added(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#clear(java.lang.String)" target="_top"><code>clear</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.clearAll_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#clearAll()" target="_top"><code>clearAll</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#getAllowed(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)" target="_top"><code>getAllowed</code></A>(<code>String,</nobr> ValueCallback<Boolean><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.getInstance_added()"></A>
+ <nobr><code>GeolocationPermissions</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#getInstance()" target="_top"><code>getInstance</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/GeolocationPermissions.html#getOrigins(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)" target="_top"><code>getOrigins</code></A>(<code>ValueCallback<Set<String>></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
new file mode 100644
index 0000000..5bc64b34
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebChromeClient
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebChromeClient.html" target="_top"><font size="+2"><code>WebChromeClient</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.getDefaultVideoPoster_added()"></A>
+ <nobr><code>Bitmap</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#getDefaultVideoPoster()" target="_top"><code>getDefaultVideoPoster</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.getVideoLoadingProgressView_added()"></A>
+ <nobr><code>View</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#getVideoLoadingProgressView()" target="_top"><code>getVideoLoadingProgressView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#getVisitedHistory(android.webkit.ValueCallback<java.lang.String[]>)" target="_top"><code>getVisitedHistory</code></A>(<code>ValueCallback<String[]></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String, int, java.lang.String)" target="_top"><code>onConsoleMessage</code></A>(<code>String,</nobr> int<nobr>,</nobr> String<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onHideCustomView_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onHideCustomView()" target="_top"><code>onHideCustomView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onJsTimeout_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onJsTimeout()" target="_top"><code>onJsTimeout</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater)" target="_top"><code>onReachedMaxAppCacheSize</code></A>(<code>long,</nobr> long<nobr>,</nobr> QuotaUpdater<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onReceivedTouchIconUrl(android.webkit.WebView, java.lang.String, boolean)" target="_top"><code>onReceivedTouchIconUrl</code></A>(<code>WebView,</nobr> String<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebChromeClient.html#onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)" target="_top"><code>onShowCustomView</code></A>(<code>View,</nobr> CustomViewCallback<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html
new file mode 100644
index 0000000..f763d8b
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebSettings
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebSettings.html" target="_top"><font size="+2"><code>WebSettings</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.getDefaultZoom_added()"></A>
+ <nobr><code>ZoomDensity</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#getDefaultZoom()" target="_top"><code>getDefaultZoom</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.getDomStorageEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#getDomStorageEnabled()" target="_top"><code>getDomStorageEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.getLoadWithOverviewMode_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#getLoadWithOverviewMode()" target="_top"><code>getLoadWithOverviewMode</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setAppCacheEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setAppCacheEnabled(boolean)" target="_top"><code>setAppCacheEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setAppCacheMaxSize_added(long)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setAppCacheMaxSize(long)" target="_top"><code>setAppCacheMaxSize</code></A>(<code>long</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setAppCachePath_added(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setAppCachePath(java.lang.String)" target="_top"><code>setAppCachePath</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setDefaultZoom(android.webkit.WebSettings.ZoomDensity)" target="_top"><code>setDefaultZoom</code></A>(<code>ZoomDensity</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setDomStorageEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setDomStorageEnabled(boolean)" target="_top"><code>setDomStorageEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebSettings.html#setLoadWithOverviewMode(boolean)" target="_top"><code>setLoadWithOverviewMode</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html
new file mode 100644
index 0000000..0b20ec2
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebStorage
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebStorage.html" target="_top"><font size="+2"><code>WebStorage</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.deleteAllData_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#deleteAllData()" target="_top"><code>deleteAllData</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.deleteOrigin_added(java.lang.String)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#deleteOrigin(java.lang.String)" target="_top"><code>deleteOrigin</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.getInstance_added()"></A>
+ <nobr><code>WebStorage</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#getInstance()" target="_top"><code>getInstance</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#getOrigins(android.webkit.ValueCallback<java.util.Map>)" target="_top"><code>getOrigins</code></A>(<code>ValueCallback<Map></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#getQuotaForOrigin(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" target="_top"><code>getQuotaForOrigin</code></A>(<code>String,</nobr> ValueCallback<Long><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#getUsageForOrigin(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" target="_top"><code>getUsageForOrigin</code></A>(<code>String,</nobr> ValueCallback<Long><nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebStorage.html#setQuotaForOrigin(java.lang.String, long)" target="_top"><code>setQuotaForOrigin</code></A>(<code>String,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html
new file mode 100644
index 0000000..e927bc6
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit.WebView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.webkit.<A HREF="../../../../reference/android/webkit/WebView.html" target="_top"><font size="+2"><code>WebView</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit.WebView.freeMemory_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/webkit/WebView.html#freeMemory()" target="_top"><code>freeMemory</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html
new file mode 100644
index 0000000..2651c5e
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.RemoteViews
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/RemoteViews.html" target="_top"><font size="+2"><code>RemoteViews</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/RemoteViews.html#addView(int, android.widget.RemoteViews)" target="_top"><code>addView</code></A>(<code>int,</nobr> RemoteViews<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.RemoteViews.removeAllViews_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/RemoteViews.html#removeAllViews(int)" target="_top"><code>removeAllViews</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html b/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
new file mode 100644
index 0000000..fe92777
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget.ViewFlipper
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.widget.<A HREF="../../../../reference/android/widget/ViewFlipper.html" target="_top"><font size="+2"><code>ViewFlipper</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.ViewFlipper.isAutoStart_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/widget/ViewFlipper.html#isAutoStart()" target="_top"><code>isAutoStart</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget.ViewFlipper.setAutoStart_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/widget/ViewFlipper.html#setAutoStart(boolean)" target="_top"><code>setAutoStart</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/changes-summary.html b/docs/html/sdk/api_diff/7/changes/changes-summary.html
new file mode 100644
index 0000000..330f727
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/changes-summary.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Android API Differences Report
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+ <div id="docTitleContainer">
+<h1>Android API Differences Report</h1>
+<p>This report details the changes in the core Android framework API between two <a
+href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a>
+specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields.
+The report also includes general statistics that characterize the extent and type of the differences.</p>
+<p>This report is based a comparison of the Android API specifications
+whose API Level identifiers are given in the upper-right corner of this page. It compares a
+newer "to" API to an older "from" API, noting all changes relative to the
+older API. So, for example, API elements marked as removed are no longer present in the "to"
+API specification.</p>
+<p>To navigate the report, use the "Select a Diffs Index" and "Filter the Index"
+controls on the left. The report uses text formatting to indicate <em>interface names</em>,
+<a href= ><code>links to reference documentation</code></a>, and <a href= >links to change
+description</a>. The statistics are accessible from the "Statistics" link in the upper-right corner.</p>
+<p>For more information about the Android framework API and SDK,
+see the <a href="http://developer.android.com/index.html" target="_top">Android Developers site</a>.</p>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.service.wallpaper"></A>
+ <nobr><A HREF="../../../../reference/android/service/wallpaper/package-summary.html" target="_top"><code>android.service.wallpaper</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android"></A>
+ <nobr><A HREF="pkg_android.html">android</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.app"></A>
+ <nobr><A HREF="pkg_android.app.html">android.app</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content"></A>
+ <nobr><A HREF="pkg_android.content.html">android.content</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.content.pm"></A>
+ <nobr><A HREF="pkg_android.content.pm.html">android.content.pm</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.graphics"></A>
+ <nobr><A HREF="pkg_android.graphics.html">android.graphics</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.media"></A>
+ <nobr><A HREF="pkg_android.media.html">android.media</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.os"></A>
+ <nobr><A HREF="pkg_android.os.html">android.os</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.telephony"></A>
+ <nobr><A HREF="pkg_android.telephony.html">android.telephony</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.view"></A>
+ <nobr><A HREF="pkg_android.view.html">android.view</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.webkit"></A>
+ <nobr><A HREF="pkg_android.webkit.html">android.webkit</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.widget"></A>
+ <nobr><A HREF="pkg_android.widget.html">android.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<!-- End of API section -->
+<!-- Start of packages section -->
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_additions.html b/docs/html/sdk/api_diff/7/changes/classes_index_additions.html
new file mode 100644
index 0000000..db5459e
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_additions.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.telephony.html#SignalStrength" class="hiddenlink" target="rightframe"><b>SignalStrength</b></A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.webkit.html#ValueCallback" class="hiddenlink" target="rightframe"><b><i>ValueCallback</i></b></A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.app.html#WallpaperInfo" class="hiddenlink" target="rightframe"><b>WallpaperInfo</b></A><br>
+<A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
+<A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_all.html b/docs/html/sdk/api_diff/7/changes/classes_index_all.html
new file mode 100644
index 0000000..49b9728
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_all.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Classes</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.CacheManager.CacheResult.html" class="hiddenlink" target="rightframe">CacheManager.CacheResult</A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.GeolocationPermissions.html" class="hiddenlink" target="rightframe">GeolocationPermissions</A><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<A HREF="android.media.MediaRecorder.AudioSource.html" class="hiddenlink" target="rightframe">MediaRecorder.AudioSource</A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.telephony.NeighboringCellInfo.html" class="hiddenlink" target="rightframe">NeighboringCellInfo</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<A HREF="android.telephony.PhoneStateListener.html" class="hiddenlink" target="rightframe">PhoneStateListener</A><br>
+<A HREF="android.os.PowerManager.html" class="hiddenlink" target="rightframe">PowerManager</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<A HREF="android.graphics.Rect.html" class="hiddenlink" target="rightframe">Rect</A><br>
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.telephony.html#SignalStrength" class="hiddenlink" target="rightframe"><b>SignalStrength</b></A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.webkit.html#ValueCallback" class="hiddenlink" target="rightframe"><b><i>ValueCallback</i></b></A><br>
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<A HREF="android.widget.ViewFlipper.html" class="hiddenlink" target="rightframe">ViewFlipper</A><br>
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.app.html#WallpaperInfo" class="hiddenlink" target="rightframe"><b>WallpaperInfo</b></A><br>
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
+<A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
+<A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_changes.html b/docs/html/sdk/api_diff/7/changes/classes_index_changes.html
new file mode 100644
index 0000000..f40db15
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_changes.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.os.Build.VERSION_CODES.html" class="hiddenlink" target="rightframe">Build.VERSION_CODES</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.CacheManager.CacheResult.html" class="hiddenlink" target="rightframe">CacheManager.CacheResult</A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.webkit.GeolocationPermissions.html" class="hiddenlink" target="rightframe">GeolocationPermissions</A><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.Intent.html" class="hiddenlink" target="rightframe">Intent</A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.Manifest.permission.html" class="hiddenlink" target="rightframe">Manifest.permission</A><br>
+<A HREF="android.media.MediaRecorder.AudioSource.html" class="hiddenlink" target="rightframe">MediaRecorder.AudioSource</A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.telephony.NeighboringCellInfo.html" class="hiddenlink" target="rightframe">NeighboringCellInfo</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.content.pm.PackageManager.html" class="hiddenlink" target="rightframe">PackageManager</A><br>
+<A HREF="android.telephony.PhoneStateListener.html" class="hiddenlink" target="rightframe">PhoneStateListener</A><br>
+<A HREF="android.os.PowerManager.html" class="hiddenlink" target="rightframe">PowerManager</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.R.attr.html" class="hiddenlink" target="rightframe">R.attr</A><br>
+<A HREF="android.graphics.Rect.html" class="hiddenlink" target="rightframe">Rect</A><br>
+<A HREF="android.widget.RemoteViews.html" class="hiddenlink" target="rightframe">RemoteViews</A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.view.View.html" class="hiddenlink" target="rightframe">View</A><br>
+<A HREF="android.widget.ViewFlipper.html" class="hiddenlink" target="rightframe">ViewFlipper</A><br>
+<A HREF="android.view.ViewGroup.html" class="hiddenlink" target="rightframe">ViewGroup</A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.app.WallpaperManager.html" class="hiddenlink" target="rightframe">WallpaperManager</A><br>
+<A HREF="android.webkit.WebChromeClient.html" class="hiddenlink" target="rightframe">WebChromeClient</A><br>
+<A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
+<A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
+<A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_removals.html b/docs/html/sdk/api_diff/7/changes/classes_index_removals.html
new file mode 100644
index 0000000..e6da73f
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html
new file mode 100644
index 0000000..1858441
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<font color="#999999">Changes</font>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
+(<code>int, String, int</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_all.html b/docs/html/sdk/api_diff/7/changes/constructors_index_all.html
new file mode 100644
index 0000000..4975970
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_all.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Constructors</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<font color="#999999">Changes</font>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
+(<code>int, String, int</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html
new file mode 100644
index 0000000..a5ca2ef
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<font color="#999999">Changes</font>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html
new file mode 100644
index 0000000..74a09ba
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<font color="#999999">Changes</font>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_additions.html b/docs/html/sdk/api_diff/7/changes/fields_index_additions.html
new file mode 100644
index 0000000..3148f4c
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_additions.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER" class="hiddenlink" target="rightframe">ACTION_LIVE_WALLPAPER_CHOOSER</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_LOCALE_CHANGED" class="hiddenlink" target="rightframe">ACTION_LOCALE_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.author" class="hiddenlink" target="rightframe">author</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.autoStart" class="hiddenlink" target="rightframe">autoStart</A>
+</nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.CAMCORDER" class="hiddenlink" target="rightframe">CAMCORDER</A>
+</nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_DROP" class="hiddenlink" target="rightframe">COMMAND_DROP</A>
+</nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_TAP" class="hiddenlink" target="rightframe">COMMAND_TAP</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ECLAIR_MR1" class="hiddenlink" target="rightframe">ECLAIR_MR1</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME_LIST</A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA" class="hiddenlink" target="rightframe">FEATURE_CAMERA</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS" class="hiddenlink" target="rightframe">FEATURE_CAMERA_AUTOFOCUS</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_FLASH" class="hiddenlink" target="rightframe">FEATURE_CAMERA_FLASH</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER" class="hiddenlink" target="rightframe">FEATURE_LIVE_WALLPAPER</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT" class="hiddenlink" target="rightframe">FEATURE_SENSOR_LIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY" class="hiddenlink" target="rightframe">FEATURE_SENSOR_PROXIMITY</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_CDMA</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_GSM</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH" class="hiddenlink" target="rightframe">FEATURE_TOUCHSCREEN_MULTITOUCH</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.FILL_IN_SOURCE_BOUNDS" class="hiddenlink" target="rightframe">FILL_IN_SOURCE_BOUNDS</A>
+</nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTHS</A>
+</nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_all.html b/docs/html/sdk/api_diff/7/changes/fields_index_all.html
new file mode 100644
index 0000000..c782afc
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_all.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Fields</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER" class="hiddenlink" target="rightframe">ACTION_LIVE_WALLPAPER_CHOOSER</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.ACTION_LOCALE_CHANGED" class="hiddenlink" target="rightframe">ACTION_LOCALE_CHANGED</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.author" class="hiddenlink" target="rightframe">author</A>
+</nobr><br>
+<nobr><A HREF="android.R.attr.html#android.R.attr.autoStart" class="hiddenlink" target="rightframe">autoStart</A>
+</nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.CAMCORDER" class="hiddenlink" target="rightframe">CAMCORDER</A>
+</nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_DROP" class="hiddenlink" target="rightframe">COMMAND_DROP</A>
+</nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.COMMAND_TAP" class="hiddenlink" target="rightframe">COMMAND_TAP</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.os.Build.VERSION_CODES.html#android.os.Build.VERSION_CODES.ECLAIR_MR1" class="hiddenlink" target="rightframe">ECLAIR_MR1</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME_LIST</A>
+</nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA" class="hiddenlink" target="rightframe">FEATURE_CAMERA</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS" class="hiddenlink" target="rightframe">FEATURE_CAMERA_AUTOFOCUS</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_CAMERA_FLASH" class="hiddenlink" target="rightframe">FEATURE_CAMERA_FLASH</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER" class="hiddenlink" target="rightframe">FEATURE_LIVE_WALLPAPER</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT" class="hiddenlink" target="rightframe">FEATURE_SENSOR_LIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY" class="hiddenlink" target="rightframe">FEATURE_SENSOR_PROXIMITY</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_CDMA</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM" class="hiddenlink" target="rightframe">FEATURE_TELEPHONY_GSM</A>
+</nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH" class="hiddenlink" target="rightframe">FEATURE_TOUCHSCREEN_MULTITOUCH</A>
+</nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.FILL_IN_SOURCE_BOUNDS" class="hiddenlink" target="rightframe">FILL_IN_SOURCE_BOUNDS</A>
+</nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTH</A>
+</nobr><br>
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTHS</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PREFERRED_APPLICATIONS" class="hiddenlink" target="rightframe">SET_PREFERRED_APPLICATIONS</A>
+</nobr><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_changes.html b/docs/html/sdk/api_diff/7/changes/fields_index_changes.html
new file mode 100644
index 0000000..88f77de
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_changes.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME" class="hiddenlink" target="rightframe">EXTRA_CHANGED_COMPONENT_NAME</A>
+</nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH" class="hiddenlink" target="rightframe">LISTEN_SIGNAL_STRENGTH</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#L"><font size="-2">L</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PREFERRED_APPLICATIONS" class="hiddenlink" target="rightframe">SET_PREFERRED_APPLICATIONS</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_removals.html b/docs/html/sdk/api_diff/7/changes/fields_index_removals.html
new file mode 100644
index 0000000..9f62d88
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_help.html b/docs/html/sdk/api_diff/7/changes/jdiff_help.html
new file mode 100644
index 0000000..6cc80dc
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_help.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+JDiff Help
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<TABLE summary="Navigation bar" BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+ <TABLE summary="Navigation bar" BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../reference/index.html" target="_top"><FONT CLASS="NavBarFont1"><B><code>7</code></B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="changes-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_statistics.html"><FONT CLASS="NavBarFont1"><B>Statistics</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT> </TD>
+ </TR>
+ </TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Generated by<br><a href="http://www.jdiff.org" class="staysblack" target="_top">JDiff</a></b></EM></TD>
+</TR>
+<TR>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2"></FONT>
+</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../changes.html" TARGET="_top"><B>FRAMES</B></A>
+ <A HREF="jdiff_help.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+</TR>
+</TABLE>
+<HR>
+<!-- End of nav bar -->
+<center>
+<H1>JDiff Documentation</H1>
+</center>
+<BLOCKQUOTE>
+JDiff is a <a href="http://java.sun.com/j2se/javadoc/" target="_top">Javadoc</a> doclet which generates a report of the API differences between two versions of a product. It does not report changes in Javadoc comments, or changes in what a class or method does.
+This help page describes the different parts of the output from JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+ See the reference page in the <a href="http://www.jdiff.org">source for JDiff</a> for information about how to generate a report like this one.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+The indexes shown in the top-left frame help show each type of change in more detail. The index "All Differences" contains all the differences between the APIs, in alphabetical order.
+These indexes all use the same format:
+<ul>
+<li>Removed packages, classes, constructors, methods and fields are <strike>struck through</strike>.</li>
+<li>Added packages, classes, constructors, methods and fields appear in <b>bold</b>.</li>
+<li>Changed packages, classes, constructors, methods and fields appear in normal text.</li>
+</ul>
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+You can always tell when you are reading a JDiff page, rather than a Javadoc page, by the color of the index bar and the color of the background.
+Links which take you to a Javadoc page are always in a <code>typewriter</code> font.
+Just like Javadoc, all interface names are in <i>italic</i>, and class names are not italicized. Where there are multiple entries in an index with the same name, the heading for them is also in italics, but is not a link.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3><b><code>Javadoc</code></b></H3>
+This is a link to the <a href="../../../../reference/index.html" target="_top">top-level</a> Javadoc page for the new version of the product.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Overview</H3>
+The <a href="changes-summary.html">overview</a> is the top-level summary of what was removed, added and changed between versions.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Package</H3>
+This is a link to the package containing the current changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Class</H3>
+This is highlighted when you are looking at the changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Text Changes</H3>
+This is a link to the top-level index of all documentation changes for the current package or class.
+If it is not present, then there are no documentation changes for the current package or class.
+This link can be removed entirely by not using the <code>-docchanges</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Statistics</H3>
+This is a link to a page which shows statistics about the changes between the two APIs.
+This link can be removed entirely by not using the <code>-stats</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Help</H3>
+A link to this Help page for JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Prev/Next</H3>
+These links take you to the previous and next changed package or class.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Frames/No Frames</H3>
+These links show and hide the HTML frames. All pages are available with or without frames.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H2>Complex Changes</H2>
+There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass.
+In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes.
+</BLOCKQUOTE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html
new file mode 100644
index 0000000..ba81aec
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html
@@ -0,0 +1,342 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+API Change Statistics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;xborder-bottom:none;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="../changes.html" target="_top">Top of Report</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<h1>API Change Statistics</h1>
+<p>The overall difference between API Levels 6 and 7 is approximately <span style="color:222;font-weight:bold;">0.48%</span>.
+</p>
+<br>
+<a name="numbers"></a>
+<h2>Total of Differences, by Number and Type</h2>
+<p>
+The table below lists the numbers of program elements (packages, classes, constructors, methods, and fields) that were added, changed, or removed. The table includes only the highest-level program elements — that is, if a class with two methods was added, the number of methods added does not include those two methods, but the number of classes added does include that class.
+</p>
+<TABLE summary="Number of differences" WIDTH="100%">
+<TR>
+ <th>Type</th>
+ <TH ALIGN="center"><b>Additions</b></TH>
+ <TH ALIGN="center"><b>Changes</b></TH>
+ <TH ALIGN="center">Removals</TH>
+ <TH ALIGN="center"><b>Total</b></TH>
+</TR>
+<TR>
+ <TD>Packages</TD>
+ <TD ALIGN="right">1</TD>
+ <TD ALIGN="right">11</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">12</TD>
+</TR>
+<TR>
+ <TD>Classes and <i>Interfaces</i></TD>
+ <TD ALIGN="right">5</TD>
+ <TD ALIGN="right">21</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">26</TD>
+</TR>
+<TR>
+ <TD>Constructors</TD>
+ <TD ALIGN="right">1</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">1</TD>
+</TR>
+<TR>
+ <TD>Methods</TD>
+ <TD ALIGN="right">52</TD>
+ <TD ALIGN="right">2</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">54</TD>
+</TR>
+<TR>
+ <TD>Fields</TD>
+ <TD ALIGN="right">22</TD>
+ <TD ALIGN="right">3</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">25</TD>
+</TR>
+<TR>
+ <TD style="background-color:#FAFAFA"><b>Total</b></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>81</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>37</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>0</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>118</strong></TD>
+</TR>
+</TABLE>
+<br>
+<a name="packages"></a>
+<h2>Changed Packages, Sorted by Percentage Difference</h2>
+<TABLE summary="Packages sorted by percentage difference" WIDTH="100%">
+<TR>
+ <TH WIDTH="10%">Percentage Difference*</TH>
+ <TH>Package</TH>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="pkg_android.webkit.html">android.webkit</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_android.telephony.html">android.telephony</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.app.html">android.app</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.media.html">android.media</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.content.pm.html">android.content.pm</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.os.html">android.os</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.widget.html">android.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.graphics.html">android.graphics</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.html">android</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.content.html">android.content</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.view.html">android.view</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<a name="classes"></a>
+<h2>Changed Classes and <i>Interfaces</i>, Sorted by Percentage Difference</h2>
+<TABLE summary="Classes sorted by percentage difference" WIDTH="100%">
+<TR WIDTH="20%">
+ <TH WIDTH="10%">Percentage<br>Difference*</TH>
+ <TH><b>Class or <i>Interface</i></b></TH>
+</TR>
+<TR>
+ <TD ALIGN="center">77</TD>
+ <TD><A HREF="android.webkit.WebStorage.html">
+android.webkit.WebStorage</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">75</TD>
+ <TD><A HREF="android.webkit.GeolocationPermissions.html">
+android.webkit.GeolocationPermissions</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">24</TD>
+ <TD><A HREF="android.webkit.WebChromeClient.html">
+android.webkit.WebChromeClient</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">17</TD>
+ <TD><A HREF="android.app.WallpaperManager.html">
+android.app.WallpaperManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">16</TD>
+ <TD><A HREF="android.media.MediaRecorder.AudioSource.html">
+android.media.MediaRecorder.AudioSource</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="android.widget.ViewFlipper.html">
+android.widget.ViewFlipper</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="android.telephony.PhoneStateListener.html">
+android.telephony.PhoneStateListener</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.webkit.CacheManager.CacheResult.html">
+android.webkit.CacheManager.CacheResult</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.content.pm.PackageManager.html">
+android.content.pm.PackageManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.os.Build.VERSION_CODES.html">
+android.os.Build.VERSION_CODES</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.webkit.WebSettings.html">
+android.webkit.WebSettings</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.os.PowerManager.html">
+android.os.PowerManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.telephony.NeighboringCellInfo.html">
+android.telephony.NeighboringCellInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.widget.RemoteViews.html">
+android.widget.RemoteViews</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.graphics.Rect.html">
+android.graphics.Rect</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.content.Intent.html">
+android.content.Intent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.view.ViewGroup.html">
+android.view.ViewGroup</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.webkit.WebView.html">
+android.webkit.WebView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.Manifest.permission.html">
+android.Manifest.permission</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.view.View.html">
+android.view.View</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="android.R.attr.html">
+android.R.attr</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<h2 id="calculation">Calculation of Change Percentages</h2>
+<p>
+The percent change statistic reported for all elements in the "to" API Level specification is defined recursively as follows:</p>
+<pre>
+Percentage difference = 100 * (added + removed + 2*changed)
+ -----------------------------------
+ sum of public elements in BOTH APIs
+</pre>
+<p>where <code>added</code> is the number of packages added, <code>removed</code> is the number of packages removed, and <code>changed</code> is the number of packages changed.
+This definition is applied recursively for the classes and their program elements, so the value for a changed package will be less than 1, unless every class in that package has changed.
+The definition ensures that if all packages are removed and all new packages are
+added, the change will be 100%.</p>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY></HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html
new file mode 100644
index 0000000..36f9836
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Android API Version Differences
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<table class="jdiffIndex" summary="Links to diff index files" BORDER="0" WIDTH="100%" cellspacing="0" cellpadding="0" style="margin:0">
+<TR>
+ <th class="indexHeader" nowrap>
+ Select a Diffs Index:</th>
+</TR>
+<TR>
+ <TD><FONT CLASS="indexText" size="-2"><A HREF="alldiffs_index_all.html" TARGET="bottomleftframe">All Differences</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="packages_index_all.html" TARGET="bottomleftframe">By Package</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="classes_index_all.html" TARGET="bottomleftframe">By Class</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="constructors_index_all.html" TARGET="bottomleftframe">By Constructor</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="methods_index_all.html" TARGET="bottomleftframe">By Method</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
+</TR>
+</TABLE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_additions.html b/docs/html/sdk/api_diff/7/changes/methods_index_additions.html
new file mode 100644
index 0000000..1623337
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_additions.html
@@ -0,0 +1,301 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)" class="hiddenlink" target="rightframe"><b>addView</b>
+(<code>int, RemoteViews</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.allow_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>allow</b>
+(<code>String</code>)</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clear_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>clear</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clearAll_added()" class="hiddenlink" target="rightframe"><b>clearAll</b>
+()</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteAllData_added()" class="hiddenlink" target="rightframe"><b>deleteAllData</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteOrigin_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>deleteOrigin</b>
+(<code>String</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.flattenToString_added()" class="hiddenlink" target="rightframe"><b>flattenToString</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.freeMemory_added()" class="hiddenlink" target="rightframe"><b>freeMemory</b>
+()</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)" class="hiddenlink" target="rightframe"><b>getAllowed</b>
+(<code>String, ValueCallback<Boolean></code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getContentDisposition_added()" class="hiddenlink" target="rightframe"><b>getContentDisposition</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getDefaultVideoPoster_added()" class="hiddenlink" target="rightframe"><b>getDefaultVideoPoster</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDefaultZoom_added()" class="hiddenlink" target="rightframe"><b>getDefaultZoom</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDomStorageEnabled_added()" class="hiddenlink" target="rightframe"><b>getDomStorageEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getExpiresString_added()" class="hiddenlink" target="rightframe"><b>getExpiresString</b>
+()</A></nobr><br>
+<i>getInstance</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.WebStorage
+</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getLoadWithOverviewMode_added()" class="hiddenlink" target="rightframe"><b>getLoadWithOverviewMode</b>
+()</A></nobr><br>
+<i>getOrigins</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Set<String>></code>)</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Map></code>)</b> in android.webkit.WebStorage
+</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getQuotaForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.getSourceBounds_added()" class="hiddenlink" target="rightframe"><b>getSourceBounds</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getUsageForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVideoLoadingProgressView_added()" class="hiddenlink" target="rightframe"><b>getVideoLoadingProgressView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)" class="hiddenlink" target="rightframe"><b>getVisitedHistory</b>
+(<code>ValueCallback<String[]></code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.getWallpaperInfo_added()" class="hiddenlink" target="rightframe"><b>getWallpaperInfo</b>
+()</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.isAutoStart_added()" class="hiddenlink" target="rightframe"><b>isAutoStart</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()" class="hiddenlink" target="rightframe"><b>isChildrenDrawingOrderEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.isOpaque_added()" class="hiddenlink" target="rightframe"><b>isOpaque</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.isScreenOn_added()" class="hiddenlink" target="rightframe"><b>isScreenOn</b>
+()</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)" class="hiddenlink" target="rightframe"><b>onConsoleMessage</b>
+(<code>String, int, String</code>)</A></nobr><br>
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)" class="hiddenlink" target="rightframe"><b>onDataConnectionStateChanged</b>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onDrawScrollBars_added(android.graphics.Canvas)" class="hiddenlink" target="rightframe"><b>onDrawScrollBars</b>
+(<code>Canvas</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onHideCustomView_added()" class="hiddenlink" target="rightframe"><b>onHideCustomView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onJsTimeout_added()" class="hiddenlink" target="rightframe"><b>onJsTimeout</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)" class="hiddenlink" target="rightframe"><b>onReachedMaxAppCacheSize</b>
+(<code>long, long, QuotaUpdater</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)" class="hiddenlink" target="rightframe"><b>onReceivedTouchIconUrl</b>
+(<code>WebView, String, boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, CustomViewCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)" class="hiddenlink" target="rightframe"><b>onSignalStrengthsChanged</b>
+(<code>SignalStrength</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.removeAllViews_added(int)" class="hiddenlink" target="rightframe"><b>removeAllViews</b>
+(<code>int</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)" class="hiddenlink" target="rightframe"><b>sendWallpaperCommand</b>
+(<code>IBinder, String, int, int, int, Bundle</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAppCacheEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheMaxSize_added(long)" class="hiddenlink" target="rightframe"><b>setAppCacheMaxSize</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCachePath_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>setAppCachePath</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.setAutoStart_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoStart</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setChildrenDrawingOrderEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)" class="hiddenlink" target="rightframe"><b>setDefaultZoom</b>
+(<code>ZoomDensity</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDomStorageEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setDomStorageEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)" class="hiddenlink" target="rightframe"><b>setLoadWithOverviewMode</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)" class="hiddenlink" target="rightframe"><b>setQuotaForOrigin</b>
+(<code>String, long</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.setSourceBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setSourceBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)" class="hiddenlink" target="rightframe"><b>setWallpaperOffsetSteps</b>
+(<code>float, float</code>)</A></nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
+(<code>String</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_all.html b/docs/html/sdk/api_diff/7/changes/methods_index_all.html
new file mode 100644
index 0000000..7258ab1
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_all.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Methods</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">addPackageToPreferred
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)" class="hiddenlink" target="rightframe"><b>addView</b>
+(<code>int, RemoteViews</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.allow_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>allow</b>
+(<code>String</code>)</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clear_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>clear</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.clearAll_added()" class="hiddenlink" target="rightframe"><b>clearAll</b>
+()</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteAllData_added()" class="hiddenlink" target="rightframe"><b>deleteAllData</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.deleteOrigin_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>deleteOrigin</b>
+(<code>String</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.flattenToString_added()" class="hiddenlink" target="rightframe"><b>flattenToString</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.freeMemory_added()" class="hiddenlink" target="rightframe"><b>freeMemory</b>
+()</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)" class="hiddenlink" target="rightframe"><b>getAllowed</b>
+(<code>String, ValueCallback<Boolean></code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getContentDisposition_added()" class="hiddenlink" target="rightframe"><b>getContentDisposition</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getDefaultVideoPoster_added()" class="hiddenlink" target="rightframe"><b>getDefaultVideoPoster</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDefaultZoom_added()" class="hiddenlink" target="rightframe"><b>getDefaultZoom</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getDomStorageEnabled_added()" class="hiddenlink" target="rightframe"><b>getDomStorageEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.CacheManager.CacheResult.html#android.webkit.CacheManager.CacheResult.getExpiresString_added()" class="hiddenlink" target="rightframe"><b>getExpiresString</b>
+()</A></nobr><br>
+<i>getInstance</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getInstance_added()" class="hiddenlink" target="rightframe">type <b>
+()</b> in android.webkit.WebStorage
+</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.getLoadWithOverviewMode_added()" class="hiddenlink" target="rightframe"><b>getLoadWithOverviewMode</b>
+()</A></nobr><br>
+<i>getOrigins</i><br>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html#android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Set<String>></code>)</b> in android.webkit.GeolocationPermissions
+</A></nobr><br>
+ <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)" class="hiddenlink" target="rightframe">type <b>
+(<code>ValueCallback<Map></code>)</b> in android.webkit.WebStorage
+</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getQuotaForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.getSourceBounds_added()" class="hiddenlink" target="rightframe"><b>getSourceBounds</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)" class="hiddenlink" target="rightframe"><b>getUsageForOrigin</b>
+(<code>String, ValueCallback<Long></code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVideoLoadingProgressView_added()" class="hiddenlink" target="rightframe"><b>getVideoLoadingProgressView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)" class="hiddenlink" target="rightframe"><b>getVisitedHistory</b>
+(<code>ValueCallback<String[]></code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.getWallpaperInfo_added()" class="hiddenlink" target="rightframe"><b>getWallpaperInfo</b>
+()</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.isAutoStart_added()" class="hiddenlink" target="rightframe"><b>isAutoStart</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()" class="hiddenlink" target="rightframe"><b>isChildrenDrawingOrderEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.isOpaque_added()" class="hiddenlink" target="rightframe"><b>isOpaque</b>
+()</A></nobr><br>
+<nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.isScreenOn_added()" class="hiddenlink" target="rightframe"><b>isScreenOn</b>
+()</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)" class="hiddenlink" target="rightframe"><b>onConsoleMessage</b>
+(<code>String, int, String</code>)</A></nobr><br>
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)" class="hiddenlink" target="rightframe"><b>onDataConnectionStateChanged</b>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.view.View.html#android.view.View.onDrawScrollBars_added(android.graphics.Canvas)" class="hiddenlink" target="rightframe"><b>onDrawScrollBars</b>
+(<code>Canvas</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onHideCustomView_added()" class="hiddenlink" target="rightframe"><b>onHideCustomView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onJsTimeout_added()" class="hiddenlink" target="rightframe"><b>onJsTimeout</b>
+()</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)" class="hiddenlink" target="rightframe"><b>onReachedMaxAppCacheSize</b>
+(<code>long, long, QuotaUpdater</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)" class="hiddenlink" target="rightframe"><b>onReceivedTouchIconUrl</b>
+(<code>WebView, String, boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebChromeClient.html#android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)" class="hiddenlink" target="rightframe"><b>onShowCustomView</b>
+(<code>View, CustomViewCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.telephony.PhoneStateListener.html#android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)" class="hiddenlink" target="rightframe"><b>onSignalStrengthsChanged</b>
+(<code>SignalStrength</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.widget.RemoteViews.html#android.widget.RemoteViews.removeAllViews_added(int)" class="hiddenlink" target="rightframe"><b>removeAllViews</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">removePackageFromPreferred
+(<code>String</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#U"><font size="-2">U</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)" class="hiddenlink" target="rightframe"><b>sendWallpaperCommand</b>
+(<code>IBinder, String, int, int, int, Bundle</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAppCacheEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCacheMaxSize_added(long)" class="hiddenlink" target="rightframe"><b>setAppCacheMaxSize</b>
+(<code>long</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setAppCachePath_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>setAppCachePath</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.widget.ViewFlipper.html#android.widget.ViewFlipper.setAutoStart_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoStart</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setChildrenDrawingOrderEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)" class="hiddenlink" target="rightframe"><b>setDefaultZoom</b>
+(<code>ZoomDensity</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setDomStorageEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setDomStorageEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)" class="hiddenlink" target="rightframe"><b>setLoadWithOverviewMode</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)" class="hiddenlink" target="rightframe"><b>setQuotaForOrigin</b>
+(<code>String, long</code>)</A></nobr><br>
+<nobr><A HREF="android.content.Intent.html#android.content.Intent.setSourceBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setSourceBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<nobr><A HREF="android.app.WallpaperManager.html#android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)" class="hiddenlink" target="rightframe"><b>setWallpaperOffsetSteps</b>
+(<code>float, float</code>)</A></nobr><br>
+<A NAME="U"></A>
+<br><font size="+2">U</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
+(<code>String</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_changes.html b/docs/html/sdk/api_diff/7/changes/methods_index_changes.html
new file mode 100644
index 0000000..35867b1
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_changes.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#R"><font size="-2">R</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">addPackageToPreferred
+(<code>String</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">removePackageFromPreferred
+(<code>String</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_removals.html b/docs/html/sdk/api_diff/7/changes/methods_index_removals.html
new file mode 100644
index 0000000..b5aea4f
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_additions.html b/docs/html/sdk/api_diff/7/changes/packages_index_additions.html
new file mode 100644
index 0000000..d6ad068
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_additions.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="changes-summary.html#android.service.wallpaper" class="hiddenlink" target="rightframe"><b>android.service.wallpaper</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_all.html b/docs/html/sdk/api_diff/7/changes/packages_index_all.html
new file mode 100644
index 0000000..5ab8b40
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_all.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Packages</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<A HREF="changes-summary.html#android.service.wallpaper" class="hiddenlink" target="rightframe"><b>android.service.wallpaper</b></A><br>
+<A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_changes.html b/docs/html/sdk/api_diff/7/changes/packages_index_changes.html
new file mode 100644
index 0000000..2331bb2
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_changes.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.html" class="hiddenlink" target="rightframe">android</A><br>
+<A HREF="pkg_android.app.html" class="hiddenlink" target="rightframe">android.app</A><br>
+<A HREF="pkg_android.content.html" class="hiddenlink" target="rightframe">android.content</A><br>
+<A HREF="pkg_android.content.pm.html" class="hiddenlink" target="rightframe">android.content.pm</A><br>
+<A HREF="pkg_android.graphics.html" class="hiddenlink" target="rightframe">android.graphics</A><br>
+<A HREF="pkg_android.media.html" class="hiddenlink" target="rightframe">android.media</A><br>
+<A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
+<A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
+<A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
+<A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
+<A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_removals.html b/docs/html/sdk/api_diff/7/changes/packages_index_removals.html
new file mode 100644
index 0000000..d0ffabc
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_removals.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.app.html b/docs/html/sdk/api_diff/7/changes/pkg_android.app.html
new file mode 100644
index 0000000..f05a62f
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.app.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.app
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/app/package-summary.html" target="_top"><font size="+1"><code>android.app</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WallpaperInfo"></A>
+ <nobr><A HREF="../../../../reference/android/app/WallpaperInfo.html" target="_top"><code>WallpaperInfo</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WallpaperManager"></A>
+ <nobr><A HREF="android.app.WallpaperManager.html">WallpaperManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.content.html b/docs/html/sdk/api_diff/7/changes/pkg_android.content.html
new file mode 100644
index 0000000..4920ce3
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.content.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/content/package-summary.html" target="_top"><font size="+1"><code>android.content</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Intent"></A>
+ <nobr><A HREF="android.content.Intent.html">Intent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html
new file mode 100644
index 0000000..c5c3b2e
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.content.pm
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/content/pm/package-summary.html" target="_top"><font size="+1"><code>android.content.pm</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PackageManager"></A>
+ <nobr><A HREF="android.content.pm.PackageManager.html">PackageManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html
new file mode 100644
index 0000000..732481f
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.graphics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/graphics/package-summary.html" target="_top"><font size="+1"><code>android.graphics</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Rect"></A>
+ <nobr><A HREF="android.graphics.Rect.html">Rect</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.html b/docs/html/sdk/api_diff/7/changes/pkg_android.html
new file mode 100644
index 0000000..fa07ac1
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/package-summary.html" target="_top"><font size="+1"><code>android</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Manifest.permission"></A>
+ <nobr><A HREF="android.Manifest.permission.html">Manifest.permission</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="R.attr"></A>
+ <nobr><A HREF="android.R.attr.html">R.attr</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.media.html b/docs/html/sdk/api_diff/7/changes/pkg_android.media.html
new file mode 100644
index 0000000..d5cd679
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.media.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.media
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/media/package-summary.html" target="_top"><font size="+1"><code>android.media</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaRecorder.AudioSource"></A>
+ <nobr><A HREF="android.media.MediaRecorder.AudioSource.html">MediaRecorder.AudioSource</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.os.html b/docs/html/sdk/api_diff/7/changes/pkg_android.os.html
new file mode 100644
index 0000000..bfaa1eb
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.os.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.os
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/os/package-summary.html" target="_top"><font size="+1"><code>android.os</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Build.VERSION_CODES"></A>
+ <nobr><A HREF="android.os.Build.VERSION_CODES.html">Build.VERSION_CODES</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PowerManager"></A>
+ <nobr><A HREF="android.os.PowerManager.html">PowerManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html
new file mode 100644
index 0000000..adc1ceb
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.telephony
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/telephony/package-summary.html" target="_top"><font size="+1"><code>android.telephony</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SignalStrength"></A>
+ <nobr><A HREF="../../../../reference/android/telephony/SignalStrength.html" target="_top"><code>SignalStrength</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NeighboringCellInfo"></A>
+ <nobr><A HREF="android.telephony.NeighboringCellInfo.html">NeighboringCellInfo</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PhoneStateListener"></A>
+ <nobr><A HREF="android.telephony.PhoneStateListener.html">PhoneStateListener</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.view.html b/docs/html/sdk/api_diff/7/changes/pkg_android.view.html
new file mode 100644
index 0000000..40a8f57
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.view.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.view
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/view/package-summary.html" target="_top"><font size="+1"><code>android.view</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="View"></A>
+ <nobr><A HREF="android.view.View.html">View</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewGroup"></A>
+ <nobr><A HREF="android.view.ViewGroup.html">ViewGroup</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html
new file mode 100644
index 0000000..8c37e6f
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.webkit
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/webkit/package-summary.html" target="_top"><font size="+1"><code>android.webkit</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ValueCallback"></A>
+ <nobr><A HREF="../../../../reference/android/webkit/ValueCallback.html" target="_top"><code><I>ValueCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebChromeClient.CustomViewCallback"></A>
+ <nobr><A HREF="../../../../reference/android/webkit/WebChromeClient.CustomViewCallback.html" target="_top"><code><I>WebChromeClient.CustomViewCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebSettings.ZoomDensity"></A>
+ <nobr><A HREF="../../../../reference/android/webkit/WebSettings.ZoomDensity.html" target="_top"><code>WebSettings.ZoomDensity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CacheManager.CacheResult"></A>
+ <nobr><A HREF="android.webkit.CacheManager.CacheResult.html">CacheManager.CacheResult</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GeolocationPermissions"></A>
+ <nobr><A HREF="android.webkit.GeolocationPermissions.html">GeolocationPermissions</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebChromeClient"></A>
+ <nobr><A HREF="android.webkit.WebChromeClient.html">WebChromeClient</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebSettings"></A>
+ <nobr><A HREF="android.webkit.WebSettings.html">WebSettings</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebStorage"></A>
+ <nobr><A HREF="android.webkit.WebStorage.html">WebStorage</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WebView"></A>
+ <nobr><A HREF="android.webkit.WebView.html">WebView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html
new file mode 100644
index 0000000..e404840
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">7</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">6</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2009.12.18 22:29</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/widget/package-summary.html" target="_top"><font size="+1"><code>android.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RemoteViews"></A>
+ <nobr><A HREF="android.widget.RemoteViews.html">RemoteViews</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewFlipper"></A>
+ <nobr><A HREF="android.widget.ViewFlipper.html">ViewFlipper</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/api_diff/7/missingSinces.txt b/docs/html/sdk/api_diff/7/missingSinces.txt
new file mode 100644
index 0000000..b95fb6b
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/missingSinces.txt
@@ -0,0 +1,80 @@
+NO DOC BLOCK: android.telephony.SignalStrength Class
+NO DOC BLOCK: android.webkit.ValueCallback Interface
+NO DOC BLOCK: android.app.WallpaperInfo Class
+NO DOC BLOCK: android.webkit.WebChromeClient.CustomViewCallback Interface
+NO DOC BLOCK: android.webkit.WebSettings.ZoomDensity Class
+NO DOC BLOCK: android.telephony.NeighboringCellInfo Constructor (int, java.lang.String, int)
+NO DOC BLOCK: android.widget.RemoteViews Method addView(int, android.widget.RemoteViews)
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method allow(java.lang.String)
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method clear(java.lang.String)
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method clearAll()
+NO DOC BLOCK: android.webkit.WebStorage Method deleteAllData()
+NO DOC BLOCK: android.webkit.WebStorage Method deleteOrigin(java.lang.String)
+NO DOC BLOCK: android.graphics.Rect Method flattenToString()
+NO DOC BLOCK: android.webkit.WebView Method freeMemory()
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method getAllowed(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)
+NO DOC BLOCK: android.webkit.CacheManager.CacheResult Method getContentDisposition()
+NO DOC BLOCK: android.webkit.WebChromeClient Method getDefaultVideoPoster()
+NO DOC BLOCK: android.webkit.WebSettings Method getDefaultZoom()
+NO DOC BLOCK: android.webkit.WebSettings Method getDomStorageEnabled()
+NO DOC BLOCK: android.webkit.CacheManager.CacheResult Method getExpiresString()
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method getInstance()
+NO DOC BLOCK: android.webkit.WebStorage Method getInstance()
+NO DOC BLOCK: android.webkit.WebSettings Method getLoadWithOverviewMode()
+NO DOC BLOCK: android.webkit.GeolocationPermissions Method getOrigins(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)
+NO DOC BLOCK: android.webkit.WebStorage Method getOrigins(android.webkit.ValueCallback<java.util.Map>)
+NO DOC BLOCK: android.webkit.WebStorage Method getQuotaForOrigin(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)
+NO DOC BLOCK: android.content.Intent Method getSourceBounds()
+NO DOC BLOCK: android.webkit.WebStorage Method getUsageForOrigin(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)
+NO DOC BLOCK: android.webkit.WebChromeClient Method getVideoLoadingProgressView()
+NO DOC BLOCK: android.webkit.WebChromeClient Method getVisitedHistory(android.webkit.ValueCallback<java.lang.String[]>)
+NO DOC BLOCK: android.app.WallpaperManager Method getWallpaperInfo()
+NO DOC BLOCK: android.widget.ViewFlipper Method isAutoStart()
+NO DOC BLOCK: android.view.ViewGroup Method isChildrenDrawingOrderEnabled()
+NO DOC BLOCK: android.view.View Method isOpaque()
+NO DOC BLOCK: android.os.PowerManager Method isScreenOn()
+NO DOC BLOCK: android.webkit.WebChromeClient Method onConsoleMessage(java.lang.String, int, java.lang.String)
+NO DOC BLOCK: android.telephony.PhoneStateListener Method onDataConnectionStateChanged(int, int)
+NO DOC BLOCK: android.view.View Method onDrawScrollBars(android.graphics.Canvas)
+NO DOC BLOCK: android.webkit.WebChromeClient Method onHideCustomView()
+NO DOC BLOCK: android.webkit.WebChromeClient Method onJsTimeout()
+NO DOC BLOCK: android.webkit.WebChromeClient Method onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater)
+NO DOC BLOCK: android.webkit.WebChromeClient Method onReceivedTouchIconUrl(android.webkit.WebView, java.lang.String, boolean)
+NO DOC BLOCK: android.webkit.WebChromeClient Method onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)
+NO DOC BLOCK: android.telephony.PhoneStateListener Method onSignalStrengthsChanged(android.telephony.SignalStrength)
+NO DOC BLOCK: android.widget.RemoteViews Method removeAllViews(int)
+NO DOC BLOCK: android.app.WallpaperManager Method sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)
+NO DOC BLOCK: android.webkit.WebSettings Method setAppCacheEnabled(boolean)
+NO DOC BLOCK: android.webkit.WebSettings Method setAppCacheMaxSize(long)
+NO DOC BLOCK: android.webkit.WebSettings Method setAppCachePath(java.lang.String)
+NO DOC BLOCK: android.widget.ViewFlipper Method setAutoStart(boolean)
+NO DOC BLOCK: android.view.ViewGroup Method setChildrenDrawingOrderEnabled(boolean)
+NO DOC BLOCK: android.webkit.WebSettings Method setDefaultZoom(android.webkit.WebSettings.ZoomDensity)
+NO DOC BLOCK: android.webkit.WebSettings Method setDomStorageEnabled(boolean)
+NO DOC BLOCK: android.webkit.WebSettings Method setLoadWithOverviewMode(boolean)
+NO DOC BLOCK: android.webkit.WebStorage Method setQuotaForOrigin(java.lang.String, long)
+NO DOC BLOCK: android.content.Intent Method setSourceBounds(android.graphics.Rect)
+NO DOC BLOCK: android.app.WallpaperManager Method setWallpaperOffsetSteps(float, float)
+NO DOC BLOCK: android.graphics.Rect Method unflattenFromString(java.lang.String)
+NO DOC BLOCK: android.app.WallpaperManager Field ACTION_LIVE_WALLPAPER_CHOOSER
+NO DOC BLOCK: android.content.Intent Field ACTION_LOCALE_CHANGED
+NO DOC BLOCK: android.R.attr Field author
+NO DOC BLOCK: android.R.attr Field autoStart
+NO DOC BLOCK: android.media.MediaRecorder.AudioSource Field CAMCORDER
+NO DOC BLOCK: android.app.WallpaperManager Field COMMAND_DROP
+NO DOC BLOCK: android.app.WallpaperManager Field COMMAND_TAP
+NO DOC BLOCK: android.os.Build.VERSION_CODES Field ECLAIR_MR1
+NO DOC BLOCK: android.content.Intent Field EXTRA_CHANGED_COMPONENT_NAME_LIST
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_CAMERA
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_CAMERA_AUTOFOCUS
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_CAMERA_FLASH
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_LIVE_WALLPAPER
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_SENSOR_LIGHT
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_SENSOR_PROXIMITY
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_TELEPHONY
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_TELEPHONY_CDMA
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_TELEPHONY_GSM
+NO DOC BLOCK: android.content.pm.PackageManager Field FEATURE_TOUCHSCREEN_MULTITOUCH
+NO DOC BLOCK: android.content.Intent Field FILL_IN_SOURCE_BOUNDS
+NO DOC BLOCK: android.telephony.PhoneStateListener Field LISTEN_SIGNAL_STRENGTHS
+NO DOC BLOCK: android.media.MediaRecorder.AudioSource Field VOICE_RECOGNITION
diff --git a/docs/html/sdk/api_diff/7/stylesheet-jdiff.css b/docs/html/sdk/api_diff/7/stylesheet-jdiff.css
new file mode 100644
index 0000000..edafaa3
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/stylesheet-jdiff.css
@@ -0,0 +1,44 @@
+
+/* (http://www.jdiff.org) */
+
+div.and-diff-id {border: 1px solid #eee;position:relative;float:right;clear:both;padding:0px;}
+table.diffspectable {border:1px;padding:0px;margin:0px;}
+.diffspechead {background-color:#eee;}
+.diffspectable tr {border:0px;padding:0px;}
+.diffspectable td {background-color:eee;border:0px;font-size:90%;font-weight:normal;padding:0px;padding-left:1px;padding-right:1px;text-align:center;color:777;}
+td.diffvalueold {color:orange;background-color:white;border:0px;font-size:80%;font-style:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvaluenew {color:green;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvalue {color:444;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffspec {background-color:white;border:0px;font-size:80%;font-weight:normal;padding:1px;color:444;text-align:right;padding-right:.5em;line-height:.95em;}
+tt {font-size:11pt;font-family:monospace;}
+.indexHeader {
+ font-size:96%;
+ line-height:.8em;}
+.jdiffIndex td {
+ font-size:96%;
+ xline-height:.8em;
+ padding:2px;
+ padding-left:1em;}
+.indexText {
+ font-size:100%;
+ padding-left:1em;}
+#indexTableCaption {
+ font-size:96%;
+ margin-top:.25em;
+ margin-bottom:0;
+ }
+.hiddenlink {
+ font-size:96%;
+ line-height:.8em;
+ text-decoration:none;}
+a {
+ text-decoration:none;}
+a:hover {
+ text-decoration:underline;}
+.indexBox {
+ border: 1px solid red;
+ margin:1em 0 0 0;}
+.letterIndexHead {
+ font-size: 1.5em;font-weight:9;
+ margin:0 0 0em 0;
+ border: 1px solid red;}
diff --git a/docs/html/sdk/api_diff/7/user_comments_for_6_to_7.xml b/docs/html/sdk/api_diff/7/user_comments_for_6_to_7.xml
new file mode 100644
index 0000000..8a7495a
--- /dev/null
+++ b/docs/html/sdk/api_diff/7/user_comments_for_6_to_7.xml
@@ -0,0 +1,739 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
+<comments
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:noNamespaceSchemaLocation='comments.xsd'
+ name="6_to_7"
+ jdversion="1.1.0">
+
+<!-- Use this file to enter an API change description. For example, when you remove a class,
+ you can enter a comment for that class that points developers to the replacement class.
+ You can also provide a change summary for modified API, to give an overview of the changes
+ why they were made, workarounds, etc. -->
+
+<!-- When the API diffs report is generated, the comments in this file get added to the tables of
+ removed, added, and modified packages, classes, methods, and fields. This file does not ship
+ with the final report. -->
+
+<!-- The id attribute in an identifier element identifies the change as noted in the report.
+ An id has the form package[.class[.[ctor|method|field].signature]], where [] indicates optional
+ text. A comment element can have multiple identifier elements, which will will cause the same
+ text to appear at each place in the report, but will be converted to separate comments when the
+ comments file is used. -->
+
+<!-- HTML tags in the text field will appear in the report. You also need to close p HTML elements,
+ used for paragraphs - see the top-level documentation. -->
+
+<!-- You can include standard javadoc links in your change descriptions. You can use the @first command
+ to cause jdiff to include the first line of the API documentation. You also need to close p HTML
+ elements, used for paragraphs - see the top-level documentation. -->
+
+<comment>
+ <identifier id="android"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.Manifest.permission"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.Manifest.permission.SET_PREFERRED_APPLICATIONS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.R.attr"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.R.attr.author"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.R.attr.autoStart"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperInfo"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.COMMAND_DROP"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.COMMAND_TAP"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.getWallpaperInfo_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.sendWallpaperCommand_added(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.app.WallpaperManager.setWallpaperOffsetSteps_added(float, float)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.ACTION_LOCALE_CHANGED"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.FILL_IN_SOURCE_BOUNDS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.getSourceBounds_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.Intent.setSourceBounds_added(android.graphics.Rect)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_CAMERA"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_CAMERA_AUTOFOCUS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_CAMERA_FLASH"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_LIVE_WALLPAPER"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_SENSOR_LIGHT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_SENSOR_PROXIMITY"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_TELEPHONY"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_TELEPHONY_CDMA"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_TELEPHONY_GSM"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.addPackageToPreferred_changed(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.graphics"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.graphics.Rect"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.graphics.Rect.flattenToString_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.graphics.Rect.unflattenFromString_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.media"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.media.MediaRecorder.AudioSource"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.media.MediaRecorder.AudioSource.CAMCORDER"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.os"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.os.Build.VERSION_CODES"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.os.Build.VERSION_CODES.ECLAIR_MR1"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.os.PowerManager"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.os.PowerManager.isScreenOn_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.service.wallpaper"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.NeighboringCellInfo"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.PhoneStateListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTH"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.PhoneStateListener.onDataConnectionStateChanged_added(int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.PhoneStateListener.onSignalStrengthsChanged_added(android.telephony.SignalStrength)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.telephony.SignalStrength"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.View"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.View.isOpaque_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.View.onDrawScrollBars_added(android.graphics.Canvas)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.ViewGroup"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.ViewGroup.isChildrenDrawingOrderEnabled_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.view.ViewGroup.setChildrenDrawingOrderEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.CacheManager.CacheResult"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.CacheManager.CacheResult.getContentDisposition_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.CacheManager.CacheResult.getExpiresString_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.allow_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.clearAll_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.clear_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.getAllowed_added(java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.getInstance_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.GeolocationPermissions.getOrigins_added(android.webkit.ValueCallback<java.util.Set<java.lang.String>>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.ValueCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.CustomViewCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.getDefaultVideoPoster_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.getVideoLoadingProgressView_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.getVisitedHistory_added(android.webkit.ValueCallback<java.lang.String[]>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onConsoleMessage_added(java.lang.String, int, java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onHideCustomView_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onJsTimeout_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onReachedMaxAppCacheSize_added(long, long, android.webkit.WebStorage.QuotaUpdater)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onReceivedTouchIconUrl_added(android.webkit.WebView, java.lang.String, boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebChromeClient.onShowCustomView_added(android.view.View, android.webkit.WebChromeClient.CustomViewCallback)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.ZoomDensity"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.getDefaultZoom_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.getDomStorageEnabled_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.getLoadWithOverviewMode_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setAppCacheEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setAppCacheMaxSize_added(long)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setAppCachePath_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setDefaultZoom_added(android.webkit.WebSettings.ZoomDensity)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setDomStorageEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebSettings.setLoadWithOverviewMode_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.deleteAllData_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.deleteOrigin_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.getInstance_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.getOrigins_added(android.webkit.ValueCallback<java.util.Map>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.getQuotaForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.getUsageForOrigin_added(java.lang.String, android.webkit.ValueCallback<java.lang.Long>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebStorage.setQuotaForOrigin_added(java.lang.String, long)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.webkit.WebView.freeMemory_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.RemoteViews"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.RemoteViews.addView_added(int, android.widget.RemoteViews)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.RemoteViews.removeAllViews_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.ViewFlipper"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.ViewFlipper.isAutoStart_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.widget.ViewFlipper.setAutoStart_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+
+</comments>
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index a227d09..f82b2fe 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -1,11 +1,87 @@
+http://developer.android.com/
http://developer.android.com/index.html
-http://developer.android.com/favicon.ico
-http://developer.android.com/sdk/1.5_r1/index.html
+http://developer.android.com/sdk/index.html
http://developer.android.com/guide/index.html
http://developer.android.com/reference/packages.html
-http://developer.android.com/community/index.html
-http://developer.android.com/sdk/index.html
+http://developer.android.com/resources/index.html
+http://developer.android.com/videos/index.html
+http://developer.android.com/resources/dashboard/platform-versions.html
http://developer.android.com/license.html
+http://developer.android.com/sdk/terms.html
+http://developer.android.com/resources/community-groups.html
+http://developer.android.com/resources/community-more.html
+http://developer.android.com/resources/articles/index.html
+http://developer.android.com/resources/articles/avoiding-memory-leaks.html
+http://developer.android.com/resources/articles/backward-compatibility.html
+http://developer.android.com/resources/articles/can-i-use-this-intent.html
+http://developer.android.com/resources/articles/creating-input-method.html
+http://developer.android.com/resources/articles/drawable-mutations.html
+http://developer.android.com/resources/articles/faster-screen-orientation-change.html
+http://developer.android.com/resources/articles/future-proofing.html
+http://developer.android.com/resources/articles/gestures.html
+http://developer.android.com/resources/articles/glsurfaceview.html
+http://developer.android.com/resources/articles/layout-tricks-reuse.html
+http://developer.android.com/resources/articles/layout-tricks-efficiency.html
+http://developer.android.com/resources/articles/layout-tricks-stubs.html
+http://developer.android.com/resources/articles/layout-tricks-merge.html
+http://developer.android.com/resources/articles/listview-backgrounds.html
+http://developer.android.com/resources/articles/live-folders.html
+http://developer.android.com/resources/articles/on-screen-inputs.html
+http://developer.android.com/resources/articles/painless-threading.html
+http://developer.android.com/resources/articles/qsb.html
+http://developer.android.com/resources/articles/touch-mode.html
+http://developer.android.com/resources/articles/track-mem.html
+http://developer.android.com/resources/articles/ui-1.5.html
+http://developer.android.com/resources/articles/ui-1.6.html
+http://developer.android.com/resources/articles/timed-ui-updates.html
+http://developer.android.com/resources/articles/tts.html
+http://developer.android.com/resources/articles/using-webviews.html
+http://developer.android.com/resources/articles/wikinotes-linkify.html
+http://developer.android.com/resources/articles/wikinotes-intents.html
+http://developer.android.com/resources/articles/window-bg-speed.html
+http://developer.android.com/resources/articles/zipalign.html
+http://developer.android.com/resources/tutorials/hello-world.html
+http://developer.android.com/resources/tutorials/views/index.html
+http://developer.android.com/resources/tutorials/localization/index.html
+http://developer.android.com/resources/tutorials/notepad/index.html
+http://developer.android.com/resources/samples/index.html
+http://developer.android.com/resources/samples/ApiDemos/index.html
+http://developer.android.com/resources/samples/BluetoothChat/index.html
+http://developer.android.com/resources/samples/ContactManager/index.html
+http://developer.android.com/resources/samples/Home/index.html
+http://developer.android.com/resources/samples/JetBoy/index.html
+http://developer.android.com/resources/samples/LunarLander/index.html
+http://developer.android.com/resources/samples/MultiResolution/index.html
+http://developer.android.com/resources/samples/NotePad/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/index.html
+http://developer.android.com/resources/samples/Snake/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/index.html
+http://developer.android.com/resources/samples/Wiktionary/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/index.html
+http://developer.android.com/resources/faq/commontasks.html
+http://developer.android.com/resources/faq/troubleshooting.html
+http://developer.android.com/resources/faq/index.html
+http://developer.android.com/resources/faq/framework.html
+http://developer.android.com/resources/faq/licensingandoss.html
+http://developer.android.com/resources/faq/security.html
+http://developer.android.com/sdk/installing.html
+http://developer.android.com/sdk/adding-components.html
+http://developer.android.com/sdk/android-2.0.1.html
+http://developer.android.com/sdk/android-1.6.html
+http://developer.android.com/sdk/android-1.5.html
+http://developer.android.com/sdk/android-2.0.html
+http://developer.android.com/sdk/android-1.1.html
+http://developer.android.com/sdk/tools-notes.html
+http://developer.android.com/sdk/win-usb.html
+http://developer.android.com/sdk/eclipse-adt.html
+http://developer.android.com/sdk/adt-notes.html
+http://developer.android.com/sdk/ndk/1.6_r1/index.html
+http://developer.android.com/sdk/requirements.html
+http://developer.android.com/sdk/RELEASENOTES.html
+http://developer.android.com/sdk/older_releases.html
+http://developer.android.com/sdk/download.html?v=android-sdk_r04-windows.zip
+http://developer.android.com/sdk/download.html?v=android-sdk_r04-mac_86.zip
+http://developer.android.com/sdk/download.html?v=android-sdk_r04-linux_86.tgz
http://developer.android.com/guide/basics/what-is-android.html
http://developer.android.com/guide/topics/fundamentals.html
http://developer.android.com/guide/topics/ui/index.html
@@ -22,6 +98,7 @@
http://developer.android.com/guide/topics/resources/index.html
http://developer.android.com/guide/topics/resources/resources-i18n.html
http://developer.android.com/guide/topics/resources/available-resources.html
+http://developer.android.com/guide/topics/resources/localization.html
http://developer.android.com/guide/topics/intents/intents-filters.html
http://developer.android.com/guide/topics/data/data-storage.html
http://developer.android.com/guide/topics/providers/content-providers.html
@@ -38,13 +115,16 @@
http://developer.android.com/guide/topics/manifest/intent-filter-element.html
http://developer.android.com/guide/topics/manifest/manifest-element.html
http://developer.android.com/guide/topics/manifest/meta-data-element.html
+http://developer.android.com/guide/topics/manifest/path-permission-element.html
http://developer.android.com/guide/topics/manifest/permission-element.html
http://developer.android.com/guide/topics/manifest/permission-group-element.html
http://developer.android.com/guide/topics/manifest/permission-tree-element.html
http://developer.android.com/guide/topics/manifest/provider-element.html
http://developer.android.com/guide/topics/manifest/receiver-element.html
http://developer.android.com/guide/topics/manifest/service-element.html
+http://developer.android.com/guide/topics/manifest/supports-screens-element.html
http://developer.android.com/guide/topics/manifest/uses-configuration-element.html
+http://developer.android.com/guide/topics/manifest/uses-feature-element.html
http://developer.android.com/guide/topics/manifest/uses-library-element.html
http://developer.android.com/guide/topics/manifest/uses-permission-element.html
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
@@ -54,6 +134,7 @@
http://developer.android.com/guide/topics/media/index.html
http://developer.android.com/guide/topics/location/index.html
http://developer.android.com/guide/topics/appwidgets/index.html
+http://developer.android.com/guide/topics/wireless/bluetooth.html
http://developer.android.com/guide/developing/eclipse-adt.html
http://developer.android.com/guide/developing/other-ide.html
http://developer.android.com/guide/developing/device.html
@@ -68,53 +149,40 @@
http://developer.android.com/guide/developing/tools/draw9patch.html
http://developer.android.com/guide/developing/tools/emulator.html
http://developer.android.com/guide/developing/tools/hierarchy-viewer.html
+http://developer.android.com/guide/developing/tools/layoutopt.html
http://developer.android.com/guide/developing/tools/monkey.html
http://developer.android.com/guide/developing/tools/traceview.html
+http://developer.android.com/guide/developing/tools/zipalign.html
http://developer.android.com/guide/publishing/app-signing.html
http://developer.android.com/guide/publishing/versioning.html
http://developer.android.com/guide/publishing/preparing.html
http://developer.android.com/guide/publishing/publishing.html
+http://developer.android.com/guide/practices/screens_support.html
http://developer.android.com/guide/practices/ui_guidelines/index.html
http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
+http://developer.android.com/guide/practices/ui_guidelines/activity_task_design.html
+http://developer.android.com/guide/practices/ui_guidelines/menu_design.html
http://developer.android.com/guide/practices/design/performance.html
http://developer.android.com/guide/practices/design/responsiveness.html
http://developer.android.com/guide/practices/design/seamlessness.html
-http://developer.android.com/guide/tutorials/hello-world.html
-http://developer.android.com/guide/tutorials/views/index.html
-http://developer.android.com/guide/tutorials/notepad/index.html
-http://developer.android.com/guide/samples/index.html
-http://developer.android.com/guide/samples/ApiDemos/index.html
-http://developer.android.com/guide/samples/LunarLander/index.html
-http://developer.android.com/guide/samples/NotePad/index.html
+http://developer.android.com/guide/appendix/api-levels.html
http://developer.android.com/guide/appendix/media-formats.html
http://developer.android.com/guide/appendix/g-app-intents.html
http://developer.android.com/guide/appendix/glossary.html
-http://developer.android.com/guide/appendix/faq/index.html
-http://developer.android.com/sdk/terms.html
-http://developer.android.com/sdk/1.5_r1/installing.html
-http://developer.android.com/sdk/1.5_r1/upgrading.html
-http://developer.android.com/sdk/1.5_r1/requirements.html
-http://developer.android.com/sdk/RELEASENOTES.html
-http://developer.android.com/sdk/android-1.5.html
-http://developer.android.com/sdk/android-1.1.html
-http://developer.android.com/sdk/1.1_r1/index.html
-http://developer.android.com/sdk/1.0_r2/index.html
-http://developer.android.com/sdk/1.0_r1/index.html
-http://developer.android.com/sdk/older_releases.html
-http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.5_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-mac_x86-1.5_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-1.5_r1.zip
-http://developer.android.com/reference/android/location/Geocoder.html
http://developer.android.com/reference/classes.html
http://developer.android.com/reference/android/package-summary.html
+http://developer.android.com/reference/android/accessibilityservice/package-summary.html
+http://developer.android.com/reference/android/accounts/package-summary.html
http://developer.android.com/reference/android/app/package-summary.html
http://developer.android.com/reference/android/appwidget/package-summary.html
+http://developer.android.com/reference/android/bluetooth/package-summary.html
http://developer.android.com/reference/android/content/package-summary.html
http://developer.android.com/reference/android/content/pm/package-summary.html
http://developer.android.com/reference/android/content/res/package-summary.html
http://developer.android.com/reference/android/database/package-summary.html
http://developer.android.com/reference/android/database/sqlite/package-summary.html
+http://developer.android.com/reference/android/gesture/package-summary.html
http://developer.android.com/reference/android/graphics/package-summary.html
http://developer.android.com/reference/android/graphics/drawable/package-summary.html
http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
@@ -131,7 +199,9 @@
http://developer.android.com/reference/android/provider/package-summary.html
http://developer.android.com/reference/android/sax/package-summary.html
http://developer.android.com/reference/android/speech/package-summary.html
+http://developer.android.com/reference/android/speech/tts/package-summary.html
http://developer.android.com/reference/android/telephony/package-summary.html
+http://developer.android.com/reference/android/telephony/cdma/package-summary.html
http://developer.android.com/reference/android/telephony/gsm/package-summary.html
http://developer.android.com/reference/android/test/package-summary.html
http://developer.android.com/reference/android/test/mock/package-summary.html
@@ -143,6 +213,7 @@
http://developer.android.com/reference/android/text/util/package-summary.html
http://developer.android.com/reference/android/util/package-summary.html
http://developer.android.com/reference/android/view/package-summary.html
+http://developer.android.com/reference/android/view/accessibility/package-summary.html
http://developer.android.com/reference/android/view/animation/package-summary.html
http://developer.android.com/reference/android/view/inputmethod/package-summary.html
http://developer.android.com/reference/android/webkit/package-summary.html
@@ -236,237 +307,167 @@
http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
-http://developer.android.com/reference/android/view/ViewGroup.html
+http://developer.android.com/reference/android/app/Activity.html
+http://developer.android.com/reference/android/view/View.html
+http://developer.android.com/reference/android/widget/TextView.html
+http://developer.android.com/reference/android/content/Context.html
+http://developer.android.com/resources/samples/Wiktionary/res/index.html
+http://developer.android.com/resources/samples/Wiktionary/src/index.html
+http://developer.android.com/resources/samples/Wiktionary/AndroidManifest.html
+http://developer.android.com/reference/android/app/Application.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.html
+http://developer.android.com/reference/java/lang/ref/WeakReference.html
+http://developer.android.com/resources/samples/ApiDemos/assets/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/index.html
+http://developer.android.com/resources/samples/ApiDemos/AndroidManifest.html
+http://developer.android.com/reference/android/provider/LiveFolders.html
+http://developer.android.com/resources/samples/NotePad/res/index.html
+http://developer.android.com/resources/samples/NotePad/src/index.html
+http://developer.android.com/resources/samples/NotePad/tests/index.html
+http://developer.android.com/resources/samples/NotePad/AndroidManifest.html
http://developer.android.com/reference/android/widget/FrameLayout.html
-http://developer.android.com/reference/android/widget/LinearLayout.html
-http://developer.android.com/guide/tutorials/views/hello-linearlayout.html
-http://developer.android.com/reference/android/widget/TableLayout.html
-http://developer.android.com/reference/android/widget/TableRow.html
-http://developer.android.com/guide/tutorials/views/hello-tablelayout.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.html
-http://developer.android.com/reference/android/widget/RelativeLayout.html
-http://developer.android.com/guide/tutorials/views/hello-relativelayout.html
-http://developer.android.com/reference/android/widget/Gallery.html
-http://developer.android.com/reference/android/widget/GridView.html
-http://developer.android.com/reference/android/widget/ListView.html
-http://developer.android.com/reference/android/widget/ScrollView.html
-http://developer.android.com/reference/android/widget/Spinner.html
-http://developer.android.com/reference/android/view/SurfaceView.html
-http://developer.android.com/reference/android/widget/TabHost.html
-http://developer.android.com/reference/android/widget/ViewFlipper.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.html
+http://developer.android.com/reference/android/widget/ImageView.html
+http://developer.android.com/reference/android/view/LayoutInflater.html
+http://developer.android.com/reference/android/view/View.OnClickListener.html
+http://developer.android.com/reference/android/os/Handler.html
+http://developer.android.com/reference/android/os/AsyncTask.html
+http://developer.android.com/reference/android/app/SearchManager.html
+http://developer.android.com/reference/android/content/ContentProvider.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/AndroidManifest.html
+http://developer.android.com/reference/android/view/ContextThemeWrapper.html
+http://developer.android.com/reference/android/R.style.html
+http://developer.android.com/reference/android/app/AliasActivity.html
+http://developer.android.com/reference/android/util/Log.html
+http://developer.android.com/reference/android/os/Debug.html
http://developer.android.com/reference/android/R.attr.html
http://developer.android.com/reference/android/R.styleable.html
-http://developer.android.com/reference/android/content/Context.html
http://developer.android.com/reference/java/lang/SecurityException.html
http://developer.android.com/reference/android/Manifest.permission.html
http://developer.android.com/reference/android/Manifest.permission_group.html
-http://developer.android.com/reference/android/app/Activity.html
http://developer.android.com/reference/android/app/Service.html
http://developer.android.com/reference/android/content/BroadcastReceiver.html
-http://developer.android.com/reference/android/content/ContentProvider.html
http://developer.android.com/reference/android/content/ContentResolver.html
http://developer.android.com/reference/android/content/pm/PackageManager.html
http://developer.android.com/reference/android/content/Intent.html
-http://developer.android.com/reference/android/os/Debug.html
+http://developer.android.com/reference/java/util/zip/Checksum.html
+http://developer.android.com/reference/java/util/zip/Adler32.html
+http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
+http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
+http://developer.android.com/reference/java/util/zip/CRC32.html
+http://developer.android.com/reference/java/util/zip/Deflater.html
+http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
+http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
+http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
+http://developer.android.com/reference/java/util/zip/Inflater.html
+http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
+http://developer.android.com/reference/java/util/zip/ZipEntry.html
+http://developer.android.com/reference/java/util/zip/ZipFile.html
+http://developer.android.com/reference/java/util/zip/ZipInputStream.html
+http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
+http://developer.android.com/reference/java/util/zip/DataFormatException.html
+http://developer.android.com/reference/java/util/zip/ZipException.html
+http://developer.android.com/reference/java/util/zip/package-descr.html
+http://developer.android.com/reference/android/os/Parcelable.html
+http://developer.android.com/reference/android/os/Parcelable.Creator.html
+http://developer.android.com/reference/android/graphics/Rect.html
+http://developer.android.com/reference/android/os/Parcel.html
+http://developer.android.com/reference/android/content/ServiceConnection.html
+http://developer.android.com/reference/android/os/IBinder.html
+http://developer.android.com/reference/android/os/DeadObjectException.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
+http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
+http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
+http://developer.android.com/reference/android/view/ViewGroup.html
+http://developer.android.com/reference/android/widget/Button.html
+http://developer.android.com/reference/android/widget/EditText.html
+http://developer.android.com/reference/android/widget/ListView.html
+http://developer.android.com/reference/android/widget/CheckBox.html
+http://developer.android.com/reference/android/widget/RadioButton.html
+http://developer.android.com/reference/android/widget/Gallery.html
+http://developer.android.com/reference/android/widget/Spinner.html
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
+http://developer.android.com/reference/android/widget/ImageSwitcher.html
+http://developer.android.com/reference/android/widget/TextSwitcher.html
+http://developer.android.com/reference/android/widget/LinearLayout.html
+http://developer.android.com/reference/android/widget/RelativeLayout.html
+http://developer.android.com/reference/android/app/ListActivity.html
http://developer.android.com/reference/android/graphics/Canvas.html
-http://developer.android.com/reference/android/app/Dialog.html
-http://developer.android.com/reference/android/view/Surface.html
-http://developer.android.com/reference/android/R.style.html
-http://developer.android.com/reference/android/view/View.html
-http://developer.android.com/reference/android/view/Window.html
-http://developer.android.com/reference/android/os/PatternMatcher.html
-http://developer.android.com/reference/android/view/ContextThemeWrapper.html
-http://developer.android.com/reference/android/app/Instrumentation.html
-http://developer.android.com/reference/android/util/Log.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.html
+http://developer.android.com/reference/android/view/SurfaceView.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
+http://developer.android.com/reference/java/util/regex/MatchResult.html
+http://developer.android.com/reference/java/util/regex/Matcher.html
+http://developer.android.com/reference/java/util/regex/Pattern.html
+http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
+http://developer.android.com/reference/java/util/regex/package-descr.html
+http://developer.android.com/reference/android/text/Editable.html
+http://developer.android.com/reference/android/text/GetChars.html
+http://developer.android.com/reference/android/text/Html.ImageGetter.html
+http://developer.android.com/reference/android/text/Html.TagHandler.html
+http://developer.android.com/reference/android/text/InputFilter.html
+http://developer.android.com/reference/android/text/InputType.html
+http://developer.android.com/reference/android/text/NoCopySpan.html
+http://developer.android.com/reference/android/text/ParcelableSpan.html
+http://developer.android.com/reference/android/text/Spannable.html
+http://developer.android.com/reference/android/text/Spanned.html
+http://developer.android.com/reference/android/text/SpanWatcher.html
+http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
+http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
+http://developer.android.com/reference/android/text/TextWatcher.html
+http://developer.android.com/reference/android/text/AlteredCharSequence.html
+http://developer.android.com/reference/android/text/AndroidCharacter.html
+http://developer.android.com/reference/android/text/Annotation.html
+http://developer.android.com/reference/android/text/AutoText.html
+http://developer.android.com/reference/android/text/BoringLayout.html
+http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
+http://developer.android.com/reference/android/text/ClipboardManager.html
+http://developer.android.com/reference/android/text/DynamicLayout.html
+http://developer.android.com/reference/android/text/Editable.Factory.html
+http://developer.android.com/reference/android/text/Html.html
+http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
+http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
+http://developer.android.com/reference/android/text/Layout.html
+http://developer.android.com/reference/android/text/Layout.Directions.html
+http://developer.android.com/reference/android/text/LoginFilter.html
+http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
+http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
+http://developer.android.com/reference/android/text/Selection.html
+http://developer.android.com/reference/android/text/Spannable.Factory.html
+http://developer.android.com/reference/android/text/SpannableString.html
+http://developer.android.com/reference/android/text/SpannableStringBuilder.html
+http://developer.android.com/reference/android/text/SpannedString.html
+http://developer.android.com/reference/android/text/StaticLayout.html
+http://developer.android.com/reference/android/text/TextPaint.html
+http://developer.android.com/reference/android/text/TextUtils.html
+http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
+http://developer.android.com/reference/android/text/Layout.Alignment.html
+http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
+http://developer.android.com/reference/android/text/package-descr.html
http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
-http://developer.android.com/reference/android/widget/ImageView.html
-http://developer.android.com/reference/android/content/res/Resources.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
-http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
-http://developer.android.com/reference/android/view/animation/AnimationSet.html
-http://developer.android.com/reference/android/view/animation/Animation.html
-http://developer.android.com/reference/android/view/animation/Interpolator.html
-http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
-http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
-http://developer.android.com/guide/appendix/faq/troubleshooting.html
-http://developer.android.com/reference/android/database/Cursor.html
-http://developer.android.com/reference/android/net/Uri.html
-http://developer.android.com/reference/android/content/ContentUris.html
-http://developer.android.com/reference/android/provider/Contacts.Phones.html
-http://developer.android.com/reference/android/provider/BaseColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
-http://developer.android.com/reference/android/provider/Contacts.People.html
-http://developer.android.com/reference/java/io/InputStream.html
-http://developer.android.com/reference/android/content/ContentValues.html
-http://developer.android.com/reference/android/provider/MediaStore.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
-http://developer.android.com/reference/android/database/MatrixCursor.html
-http://developer.android.com/guide/tutorials/views/hello-spinner.html
-http://developer.android.com/guide/tutorials/views/hello-listview.html
-http://developer.android.com/guide/tutorials/views/hello-gridview.html
-http://developer.android.com/reference/android/widget/AdapterView.html
-http://developer.android.com/reference/android/widget/Adapter.html
-http://developer.android.com/reference/android/widget/ArrayAdapter.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
-http://developer.android.com/reference/android/app/NotificationManager.html
-http://developer.android.com/sdk/api_diff/3/changes.html
-http://developer.android.com/reference/android/provider/Settings.Secure.html
-http://developer.android.com/reference/android/media/MediaPlayer.html
-http://developer.android.com/reference/android/media/MediaRecorder.html
-http://developer.android.com/reference/android/media/JetPlayer.html
-http://developer.android.com/reference/android/media/SoundPool.html
-http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
-http://developer.android.com/reference/android/graphics/NinePatch.html
-http://developer.android.com/guide/developing/tools/adt.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.html
-http://developer.android.com/reference/android/graphics/Bitmap.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
-http://developer.android.com/reference/android/graphics/BitmapShader.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
-http://developer.android.com/reference/android/graphics/Camera.html
-http://developer.android.com/reference/android/graphics/Color.html
-http://developer.android.com/reference/android/graphics/ColorFilter.html
-http://developer.android.com/reference/android/graphics/ColorMatrix.html
-http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
-http://developer.android.com/reference/android/graphics/ComposePathEffect.html
-http://developer.android.com/reference/android/graphics/ComposeShader.html
-http://developer.android.com/reference/android/graphics/CornerPathEffect.html
-http://developer.android.com/reference/android/graphics/DashPathEffect.html
-http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
-http://developer.android.com/reference/android/graphics/DrawFilter.html
-http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
-http://developer.android.com/reference/android/graphics/Interpolator.html
-http://developer.android.com/reference/android/graphics/LayerRasterizer.html
-http://developer.android.com/reference/android/graphics/LightingColorFilter.html
-http://developer.android.com/reference/android/graphics/LinearGradient.html
-http://developer.android.com/reference/android/graphics/MaskFilter.html
-http://developer.android.com/reference/android/graphics/Matrix.html
-http://developer.android.com/reference/android/graphics/Movie.html
-http://developer.android.com/reference/android/graphics/Paint.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
-http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
-http://developer.android.com/reference/android/graphics/Path.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
-http://developer.android.com/reference/android/graphics/PathEffect.html
-http://developer.android.com/reference/android/graphics/PathMeasure.html
-http://developer.android.com/reference/android/graphics/Picture.html
-http://developer.android.com/reference/android/graphics/PixelFormat.html
-http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
-http://developer.android.com/reference/android/graphics/Point.html
-http://developer.android.com/reference/android/graphics/PointF.html
-http://developer.android.com/reference/android/graphics/PorterDuff.html
-http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
-http://developer.android.com/reference/android/graphics/RadialGradient.html
-http://developer.android.com/reference/android/graphics/Rasterizer.html
-http://developer.android.com/reference/android/graphics/Rect.html
-http://developer.android.com/reference/android/graphics/RectF.html
-http://developer.android.com/reference/android/graphics/Region.html
-http://developer.android.com/reference/android/graphics/RegionIterator.html
-http://developer.android.com/reference/android/graphics/Shader.html
-http://developer.android.com/reference/android/graphics/SumPathEffect.html
-http://developer.android.com/reference/android/graphics/SweepGradient.html
-http://developer.android.com/reference/android/graphics/Typeface.html
-http://developer.android.com/reference/android/graphics/Xfermode.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
-http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
-http://developer.android.com/reference/android/graphics/Bitmap.Config.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
-http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
-http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
-http://developer.android.com/reference/android/graphics/Interpolator.Result.html
-http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
-http://developer.android.com/reference/android/graphics/Paint.Align.html
-http://developer.android.com/reference/android/graphics/Paint.Cap.html
-http://developer.android.com/reference/android/graphics/Paint.Join.html
-http://developer.android.com/reference/android/graphics/Paint.Style.html
-http://developer.android.com/reference/android/graphics/Path.Direction.html
-http://developer.android.com/reference/android/graphics/Path.FillType.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
-http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
-http://developer.android.com/reference/android/graphics/Region.Op.html
-http://developer.android.com/reference/android/graphics/Shader.TileMode.html
-http://developer.android.com/reference/java/lang/Object.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
-http://developer.android.com/reference/java/lang/String.html
-http://developer.android.com/reference/java/lang/CharSequence.html
-http://developer.android.com/reference/java/lang/Class.html
-http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
-http://developer.android.com/reference/java/lang/Throwable.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
-http://developer.android.com/reference/android/test/TestSuiteProvider.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
-http://developer.android.com/reference/android/test/ActivityTestCase.html
-http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestRunner.html
-http://developer.android.com/reference/android/test/ApplicationTestCase.html
-http://developer.android.com/reference/android/app/Application.html
-http://developer.android.com/reference/android/test/InstrumentationTestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
-http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
-http://developer.android.com/reference/android/test/IsolatedContext.html
-http://developer.android.com/reference/android/test/MoreAsserts.html
-http://developer.android.com/reference/android/test/ProviderTestCase.html
-http://developer.android.com/reference/android/test/ProviderTestCase2.html
-http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
-http://developer.android.com/reference/android/test/ServiceTestCase.html
-http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
-http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
-http://developer.android.com/reference/android/test/TouchUtils.html
-http://developer.android.com/reference/android/test/ViewAsserts.html
-http://developer.android.com/reference/android/test/AssertionFailedError.html
-http://developer.android.com/reference/android/test/ComparisonFailure.html
-http://developer.android.com/reference/android/test/package-descr.html
-http://developer.android.com/reference/junit/framework/TestCase.html
-http://developer.android.com/reference/junit/framework/TestSuite.html
-http://developer.android.com/reference/android/Manifest.html
-http://developer.android.com/reference/android/R.html
-http://developer.android.com/reference/android/R.anim.html
-http://developer.android.com/reference/android/R.array.html
-http://developer.android.com/reference/android/R.bool.html
-http://developer.android.com/reference/android/R.color.html
-http://developer.android.com/reference/android/R.dimen.html
-http://developer.android.com/reference/android/R.drawable.html
-http://developer.android.com/reference/android/R.id.html
-http://developer.android.com/reference/android/R.integer.html
-http://developer.android.com/reference/android/R.layout.html
-http://developer.android.com/reference/android/R.plurals.html
-http://developer.android.com/reference/android/R.raw.html
-http://developer.android.com/reference/android/R.string.html
-http://developer.android.com/reference/android/R.xml.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
-http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
-http://developer.android.com/reference/junit/runner/BaseTestRunner.html
-http://developer.android.com/reference/junit/runner/Version.html
-http://developer.android.com/reference/junit/runner/package-descr.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/auth/Credentials.html
-http://developer.android.com/reference/org/apache/http/auth/AUTH.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
-http://developer.android.com/reference/org/apache/http/auth/AuthState.html
-http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
-http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
-http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
-http://developer.android.com/reference/org/apache/http/auth/package-descr.html
http://developer.android.com/reference/android/view/ContextMenu.html
http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
@@ -480,7 +481,6 @@
http://developer.android.com/reference/android/view/SubMenu.html
http://developer.android.com/reference/android/view/SurfaceHolder.html
http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
-http://developer.android.com/reference/android/view/View.OnClickListener.html
http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
http://developer.android.com/reference/android/view/View.OnKeyListener.html
@@ -507,12 +507,13 @@
http://developer.android.com/reference/android/view/KeyCharacterMap.html
http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
http://developer.android.com/reference/android/view/KeyEvent.html
-http://developer.android.com/reference/android/view/LayoutInflater.html
+http://developer.android.com/reference/android/view/KeyEvent.DispatcherState.html
http://developer.android.com/reference/android/view/MenuInflater.html
http://developer.android.com/reference/android/view/MotionEvent.html
http://developer.android.com/reference/android/view/OrientationEventListener.html
http://developer.android.com/reference/android/view/OrientationListener.html
http://developer.android.com/reference/android/view/SoundEffectConstants.html
+http://developer.android.com/reference/android/view/Surface.html
http://developer.android.com/reference/android/view/TouchDelegate.html
http://developer.android.com/reference/android/view/VelocityTracker.html
http://developer.android.com/reference/android/view/View.BaseSavedState.html
@@ -523,6 +524,7 @@
http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
http://developer.android.com/reference/android/view/ViewStub.html
http://developer.android.com/reference/android/view/ViewTreeObserver.html
+http://developer.android.com/reference/android/view/Window.html
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
@@ -530,94 +532,227 @@
http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
+http://developer.android.com/reference/java/lang/Object.html
http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityEventSource.html
http://developer.android.com/reference/android/widget/AnalogClock.html
http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html
http://developer.android.com/reference/android/widget/ProgressBar.html
-http://developer.android.com/reference/android/widget/TextView.html
http://developer.android.com/reference/android/inputmethodservice/Keyboard.html
http://developer.android.com/reference/android/widget/AbsListView.html
http://developer.android.com/reference/android/widget/AbsSeekBar.html
http://developer.android.com/reference/android/widget/AbsSpinner.html
+http://developer.android.com/reference/android/widget/AbsoluteLayout.html
+http://developer.android.com/reference/android/widget/AdapterView.html
+http://developer.android.com/reference/android/widget/Adapter.html
http://developer.android.com/reference/android/appwidget/AppWidgetHostView.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/Button.html
-http://developer.android.com/reference/android/widget/CheckBox.html
http://developer.android.com/reference/android/widget/CheckedTextView.html
http://developer.android.com/reference/android/widget/Chronometer.html
http://developer.android.com/reference/android/widget/CompoundButton.html
http://developer.android.com/reference/android/widget/DatePicker.html
http://developer.android.com/reference/android/widget/DialerFilter.html
http://developer.android.com/reference/android/widget/DigitalClock.html
-http://developer.android.com/reference/android/widget/EditText.html
http://developer.android.com/reference/android/widget/ExpandableListView.html
http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html
http://developer.android.com/reference/android/opengl/GLSurfaceView.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.html
+http://developer.android.com/reference/android/widget/GridView.html
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
http://developer.android.com/reference/android/widget/ImageButton.html
-http://developer.android.com/reference/android/widget/ImageSwitcher.html
http://developer.android.com/reference/android/widget/MediaController.html
http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/RadioButton.html
+http://developer.android.com/reference/android/widget/QuickContactBadge.html
http://developer.android.com/reference/android/widget/RadioGroup.html
http://developer.android.com/reference/android/widget/RatingBar.html
+http://developer.android.com/reference/android/widget/ScrollView.html
http://developer.android.com/reference/android/widget/SeekBar.html
http://developer.android.com/reference/android/widget/SlidingDrawer.html
+http://developer.android.com/reference/android/widget/TabHost.html
http://developer.android.com/reference/android/widget/TabWidget.html
-http://developer.android.com/reference/android/widget/TextSwitcher.html
+http://developer.android.com/reference/android/widget/TableLayout.html
+http://developer.android.com/reference/android/widget/TableRow.html
http://developer.android.com/reference/android/widget/TimePicker.html
http://developer.android.com/reference/android/widget/ToggleButton.html
http://developer.android.com/reference/android/widget/TwoLineListItem.html
http://developer.android.com/reference/android/widget/VideoView.html
http://developer.android.com/reference/android/widget/ViewAnimator.html
+http://developer.android.com/reference/android/widget/ViewFlipper.html
+http://developer.android.com/reference/android/widget/ViewSwitcher.html
http://developer.android.com/reference/android/webkit/WebView.html
http://developer.android.com/reference/android/widget/ZoomButton.html
http://developer.android.com/reference/android/widget/ZoomControls.html
http://developer.android.com/reference/android/widget/Checkable.html
-http://developer.android.com/reference/android/os/Handler.html
+http://developer.android.com/reference/android/view/animation/Animation.html
http://developer.android.com/reference/java/lang/RuntimeException.html
+http://developer.android.com/reference/java/lang/String.html
http://developer.android.com/reference/android/util/AttributeSet.html
http://developer.android.com/reference/java/util/ArrayList.html
http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
-http://developer.android.com/reference/android/os/IBinder.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
+http://developer.android.com/reference/java/lang/CharSequence.html
+http://developer.android.com/reference/android/graphics/Bitmap.html
+http://developer.android.com/reference/android/graphics/Point.html
+http://developer.android.com/reference/android/content/res/Resources.html
http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
http://developer.android.com/reference/java/lang/Runnable.html
http://developer.android.com/reference/android/util/SparseArray.html
-http://developer.android.com/reference/android/os/Parcelable.html
http://developer.android.com/reference/android/content/res/TypedArray.html
-http://developer.android.com/
+http://developer.android.com/reference/java/lang/Class.html
http://developer.android.com/reference/android/widget/Scroller.html
http://developer.android.com/reference/android/os/SystemClock.html
-http://developer.android.com/reference/android/util/Printer.html
-http://developer.android.com/reference/android/util/Config.html
-http://developer.android.com/reference/android/util/DebugUtils.html
-http://developer.android.com/reference/android/util/DisplayMetrics.html
-http://developer.android.com/reference/android/util/EventLogTags.html
-http://developer.android.com/reference/android/util/EventLogTags.Description.html
-http://developer.android.com/reference/android/util/FloatMath.html
-http://developer.android.com/reference/android/util/LogPrinter.html
-http://developer.android.com/reference/android/util/MonthDisplayHelper.html
-http://developer.android.com/reference/android/util/PrintStreamPrinter.html
-http://developer.android.com/reference/android/util/PrintWriterPrinter.html
-http://developer.android.com/reference/android/util/SparseBooleanArray.html
-http://developer.android.com/reference/android/util/SparseIntArray.html
-http://developer.android.com/reference/android/util/StateSet.html
-http://developer.android.com/reference/android/util/StringBuilderPrinter.html
-http://developer.android.com/reference/android/util/TimeUtils.html
-http://developer.android.com/reference/android/util/TimingLogger.html
-http://developer.android.com/reference/android/util/TypedValue.html
-http://developer.android.com/reference/android/util/Xml.html
-http://developer.android.com/reference/android/util/Xml.Encoding.html
-http://developer.android.com/reference/android/util/AndroidException.html
-http://developer.android.com/reference/android/util/AndroidRuntimeException.html
-http://developer.android.com/reference/android/util/TimeFormatException.html
-http://developer.android.com/reference/android/util/package-descr.html
-http://developer.android.com/reference/java/lang/Math.html
-http://developer.android.com/reference/java/io/PrintStream.html
-http://developer.android.com/reference/java/io/PrintWriter.html
-http://developer.android.com/reference/java/lang/StringBuilder.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.html
+http://developer.android.com/reference/java/lang/IllegalArgumentException.html
+http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
+http://developer.android.com/reference/java/lang/Throwable.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnUtteranceCompletedListener.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine.html
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
+http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
+http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/impl/package-descr.html
+http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
+http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
+http://developer.android.com/reference/java/security/cert/CertPathParameters.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
+http://developer.android.com/reference/java/security/cert/CertSelector.html
+http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
+http://developer.android.com/reference/java/security/cert/CRLSelector.html
+http://developer.android.com/reference/java/security/cert/PolicyNode.html
+http://developer.android.com/reference/java/security/cert/X509Extension.html
+http://developer.android.com/reference/java/security/cert/Certificate.html
+http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
+http://developer.android.com/reference/java/security/cert/CertificateFactory.html
+http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
+http://developer.android.com/reference/java/security/cert/CertPath.html
+http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
+http://developer.android.com/reference/java/security/cert/CertPathValidator.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
+http://developer.android.com/reference/java/security/cert/CertStore.html
+http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
+http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
+http://developer.android.com/reference/java/security/cert/CRL.html
+http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
+http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
+http://developer.android.com/reference/java/security/cert/PKIXParameters.html
+http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
+http://developer.android.com/reference/java/security/cert/TrustAnchor.html
+http://developer.android.com/reference/java/security/cert/X509Certificate.html
+http://developer.android.com/reference/java/security/cert/X509CertSelector.html
+http://developer.android.com/reference/java/security/cert/X509CRL.html
+http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
+http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
+http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
+http://developer.android.com/reference/java/security/cert/CertificateException.html
+http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
+http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
+http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
+http://developer.android.com/reference/java/security/cert/CertStoreException.html
+http://developer.android.com/reference/java/security/cert/CRLException.html
+http://developer.android.com/reference/java/security/cert/package-descr.html
http://developer.android.com/reference/android/location/LocationManager.html
+http://developer.android.com/reference/android/os/Handler.Callback.html
+http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
+http://developer.android.com/reference/android/os/IInterface.html
+http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
+http://developer.android.com/reference/android/os/BatteryManager.html
+http://developer.android.com/reference/android/os/Binder.html
+http://developer.android.com/reference/android/os/Build.html
+http://developer.android.com/reference/android/os/Build.VERSION.html
+http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
+http://developer.android.com/reference/android/os/Bundle.html
+http://developer.android.com/reference/android/os/ConditionVariable.html
+http://developer.android.com/reference/android/os/CountDownTimer.html
+http://developer.android.com/reference/android/os/Debug.InstructionCount.html
+http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
+http://developer.android.com/reference/android/os/Environment.html
+http://developer.android.com/reference/android/os/FileObserver.html
+http://developer.android.com/reference/android/os/HandlerThread.html
+http://developer.android.com/reference/android/os/Looper.html
+http://developer.android.com/reference/android/os/MemoryFile.html
+http://developer.android.com/reference/android/os/Message.html
+http://developer.android.com/reference/android/os/MessageQueue.html
+http://developer.android.com/reference/android/os/Messenger.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
+http://developer.android.com/reference/android/os/ParcelUuid.html
+http://developer.android.com/reference/android/os/PatternMatcher.html
+http://developer.android.com/reference/android/os/PowerManager.html
+http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
+http://developer.android.com/reference/android/os/Process.html
+http://developer.android.com/reference/android/os/RemoteCallbackList.html
+http://developer.android.com/reference/android/os/ResultReceiver.html
+http://developer.android.com/reference/android/os/StatFs.html
+http://developer.android.com/reference/android/os/TokenWatcher.html
+http://developer.android.com/reference/android/os/Vibrator.html
+http://developer.android.com/reference/android/os/AsyncTask.Status.html
+http://developer.android.com/reference/android/os/BadParcelableException.html
+http://developer.android.com/reference/android/os/ParcelFormatException.html
+http://developer.android.com/reference/android/os/RemoteException.html
+http://developer.android.com/reference/java/lang/Void.html
+http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
+http://developer.android.com/reference/java/lang/IllegalStateException.html
+http://developer.android.com/reference/java/util/concurrent/CancellationException.html
+http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
+http://developer.android.com/reference/java/lang/InterruptedException.html
+http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
+http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECField.html
+http://developer.android.com/reference/java/security/spec/KeySpec.html
+http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
+http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
+http://developer.android.com/reference/java/security/spec/ECFieldFp.html
+http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECPoint.html
+http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/EllipticCurve.html
+http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
+http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
+http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
+http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
+http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
+http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
+http://developer.android.com/reference/java/security/spec/package-descr.html
+http://developer.android.com/reference/android/app/Instrumentation.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/package-descr.html
+http://developer.android.com/reference/android/graphics/Path.html
http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
@@ -628,247 +763,369 @@
http://developer.android.com/reference/org/apache/http/client/protocol/package-descr.html
http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
http://developer.android.com/reference/org/apache/http/client/CookieStore.html
-http://developer.android.com/reference/android/net/http/SslCertificate.html
-http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
-http://developer.android.com/images/widget_design/Music_widget_button_states.psd
-http://developer.android.com/images/widget_design/4x1_Widget_Frame_Portrait.psd
-http://developer.android.com/images/widget_design/3x3_Widget_Frame_Portrait.psd
-http://developer.android.com/images/widget_design/2x2_Widget_Frame_Portrait.psd
-http://developer.android.com/images/widget_design/4x1_Widget_Frame_Landscape.psd
-http://developer.android.com/images/widget_design/3x3_Widget_Frame_Landscape.psd
-http://developer.android.com/images/widget_design/2x2_Widget_Frame_Landscape.psd
-http://developer.android.com/reference/javax/security/auth/login/LoginException.html
-http://developer.android.com/reference/javax/security/auth/login/package-descr.html
-http://developer.android.com/reference/javax/security/auth/callback/Callback.html
-http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
-http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
-http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
-http://developer.android.com/reference/javax/security/auth/callback/package-descr.html
-http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
-http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
-http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
-http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
-http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
-http://developer.android.com/reference/org/apache/http/util/LangUtils.html
-http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
-http://developer.android.com/reference/org/apache/http/util/package-descr.html
-http://developer.android.com/reference/org/apache/http/HttpEntity.html
-http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
-http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
-http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
-http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
-http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
-http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
-http://developer.android.com/reference/android/app/ActivityGroup.html
-http://developer.android.com/reference/android/app/ActivityManager.html
-http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
-http://developer.android.com/reference/android/app/AlarmManager.html
-http://developer.android.com/reference/android/app/AlertDialog.html
-http://developer.android.com/reference/android/app/AlertDialog.Builder.html
-http://developer.android.com/reference/android/app/AliasActivity.html
-http://developer.android.com/reference/android/app/DatePickerDialog.html
-http://developer.android.com/reference/android/app/ExpandableListActivity.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
-http://developer.android.com/reference/android/app/IntentService.html
-http://developer.android.com/reference/android/app/KeyguardManager.html
-http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
-http://developer.android.com/reference/android/app/LauncherActivity.html
-http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
-http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
-http://developer.android.com/reference/android/app/ListActivity.html
-http://developer.android.com/reference/android/app/LocalActivityManager.html
-http://developer.android.com/reference/android/app/Notification.html
-http://developer.android.com/reference/android/app/PendingIntent.html
-http://developer.android.com/reference/android/app/ProgressDialog.html
-http://developer.android.com/reference/android/app/SearchManager.html
-http://developer.android.com/reference/android/app/TabActivity.html
-http://developer.android.com/reference/android/app/TimePickerDialog.html
-http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
-http://developer.android.com/reference/android/content/ContextWrapper.html
-http://developer.android.com/reference/android/content/ComponentCallbacks.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
-http://developer.android.com/reference/android/media/AudioManager.html
-http://developer.android.com/reference/android/text/ClipboardManager.html
-http://developer.android.com/reference/android/net/ConnectivityManager.html
-http://developer.android.com/reference/android/os/PowerManager.html
-http://developer.android.com/reference/android/hardware/SensorManager.html
-http://developer.android.com/reference/android/telephony/TelephonyManager.html
-http://developer.android.com/reference/android/os/Vibrator.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.html
-http://developer.android.com/reference/android/content/res/Configuration.html
-http://developer.android.com/reference/java/io/FileDescriptor.html
-http://developer.android.com/reference/android/content/ServiceConnection.html
-http://developer.android.com/reference/android/content/res/AssetManager.html
-http://developer.android.com/reference/java/io/File.html
-http://developer.android.com/reference/java/lang/ClassLoader.html
-http://developer.android.com/reference/android/os/Looper.html
-http://developer.android.com/reference/android/content/SharedPreferences.html
-http://developer.android.com/reference/android/content/res/Resources.Theme.html
-http://developer.android.com/reference/java/io/FileInputStream.html
-http://developer.android.com/reference/java/io/FileOutputStream.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
-http://developer.android.com/reference/android/content/IntentFilter.html
-http://developer.android.com/reference/android/os/Bundle.html
-http://developer.android.com/reference/android/content/ComponentName.html
-http://developer.android.com/reference/java/util/Formatter.html
-http://developer.android.com/sdk/1.1_r1/installing.html
-http://developer.android.com/reference/java/util/zip/Checksum.html
-http://developer.android.com/reference/java/util/zip/Adler32.html
-http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
-http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
-http://developer.android.com/reference/java/util/zip/CRC32.html
-http://developer.android.com/reference/java/util/zip/Deflater.html
-http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
-http://developer.android.com/reference/java/util/zip/Inflater.html
-http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
-http://developer.android.com/reference/java/util/zip/ZipEntry.html
-http://developer.android.com/reference/java/util/zip/ZipFile.html
-http://developer.android.com/reference/java/util/zip/ZipInputStream.html
-http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
-http://developer.android.com/reference/java/util/zip/DataFormatException.html
-http://developer.android.com/reference/java/util/zip/ZipException.html
-http://developer.android.com/reference/java/util/zip/package-descr.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/package-descr.html
-http://developer.android.com/sdk/1.1_r1/upgrading.html
-http://developer.android.com/sdk/1.0_r2/upgrading.html
-http://developer.android.com/sdk/1.0_r2/installing.html
-http://developer.android.com/sdk/1.0_r1/upgrading.html
-http://developer.android.com/sdk/1.0_r1/installing.html
-http://developer.android.com/guide/tutorials/views/hello-formstuff.html
-http://developer.android.com/reference/java/net/ContentHandlerFactory.html
-http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
-http://developer.android.com/reference/java/net/FileNameMap.html
-http://developer.android.com/reference/java/net/SocketImplFactory.html
-http://developer.android.com/reference/java/net/SocketOptions.html
-http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
-http://developer.android.com/reference/java/net/Authenticator.html
-http://developer.android.com/reference/java/net/CacheRequest.html
-http://developer.android.com/reference/java/net/CacheResponse.html
-http://developer.android.com/reference/java/net/ContentHandler.html
-http://developer.android.com/reference/java/net/CookieHandler.html
-http://developer.android.com/reference/java/net/DatagramPacket.html
-http://developer.android.com/reference/java/net/DatagramSocket.html
-http://developer.android.com/reference/java/net/DatagramSocketImpl.html
-http://developer.android.com/reference/java/net/HttpURLConnection.html
-http://developer.android.com/reference/java/net/Inet4Address.html
-http://developer.android.com/reference/java/net/Inet6Address.html
-http://developer.android.com/reference/java/net/InetAddress.html
-http://developer.android.com/reference/java/net/InetSocketAddress.html
-http://developer.android.com/reference/java/net/JarURLConnection.html
-http://developer.android.com/reference/java/net/MulticastSocket.html
-http://developer.android.com/reference/java/net/NetPermission.html
-http://developer.android.com/reference/java/net/NetworkInterface.html
-http://developer.android.com/reference/java/net/PasswordAuthentication.html
-http://developer.android.com/reference/java/net/Proxy.html
-http://developer.android.com/reference/java/net/ProxySelector.html
-http://developer.android.com/reference/java/net/ResponseCache.html
-http://developer.android.com/reference/java/net/SecureCacheResponse.html
-http://developer.android.com/reference/java/net/ServerSocket.html
-http://developer.android.com/reference/java/net/Socket.html
-http://developer.android.com/reference/java/net/SocketAddress.html
-http://developer.android.com/reference/java/net/SocketImpl.html
-http://developer.android.com/reference/java/net/SocketPermission.html
-http://developer.android.com/reference/java/net/URI.html
-http://developer.android.com/reference/java/net/URL.html
-http://developer.android.com/reference/java/net/URLClassLoader.html
-http://developer.android.com/reference/java/net/URLConnection.html
-http://developer.android.com/reference/java/net/URLDecoder.html
-http://developer.android.com/reference/java/net/URLEncoder.html
-http://developer.android.com/reference/java/net/URLStreamHandler.html
-http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
-http://developer.android.com/reference/java/net/Proxy.Type.html
-http://developer.android.com/reference/java/net/BindException.html
-http://developer.android.com/reference/java/net/ConnectException.html
-http://developer.android.com/reference/java/net/HttpRetryException.html
-http://developer.android.com/reference/java/net/MalformedURLException.html
-http://developer.android.com/reference/java/net/NoRouteToHostException.html
-http://developer.android.com/reference/java/net/PortUnreachableException.html
-http://developer.android.com/reference/java/net/ProtocolException.html
-http://developer.android.com/reference/java/net/SocketException.html
-http://developer.android.com/reference/java/net/SocketTimeoutException.html
-http://developer.android.com/reference/java/net/UnknownHostException.html
-http://developer.android.com/reference/java/net/UnknownServiceException.html
-http://developer.android.com/reference/java/net/URISyntaxException.html
-http://developer.android.com/reference/java/net/package-descr.html
-http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
-http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
+http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
+http://developer.android.com/reference/java/nio/channels/spi/package-descr.html
+http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
+http://developer.android.com/reference/java/nio/channels/Pipe.html
+http://developer.android.com/reference/java/nio/channels/Selector.html
+http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
+http://developer.android.com/reference/java/nio/channels/SocketChannel.html
+http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
+http://developer.android.com/reference/android/location/Geocoder.html
+http://developer.android.com/reference/android/media/SoundPool.html
+http://developer.android.com/reference/android/graphics/AvoidXfermode.html
+http://developer.android.com/reference/android/graphics/BitmapFactory.html
+http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
+http://developer.android.com/reference/android/graphics/BitmapShader.html
+http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
+http://developer.android.com/reference/android/graphics/Camera.html
+http://developer.android.com/reference/android/graphics/Color.html
+http://developer.android.com/reference/android/graphics/ColorFilter.html
+http://developer.android.com/reference/android/graphics/ColorMatrix.html
+http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
+http://developer.android.com/reference/android/graphics/ComposePathEffect.html
+http://developer.android.com/reference/android/graphics/ComposeShader.html
+http://developer.android.com/reference/android/graphics/CornerPathEffect.html
+http://developer.android.com/reference/android/graphics/DashPathEffect.html
+http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
+http://developer.android.com/reference/android/graphics/DrawFilter.html
+http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
+http://developer.android.com/reference/android/graphics/Interpolator.html
+http://developer.android.com/reference/android/graphics/LayerRasterizer.html
+http://developer.android.com/reference/android/graphics/LightingColorFilter.html
+http://developer.android.com/reference/android/graphics/LinearGradient.html
+http://developer.android.com/reference/android/graphics/MaskFilter.html
+http://developer.android.com/reference/android/graphics/Matrix.html
+http://developer.android.com/reference/android/graphics/Movie.html
+http://developer.android.com/reference/android/graphics/NinePatch.html
+http://developer.android.com/reference/android/graphics/Paint.html
+http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
+http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
+http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
+http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
+http://developer.android.com/reference/android/graphics/PathEffect.html
+http://developer.android.com/reference/android/graphics/PathMeasure.html
+http://developer.android.com/reference/android/graphics/Picture.html
+http://developer.android.com/reference/android/graphics/PixelFormat.html
+http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
+http://developer.android.com/reference/android/graphics/PointF.html
+http://developer.android.com/reference/android/graphics/PorterDuff.html
+http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
+http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
+http://developer.android.com/reference/android/graphics/RadialGradient.html
+http://developer.android.com/reference/android/graphics/Rasterizer.html
+http://developer.android.com/reference/android/graphics/RectF.html
+http://developer.android.com/reference/android/graphics/Region.html
+http://developer.android.com/reference/android/graphics/RegionIterator.html
+http://developer.android.com/reference/android/graphics/Shader.html
+http://developer.android.com/reference/android/graphics/SumPathEffect.html
+http://developer.android.com/reference/android/graphics/SweepGradient.html
+http://developer.android.com/reference/android/graphics/Typeface.html
+http://developer.android.com/reference/android/graphics/Xfermode.html
+http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
+http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
+http://developer.android.com/reference/android/graphics/Bitmap.Config.html
+http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
+http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
+http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
+http://developer.android.com/reference/android/graphics/Interpolator.Result.html
+http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
+http://developer.android.com/reference/android/graphics/Paint.Align.html
+http://developer.android.com/reference/android/graphics/Paint.Cap.html
+http://developer.android.com/reference/android/graphics/Paint.Join.html
+http://developer.android.com/reference/android/graphics/Paint.Style.html
+http://developer.android.com/reference/android/graphics/Path.Direction.html
+http://developer.android.com/reference/android/graphics/Path.FillType.html
+http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
+http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
+http://developer.android.com/reference/android/graphics/Region.Op.html
+http://developer.android.com/reference/android/graphics/Shader.TileMode.html
+http://developer.android.com/reference/android/graphics/package-descr.html
+http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
+http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
+http://developer.android.com/reference/android/text/util/Linkify.html
+http://developer.android.com/reference/android/text/util/Rfc822Token.html
+http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
+http://developer.android.com/reference/android/text/util/package-descr.html
+http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
+http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
+http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
+http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
+http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
+http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
+http://developer.android.com/reference/android/widget/Chronometer.OnChronometerTickListener.html
+http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
+http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
+http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
+http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
+http://developer.android.com/reference/android/widget/Filter.FilterListener.html
+http://developer.android.com/reference/android/widget/Filterable.html
+http://developer.android.com/reference/android/widget/FilterQueryProvider.html
+http://developer.android.com/reference/android/widget/ListAdapter.html
+http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
+http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
+http://developer.android.com/reference/android/widget/PopupWindow.OnDismissListener.html
+http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
+http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
+http://developer.android.com/reference/android/widget/SectionIndexer.html
+http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
+http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
+http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.ViewBinder.html
+http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerCloseListener.html
+http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerOpenListener.html
+http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerScrollListener.html
+http://developer.android.com/reference/android/widget/SpinnerAdapter.html
+http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
+http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
+http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
+http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
+http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
+http://developer.android.com/reference/android/widget/WrapperListAdapter.html
+http://developer.android.com/reference/android/widget/ZoomButtonsController.OnZoomListener.html
+http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
+http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
+http://developer.android.com/reference/android/widget/AlphabetIndexer.html
+http://developer.android.com/reference/android/widget/ArrayAdapter.html
+http://developer.android.com/reference/android/widget/BaseAdapter.html
+http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
+http://developer.android.com/reference/android/widget/CursorAdapter.html
+http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
+http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
+http://developer.android.com/reference/android/widget/Filter.html
+http://developer.android.com/reference/android/widget/Filter.FilterResults.html
+http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
+http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
+http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
+http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
+http://developer.android.com/reference/android/widget/PopupWindow.html
+http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
+http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/RemoteViews.html
+http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
+http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
+http://developer.android.com/reference/android/widget/SimpleAdapter.html
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
+http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
+http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
+http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
+http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
+http://developer.android.com/reference/android/widget/TextView.SavedState.html
+http://developer.android.com/reference/android/widget/Toast.html
+http://developer.android.com/reference/android/widget/ZoomButtonsController.html
+http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
+http://developer.android.com/reference/android/widget/TextView.BufferType.html
+http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
+http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
+http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
+http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
+http://developer.android.com/reference/android/content/res/ColorStateList.html
+http://developer.android.com/reference/android/text/method/KeyListener.html
+http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
+http://developer.android.com/reference/android/text/method/MovementMethod.html
+http://developer.android.com/reference/android/text/method/TransformationMethod.html
+http://developer.android.com/reference/android/text/style/URLSpan.html
+http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
+http://developer.android.com/reference/android/R.id.html
http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
http://developer.android.com/reference/java/io/IOException.html
-http://developer.android.com/reference/android/content/DialogInterface.html
-http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
-http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
-http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
-http://developer.android.com/reference/android/content/ContentQueryMap.html
-http://developer.android.com/reference/android/content/Intent.FilterComparison.html
-http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
-http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
-http://developer.android.com/reference/android/content/MutableContextWrapper.html
-http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
-http://developer.android.com/reference/android/content/UriMatcher.html
-http://developer.android.com/reference/android/content/ActivityNotFoundException.html
-http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
-http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
-http://developer.android.com/reference/android/test/mock/MockContext.html
-http://developer.android.com/reference/android/test/mock/MockApplication.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.html
-http://developer.android.com/reference/android/preference/Preference.html
-http://developer.android.com/reference/android/os/Binder.html
-http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
+http://developer.android.com/reference/android/util/TypedValue.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
+http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
+http://developer.android.com/reference/org/apache/http/io/package-descr.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
+http://developer.android.com/reference/org/apache/http/params/HttpParams.html
+http://developer.android.com/reference/org/apache/http/HttpHost.html
+http://developer.android.com/reference/java/net/InetAddress.html
+http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
+http://developer.android.com/reference/javax/net/ssl/SSLSession.html
+http://developer.android.com/reference/org/apache/http/HttpResponse.html
+http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
+http://developer.android.com/reference/org/apache/http/HttpRequest.html
+http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/HttpConnection.html
+http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
+http://developer.android.com/reference/android/content/res/XmlResourceParser.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
+http://developer.android.com/reference/android/content/res/AssetManager.html
+http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
+http://developer.android.com/reference/android/content/res/Configuration.html
+http://developer.android.com/reference/android/content/res/Resources.Theme.html
http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
-http://developer.android.com/reference/java/io/FileNotFoundException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
-http://developer.android.com/reference/java/lang/annotation/Annotation.html
-http://developer.android.com/reference/java/lang/annotation/ElementType.html
-http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
-http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
-http://developer.android.com/reference/java/lang/annotation/package-descr.html
-http://developer.android.com/reference/java/lang/ref/PhantomReference.html
-http://developer.android.com/reference/java/lang/ref/Reference.html
-http://developer.android.com/reference/java/lang/ref/SoftReference.html
-http://developer.android.com/reference/java/lang/ref/WeakReference.html
+http://developer.android.com/reference/android/test/mock/MockResources.html
+http://developer.android.com/reference/android/util/DisplayMetrics.html
+http://developer.android.com/reference/java/util/Formatter.html
+http://developer.android.com/reference/java/io/InputStream.html
+http://developer.android.com/reference/android/accounts/AccountAuthenticatorActivity.html
+http://developer.android.com/reference/android/app/ActivityGroup.html
+http://developer.android.com/reference/android/app/AlertDialog.html
+http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
+http://developer.android.com/reference/android/app/DatePickerDialog.html
+http://developer.android.com/reference/android/app/Dialog.html
+http://developer.android.com/reference/android/app/ExpandableListActivity.html
+http://developer.android.com/reference/android/app/LauncherActivity.html
+http://developer.android.com/reference/android/preference/PreferenceActivity.html
+http://developer.android.com/reference/android/app/ProgressDialog.html
+http://developer.android.com/reference/android/app/TabActivity.html
+http://developer.android.com/reference/android/app/TimePickerDialog.html
+http://developer.android.com/reference/android/preference/Preference.html
+http://developer.android.com/reference/android/view/animation/Interpolator.html
+http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-hdpi-v6/index.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-ldpi-v6/index.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi-v6/index.html
+http://developer.android.com/resources/samples/NotePad/res/layout/index.html
+http://developer.android.com/resources/samples/NotePad/res/values/index.html
+http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
+http://developer.android.com/reference/org/apache/http/client/methods/package-descr.html
+http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/Callable.html
+http://developer.android.com/reference/java/util/concurrent/CompletionService.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
+http://developer.android.com/reference/java/util/concurrent/Delayed.html
+http://developer.android.com/reference/java/util/concurrent/Executor.html
+http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/Future.html
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
+http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
+http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
+http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
+http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
+http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
+http://developer.android.com/reference/java/util/concurrent/Exchanger.html
+http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
+http://developer.android.com/reference/java/util/concurrent/Executors.html
+http://developer.android.com/reference/java/util/concurrent/FutureTask.html
+http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
+http://developer.android.com/reference/java/util/concurrent/Semaphore.html
+http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
+http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
+http://developer.android.com/reference/java/lang/Exception.html
+http://developer.android.com/reference/java/lang/StackTraceElement.html
+http://developer.android.com/reference/java/io/PrintWriter.html
+http://developer.android.com/reference/java/io/PrintStream.html
+http://developer.android.com/reference/java/lang/Enum.html
+http://developer.android.com/reference/java/lang/Comparable.html
+http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
+http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
+http://developer.android.com/reference/android/view/animation/Animation.Description.html
+http://developer.android.com/reference/android/view/animation/AnimationSet.html
+http://developer.android.com/reference/android/view/animation/AnimationUtils.html
+http://developer.android.com/reference/android/view/animation/AnticipateInterpolator.html
+http://developer.android.com/reference/android/view/animation/AnticipateOvershootInterpolator.html
+http://developer.android.com/reference/android/view/animation/BounceInterpolator.html
+http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
+http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
+http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
+http://developer.android.com/reference/android/view/animation/OvershootInterpolator.html
+http://developer.android.com/reference/android/view/animation/RotateAnimation.html
+http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
+http://developer.android.com/reference/android/view/animation/Transformation.html
+http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
+http://developer.android.com/reference/android/view/animation/package-descr.html
+http://developer.android.com/reference/android/widget/package-descr.html
+http://developer.android.com/reference/android/database/Cursor.html
+http://developer.android.com/reference/java/security/PublicKey.html
+http://developer.android.com/reference/java/lang/NullPointerException.html
+http://developer.android.com/reference/javax/security/auth/Destroyable.html
+http://developer.android.com/reference/javax/security/auth/AuthPermission.html
+http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
+http://developer.android.com/reference/javax/security/auth/Subject.html
+http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
+http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
+http://developer.android.com/reference/javax/security/auth/package-descr.html
+http://developer.android.com/reference/java/util/logging/Filter.html
+http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
+http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
+http://developer.android.com/reference/java/util/logging/ErrorManager.html
+http://developer.android.com/reference/java/util/logging/FileHandler.html
+http://developer.android.com/reference/java/util/logging/Formatter.html
+http://developer.android.com/reference/java/util/logging/Handler.html
+http://developer.android.com/reference/java/util/logging/Level.html
+http://developer.android.com/reference/java/util/logging/Logger.html
+http://developer.android.com/reference/java/util/logging/LoggingPermission.html
+http://developer.android.com/reference/java/util/logging/LogManager.html
+http://developer.android.com/reference/java/util/logging/LogRecord.html
+http://developer.android.com/reference/java/util/logging/MemoryHandler.html
+http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
+http://developer.android.com/reference/java/util/logging/SocketHandler.html
+http://developer.android.com/reference/java/util/logging/StreamHandler.html
+http://developer.android.com/reference/java/util/logging/XMLFormatter.html
+http://developer.android.com/reference/java/util/logging/package-descr.html
+http://developer.android.com/reference/java/io/OutputStream.html
+http://developer.android.com/reference/android/Manifest.html
+http://developer.android.com/reference/android/R.html
+http://developer.android.com/reference/android/R.anim.html
+http://developer.android.com/reference/android/R.array.html
+http://developer.android.com/reference/android/R.bool.html
+http://developer.android.com/reference/android/R.color.html
+http://developer.android.com/reference/android/R.dimen.html
+http://developer.android.com/reference/android/R.drawable.html
+http://developer.android.com/reference/android/R.integer.html
+http://developer.android.com/reference/android/R.layout.html
+http://developer.android.com/reference/android/R.plurals.html
+http://developer.android.com/reference/android/R.raw.html
+http://developer.android.com/reference/android/R.string.html
+http://developer.android.com/reference/android/R.xml.html
+http://developer.android.com/reference/android/media/MediaPlayer.html
+http://developer.android.com/reference/android/media/MediaRecorder.html
+http://developer.android.com/reference/android/media/JetPlayer.html
+http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
+http://developer.android.com/reference/android/content/ContentValues.html
http://developer.android.com/reference/java/lang/Appendable.html
http://developer.android.com/reference/java/lang/Cloneable.html
-http://developer.android.com/reference/java/lang/Comparable.html
http://developer.android.com/reference/java/lang/Iterable.html
http://developer.android.com/reference/java/lang/Readable.html
http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
@@ -877,13 +1134,14 @@
http://developer.android.com/reference/java/lang/Character.html
http://developer.android.com/reference/java/lang/Character.Subset.html
http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
+http://developer.android.com/reference/java/lang/ClassLoader.html
http://developer.android.com/reference/java/lang/Compiler.html
http://developer.android.com/reference/java/lang/Double.html
-http://developer.android.com/reference/java/lang/Enum.html
http://developer.android.com/reference/java/lang/Float.html
http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
http://developer.android.com/reference/java/lang/Integer.html
http://developer.android.com/reference/java/lang/Long.html
+http://developer.android.com/reference/java/lang/Math.html
http://developer.android.com/reference/java/lang/Number.html
http://developer.android.com/reference/java/lang/Package.html
http://developer.android.com/reference/java/lang/Process.html
@@ -892,14 +1150,13 @@
http://developer.android.com/reference/java/lang/RuntimePermission.html
http://developer.android.com/reference/java/lang/SecurityManager.html
http://developer.android.com/reference/java/lang/Short.html
-http://developer.android.com/reference/java/lang/StackTraceElement.html
http://developer.android.com/reference/java/lang/StrictMath.html
http://developer.android.com/reference/java/lang/StringBuffer.html
+http://developer.android.com/reference/java/lang/StringBuilder.html
http://developer.android.com/reference/java/lang/System.html
http://developer.android.com/reference/java/lang/Thread.html
http://developer.android.com/reference/java/lang/ThreadGroup.html
http://developer.android.com/reference/java/lang/ThreadLocal.html
-http://developer.android.com/reference/java/lang/Void.html
http://developer.android.com/reference/java/lang/Thread.State.html
http://developer.android.com/reference/java/lang/ArithmeticException.html
http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
@@ -908,19 +1165,14 @@
http://developer.android.com/reference/java/lang/ClassNotFoundException.html
http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
-http://developer.android.com/reference/java/lang/Exception.html
http://developer.android.com/reference/java/lang/IllegalAccessException.html
-http://developer.android.com/reference/java/lang/IllegalArgumentException.html
http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
-http://developer.android.com/reference/java/lang/IllegalStateException.html
http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
http://developer.android.com/reference/java/lang/InstantiationException.html
-http://developer.android.com/reference/java/lang/InterruptedException.html
http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
http://developer.android.com/reference/java/lang/NoSuchFieldException.html
http://developer.android.com/reference/java/lang/NoSuchMethodException.html
-http://developer.android.com/reference/java/lang/NullPointerException.html
http://developer.android.com/reference/java/lang/NumberFormatException.html
http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
http://developer.android.com/reference/java/lang/TypeNotPresentException.html
@@ -947,46 +1199,90 @@
http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
http://developer.android.com/reference/java/lang/VerifyError.html
http://developer.android.com/reference/java/lang/VirtualMachineError.html
+http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
+http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
+http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
+http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
+http://developer.android.com/reference/java/util/FormatterClosedException.html
+http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
+http://developer.android.com/reference/java/nio/InvalidMarkException.html
+http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
+http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
+http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
+http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
+http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
+http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
+http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
+http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
+http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
+http://developer.android.com/reference/org/apache/http/auth/AUTH.html
+http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
http://developer.android.com/reference/java/util/AbstractCollection.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
http://developer.android.com/reference/android/database/AbstractCursor.html
-http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodImpl.html
http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
http://developer.android.com/reference/java/util/AbstractMap.html
http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
+http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
-http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
http://developer.android.com/reference/java/security/AccessControlContext.html
http://developer.android.com/reference/java/security/AccessController.html
+http://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html
http://developer.android.com/reference/java/lang/reflect/AccessibleObject.html
-http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
+http://developer.android.com/reference/android/accounts/Account.html
+http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html
+http://developer.android.com/reference/android/accounts/AccountManager.html
+http://developer.android.com/reference/android/app/ActivityManager.html
+http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
http://developer.android.com/reference/android/location/Address.html
+http://developer.android.com/reference/android/app/AlarmManager.html
+http://developer.android.com/reference/android/app/AlertDialog.Builder.html
http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
http://developer.android.com/reference/java/security/AlgorithmParameters.html
http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
-http://developer.android.com/reference/android/text/AlteredCharSequence.html
-http://developer.android.com/reference/android/text/AndroidCharacter.html
-http://developer.android.com/reference/android/view/animation/Animation.Description.html
-http://developer.android.com/reference/android/view/animation/AnimationUtils.html
http://developer.android.com/reference/java/text/Annotation.html
http://developer.android.com/reference/android/appwidget/AppWidgetHost.html
http://developer.android.com/reference/android/appwidget/AppWidgetManager.html
@@ -996,9 +1292,8 @@
http://developer.android.com/reference/java/util/Arrays.html
http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
http://developer.android.com/reference/junit/framework/Assert.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
http://developer.android.com/reference/android/media/AsyncPlayer.html
-http://developer.android.com/reference/android/os/AsyncTask.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
@@ -1016,15 +1311,18 @@
http://developer.android.com/reference/java/util/jar/Attributes.Name.html
http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
http://developer.android.com/reference/android/media/AudioFormat.html
+http://developer.android.com/reference/android/media/AudioManager.html
http://developer.android.com/reference/android/media/AudioRecord.html
http://developer.android.com/reference/android/media/AudioTrack.html
http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
-http://developer.android.com/reference/android/text/AutoText.html
-http://developer.android.com/reference/android/widget/BaseAdapter.html
-http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
-http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
+http://developer.android.com/reference/org/apache/http/auth/AuthState.html
+http://developer.android.com/reference/java/net/Authenticator.html
+http://developer.android.com/reference/android/accounts/AuthenticatorDescription.html
+http://developer.android.com/reference/junit/runner/BaseTestRunner.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
@@ -1036,8 +1334,6 @@
http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
@@ -1049,11 +1345,18 @@
http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
-http://developer.android.com/reference/android/os/BatteryManager.html
+http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
http://developer.android.com/reference/java/text/Bidi.html
http://developer.android.com/reference/java/util/BitSet.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Service.html
+http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html
+http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html
+http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
http://developer.android.com/reference/java/text/BreakIterator.html
http://developer.android.com/reference/android/provider/Browser.html
http://developer.android.com/reference/android/provider/Browser.BookmarkColumns.html
@@ -1061,33 +1364,23 @@
http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
http://developer.android.com/reference/java/nio/Buffer.html
http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
-http://developer.android.com/reference/android/os/Build.html
-http://developer.android.com/reference/android/os/Build.VERSION.html
http://developer.android.com/reference/android/text/style/BulletSpan.html
+http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
http://developer.android.com/reference/java/nio/ByteOrder.html
-http://developer.android.com/reference/java/security/cert/CRL.html
http://developer.android.com/reference/android/webkit/CacheManager.html
http://developer.android.com/reference/android/webkit/CacheManager.CacheResult.html
+http://developer.android.com/reference/java/net/CacheRequest.html
+http://developer.android.com/reference/java/net/CacheResponse.html
http://developer.android.com/reference/java/util/Calendar.html
http://developer.android.com/reference/android/provider/CallLog.html
http://developer.android.com/reference/android/provider/CallLog.Calls.html
http://developer.android.com/reference/android/hardware/Camera.Parameters.html
http://developer.android.com/reference/android/hardware/Camera.Size.html
http://developer.android.com/reference/android/telephony/CellLocation.html
-http://developer.android.com/reference/java/security/cert/CertPath.html
-http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
-http://developer.android.com/reference/java/security/cert/CertPathValidator.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
-http://developer.android.com/reference/java/security/cert/CertStore.html
-http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
http://developer.android.com/reference/javax/security/cert/Certificate.html
-http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
-http://developer.android.com/reference/java/security/cert/CertificateFactory.html
-http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
http://developer.android.com/reference/java/nio/channels/Channels.html
+http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
http://developer.android.com/reference/android/text/style/CharacterStyle.html
http://developer.android.com/reference/java/nio/charset/Charset.html
http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
@@ -1103,16 +1396,14 @@
http://developer.android.com/reference/java/text/CollationElementIterator.html
http://developer.android.com/reference/java/text/CollationKey.html
http://developer.android.com/reference/java/text/Collator.html
-http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
http://developer.android.com/reference/java/util/Collections.html
-http://developer.android.com/reference/android/content/res/ColorStateList.html
-http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
-http://developer.android.com/reference/android/os/ConditionVariable.html
+http://developer.android.com/reference/android/content/ComponentName.html
+http://developer.android.com/reference/android/util/Config.html
http://developer.android.com/reference/android/content/pm/ConfigurationInfo.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
-http://developer.android.com/reference/android/provider/Contacts.html
+http://developer.android.com/reference/android/net/ConnectivityManager.html
http://developer.android.com/reference/android/provider/Contacts.ContactMethods.html
http://developer.android.com/reference/android/provider/Contacts.Extensions.html
http://developer.android.com/reference/android/provider/Contacts.GroupMembership.html
@@ -1121,12 +1412,54 @@
http://developer.android.com/reference/android/provider/Contacts.Intents.Insert.html
http://developer.android.com/reference/android/provider/Contacts.Intents.UI.html
http://developer.android.com/reference/android/provider/Contacts.Organizations.html
+http://developer.android.com/reference/android/provider/Contacts.People.html
http://developer.android.com/reference/android/provider/Contacts.People.ContactMethods.html
http://developer.android.com/reference/android/provider/Contacts.People.Extensions.html
http://developer.android.com/reference/android/provider/Contacts.People.Phones.html
+http://developer.android.com/reference/android/provider/Contacts.Phones.html
http://developer.android.com/reference/android/provider/Contacts.Photos.html
http://developer.android.com/reference/android/provider/Contacts.Settings.html
+http://developer.android.com/reference/android/provider/ContactsContract.html
+http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Event.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.GroupMembership.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Im.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Nickname.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Note.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Organization.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Photo.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Relation.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredName.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredPostal.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Website.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.AggregationSuggestions.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Data.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html
+http://developer.android.com/reference/android/provider/ContactsContract.Data.html
+http://developer.android.com/reference/android/provider/ContactsContract.Groups.html
+http://developer.android.com/reference/android/provider/ContactsContract.Intents.html
+http://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
+http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html
+http://developer.android.com/reference/android/provider/ContactsContract.QuickContact.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Data.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html
+http://developer.android.com/reference/android/provider/ContactsContract.Settings.html
+http://developer.android.com/reference/android/provider/ContactsContract.StatusUpdates.html
+http://developer.android.com/reference/android/provider/ContactsContract.SyncState.html
+http://developer.android.com/reference/java/net/ContentHandler.html
http://developer.android.com/reference/android/database/ContentObserver.html
+http://developer.android.com/reference/android/content/ContentProviderClient.html
+http://developer.android.com/reference/android/content/ContentProviderOperation.html
+http://developer.android.com/reference/android/content/ContentProviderOperation.Builder.html
+http://developer.android.com/reference/android/content/ContentProviderResult.html
+http://developer.android.com/reference/android/content/ContentUris.html
+http://developer.android.com/reference/java/net/CookieHandler.html
http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
http://developer.android.com/reference/android/webkit/CookieManager.html
http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
@@ -1134,138 +1467,115 @@
http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
http://developer.android.com/reference/android/webkit/CookieSyncManager.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
-http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
-http://developer.android.com/reference/android/os/CountDownTimer.html
-http://developer.android.com/reference/android/net/Credentials.html
http://developer.android.com/reference/android/location/Criteria.html
http://developer.android.com/reference/java/util/Currency.html
http://developer.android.com/reference/android/database/CursorJoiner.html
http://developer.android.com/reference/android/database/CursorWrapper.html
-http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
-http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
-http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
http://developer.android.com/reference/android/database/DataSetObserver.html
http://developer.android.com/reference/android/database/DatabaseUtils.html
http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
+http://developer.android.com/reference/java/net/DatagramPacket.html
+http://developer.android.com/reference/java/net/DatagramSocket.html
+http://developer.android.com/reference/java/net/DatagramSocketImpl.html
http://developer.android.com/reference/java/util/Date.html
http://developer.android.com/reference/android/text/format/DateFormat.html
http://developer.android.com/reference/java/text/DateFormatSymbols.html
http://developer.android.com/reference/android/webkit/DateSorter.html
http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
-http://developer.android.com/reference/android/os/Debug.InstructionCount.html
-http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
-http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
+http://developer.android.com/reference/android/util/DebugUtils.html
http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
http://developer.android.com/reference/dalvik/system/DexFile.html
http://developer.android.com/reference/android/net/DhcpInfo.html
http://developer.android.com/reference/java/util/Dictionary.html
http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
http://developer.android.com/reference/java/sql/DriverManager.html
http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
-http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
-http://developer.android.com/reference/java/security/spec/ECFieldFp.html
-http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECPoint.html
-http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
-http://developer.android.com/reference/android/text/Editable.Factory.html
http://developer.android.com/reference/android/sax/Element.html
-http://developer.android.com/reference/java/security/spec/EllipticCurve.html
-http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
+http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
-http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
-http://developer.android.com/reference/android/os/Environment.html
-http://developer.android.com/reference/java/util/logging/ErrorManager.html
+http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
http://developer.android.com/reference/java/util/EventListenerProxy.html
+http://developer.android.com/reference/android/util/EventLogTags.html
+http://developer.android.com/reference/android/util/EventLogTags.Description.html
http://developer.android.com/reference/java/util/EventObject.html
-http://developer.android.com/reference/java/util/concurrent/Exchanger.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executors.html
+http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
-http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
+http://developer.android.com/reference/android/media/ExifInterface.html
http://developer.android.com/reference/android/media/FaceDetector.html
http://developer.android.com/reference/android/media/FaceDetector.Face.html
+http://developer.android.com/reference/android/content/pm/FeatureInfo.html
http://developer.android.com/reference/java/text/FieldPosition.html
+http://developer.android.com/reference/java/io/File.html
http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
+http://developer.android.com/reference/java/io/FileDescriptor.html
http://developer.android.com/reference/java/nio/channels/FileLock.html
-http://developer.android.com/reference/android/os/FileObserver.html
-http://developer.android.com/reference/android/widget/Filter.html
-http://developer.android.com/reference/android/widget/Filter.FilterResults.html
+http://developer.android.com/reference/android/util/FloatMath.html
http://developer.android.com/reference/java/text/Format.html
http://developer.android.com/reference/java/util/FormattableFlags.html
-http://developer.android.com/reference/java/util/concurrent/FutureTask.html
http://developer.android.com/reference/android/opengl/GLDebugHelper.html
+http://developer.android.com/reference/android/opengl/GLES10.html
+http://developer.android.com/reference/android/opengl/GLES10Ext.html
+http://developer.android.com/reference/android/opengl/GLES11Ext.html
http://developer.android.com/reference/android/opengl/GLU.html
http://developer.android.com/reference/android/opengl/GLUtils.html
+http://developer.android.com/reference/android/webkit/GeolocationPermissions.html
http://developer.android.com/reference/android/hardware/GeomagneticField.html
+http://developer.android.com/reference/android/gesture/Gesture.html
+http://developer.android.com/reference/android/gesture/GestureLibraries.html
+http://developer.android.com/reference/android/gesture/GestureLibrary.html
+http://developer.android.com/reference/android/gesture/GesturePoint.html
+http://developer.android.com/reference/android/gesture/GestureStore.html
+http://developer.android.com/reference/android/gesture/GestureStroke.html
http://developer.android.com/reference/android/location/GpsSatellite.html
http://developer.android.com/reference/android/location/GpsStatus.html
http://developer.android.com/reference/java/security/GuardedObject.html
-http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
-http://developer.android.com/reference/java/util/logging/Handler.html
http://developer.android.com/reference/org/xml/sax/HandlerBase.html
http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
-http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
-http://developer.android.com/reference/android/text/Html.html
http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
-http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
-http://developer.android.com/reference/org/apache/http/HttpHost.html
http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
http://developer.android.com/reference/android/text/style/IconMarginSpan.html
http://developer.android.com/reference/java/security/Identity.html
-http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
http://developer.android.com/reference/android/view/inputmethod/InputBinding.html
http://developer.android.com/reference/android/view/inputmethod/InputConnectionWrapper.html
-http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
-http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
http://developer.android.com/reference/android/view/inputmethod/InputMethodInfo.html
http://developer.android.com/reference/android/inputmethodservice/InputMethodService.Insets.html
http://developer.android.com/reference/org/xml/sax/InputSource.html
+http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
+http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
+http://developer.android.com/reference/android/content/Intent.FilterComparison.html
+http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
+http://developer.android.com/reference/android/content/IntentFilter.html
+http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
+http://developer.android.com/reference/android/content/IntentSender.html
http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
http://developer.android.com/reference/org/json/JSONArray.html
http://developer.android.com/reference/org/json/JSONObject.html
@@ -1294,18 +1604,14 @@
http://developer.android.com/reference/java/security/KeyStoreSpi.html
http://developer.android.com/reference/android/inputmethodservice/Keyboard.Key.html
http://developer.android.com/reference/android/inputmethodservice/Keyboard.Row.html
-http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
+http://developer.android.com/reference/android/app/KeyguardManager.html
+http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
+http://developer.android.com/reference/org/apache/http/util/LangUtils.html
+http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
+http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
-http://developer.android.com/reference/android/text/Layout.html
-http://developer.android.com/reference/android/text/Layout.Directions.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
-http://developer.android.com/reference/java/util/logging/Level.html
-http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
-http://developer.android.com/reference/android/text/util/Linkify.html
-http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
-http://developer.android.com/reference/android/provider/LiveFolders.html
+http://developer.android.com/reference/android/app/LocalActivityManager.html
http://developer.android.com/reference/android/net/LocalServerSocket.html
http://developer.android.com/reference/android/net/LocalSocket.html
http://developer.android.com/reference/android/net/LocalSocketAddress.html
@@ -1314,17 +1620,10 @@
http://developer.android.com/reference/android/location/LocationProvider.html
http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
-http://developer.android.com/reference/java/util/logging/LogManager.html
-http://developer.android.com/reference/java/util/logging/LogRecord.html
-http://developer.android.com/reference/java/util/logging/Logger.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
-http://developer.android.com/reference/android/text/LoginFilter.html
-http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
+http://developer.android.com/reference/android/util/LogPrinter.html
http://developer.android.com/reference/javax/crypto/Mac.html
http://developer.android.com/reference/javax/crypto/MacSpi.html
http://developer.android.com/reference/android/net/MailTo.html
-http://developer.android.com/reference/java/util/regex/Matcher.html
http://developer.android.com/reference/java/math/MathContext.html
http://developer.android.com/reference/android/opengl/Matrix.html
http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
@@ -1334,6 +1633,7 @@
http://developer.android.com/reference/android/media/MediaRecorder.VideoEncoder.html
http://developer.android.com/reference/android/media/MediaRecorder.VideoSource.html
http://developer.android.com/reference/android/media/MediaScannerConnection.html
+http://developer.android.com/reference/android/provider/MediaStore.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
@@ -1348,24 +1648,24 @@
http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
http://developer.android.com/reference/android/provider/MediaStore.Video.html
http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
-http://developer.android.com/reference/android/os/MemoryFile.html
-http://developer.android.com/reference/android/os/Message.html
+http://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails.html
http://developer.android.com/reference/java/security/MessageDigestSpi.html
-http://developer.android.com/reference/android/os/MessageQueue.html
-http://developer.android.com/reference/android/os/Messenger.html
-http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
http://developer.android.com/reference/android/webkit/MimeTypeMap.html
http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
http://developer.android.com/reference/java/lang/reflect/Modifier.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
+http://developer.android.com/reference/android/util/MonthDisplayHelper.html
+http://developer.android.com/reference/android/test/MoreAsserts.html
http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
+http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
+http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
http://developer.android.com/reference/android/telephony/NeighboringCellInfo.html
http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
http://developer.android.com/reference/android/net/NetworkInfo.html
-http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
-http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
+http://developer.android.com/reference/java/net/NetworkInterface.html
+http://developer.android.com/reference/android/app/Notification.html
+http://developer.android.com/reference/android/app/NotificationManager.html
http://developer.android.com/reference/java/awt/font/NumericShaper.html
http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
http://developer.android.com/reference/java/io/ObjectInputStream.GetField.html
@@ -1373,48 +1673,44 @@
http://developer.android.com/reference/java/io/ObjectStreamClass.html
http://developer.android.com/reference/java/io/ObjectStreamField.html
http://developer.android.com/reference/java/util/Observable.html
-http://developer.android.com/reference/java/io/OutputStream.html
+http://developer.android.com/reference/android/gesture/OrientedBoundingBox.html
http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/PKIXParameters.html
-http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
http://developer.android.com/reference/javax/crypto/spec/PSource.html
http://developer.android.com/reference/java/util/jar/Pack200.html
http://developer.android.com/reference/android/content/pm/PackageInfo.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
http://developer.android.com/reference/android/content/pm/PackageStats.html
-http://developer.android.com/reference/android/os/Parcel.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
+http://developer.android.com/reference/android/util/Pair.html
http://developer.android.com/reference/java/text/ParsePosition.html
http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
+http://developer.android.com/reference/java/net/PasswordAuthentication.html
+http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
-http://developer.android.com/reference/java/util/regex/Pattern.html
+http://developer.android.com/reference/android/app/PendingIntent.html
http://developer.android.com/reference/java/security/Permission.html
http://developer.android.com/reference/java/security/PermissionCollection.html
http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
http://developer.android.com/reference/android/telephony/PhoneStateListener.html
-http://developer.android.com/reference/java/nio/channels/Pipe.html
http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
http://developer.android.com/reference/android/webkit/Plugin.html
http://developer.android.com/reference/android/webkit/PluginData.html
http://developer.android.com/reference/android/webkit/PluginList.html
http://developer.android.com/reference/java/security/Policy.html
-http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
-http://developer.android.com/reference/android/widget/PopupWindow.html
-http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
+http://developer.android.com/reference/android/gesture/Prediction.html
http://developer.android.com/reference/android/preference/PreferenceManager.html
http://developer.android.com/reference/java/util/prefs/Preferences.html
+http://developer.android.com/reference/android/util/PrintStreamPrinter.html
+http://developer.android.com/reference/android/util/PrintWriterPrinter.html
http://developer.android.com/reference/java/beans/PropertyChangeSupport.html
http://developer.android.com/reference/java/security/ProtectionDomain.html
http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
http://developer.android.com/reference/java/security/Provider.Service.html
-http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
+http://developer.android.com/reference/java/net/Proxy.html
+http://developer.android.com/reference/java/net/ProxySelector.html
http://developer.android.com/reference/android/text/style/QuoteSpan.html
http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
@@ -1426,10 +1722,6 @@
http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
-http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
http://developer.android.com/reference/java/util/Random.html
http://developer.android.com/reference/java/io/RandomAccessFile.html
http://developer.android.com/reference/java/io/Reader.html
@@ -1440,26 +1732,12 @@
http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
-http://developer.android.com/reference/android/os/RemoteCallbackList.html
-http://developer.android.com/reference/android/os/IInterface.html
-http://developer.android.com/reference/android/widget/RemoteViews.html
+http://developer.android.com/reference/java/lang/ref/Reference.html
http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
http://developer.android.com/reference/android/content/pm/ResolveInfo.html
http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
http://developer.android.com/reference/java/util/ResourceBundle.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
-http://developer.android.com/reference/android/os/ResultReceiver.html
-http://developer.android.com/reference/android/text/util/Rfc822Token.html
-http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
+http://developer.android.com/reference/java/net/ResponseCache.html
http://developer.android.com/reference/android/media/Ringtone.html
http://developer.android.com/reference/android/media/RingtoneManager.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
@@ -1468,6 +1746,7 @@
http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
http://developer.android.com/reference/javax/net/ssl/SSLContext.html
http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
@@ -1486,88 +1765,101 @@
http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
http://developer.android.com/reference/java/security/SecureRandomSpi.html
http://developer.android.com/reference/java/security/Security.html
-http://developer.android.com/reference/android/text/Selection.html
http://developer.android.com/reference/java/nio/channels/SelectionKey.html
-http://developer.android.com/reference/java/nio/channels/Selector.html
-http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
-http://developer.android.com/reference/java/util/concurrent/Semaphore.html
http://developer.android.com/reference/android/hardware/Sensor.html
http://developer.android.com/reference/android/hardware/SensorEvent.html
+http://developer.android.com/reference/android/hardware/SensorManager.html
+http://developer.android.com/reference/java/net/ServerSocket.html
http://developer.android.com/reference/javax/net/ServerSocketFactory.html
http://developer.android.com/reference/android/telephony/ServiceState.html
http://developer.android.com/reference/android/provider/Settings.html
http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
+http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
http://developer.android.com/reference/android/content/pm/Signature.html
http://developer.android.com/reference/java/security/SignatureSpi.html
http://developer.android.com/reference/java/security/SignedObject.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
-http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
+http://developer.android.com/reference/android/telephony/SmsManager.html
http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
+http://developer.android.com/reference/java/net/Socket.html
+http://developer.android.com/reference/java/net/SocketAddress.html
http://developer.android.com/reference/javax/net/SocketFactory.html
-http://developer.android.com/reference/android/text/Spannable.Factory.html
-http://developer.android.com/reference/android/text/SpannableString.html
-http://developer.android.com/reference/android/text/SpannableStringBuilder.html
-http://developer.android.com/reference/android/text/SpannedString.html
-http://developer.android.com/reference/android/os/StatFs.html
+http://developer.android.com/reference/java/net/SocketImpl.html
+http://developer.android.com/reference/android/util/SparseBooleanArray.html
+http://developer.android.com/reference/android/util/SparseIntArray.html
+http://developer.android.com/reference/android/net/http/SslCertificate.html
+http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
+http://developer.android.com/reference/android/util/StateSet.html
http://developer.android.com/reference/java/io/StreamTokenizer.html
http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
+http://developer.android.com/reference/android/util/StringBuilderPrinter.html
http://developer.android.com/reference/java/text/StringCharacterIterator.html
http://developer.android.com/reference/java/util/StringTokenizer.html
-http://developer.android.com/reference/javax/security/auth/Subject.html
-http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
-http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
+http://developer.android.com/reference/android/content/SyncAdapterType.html
+http://developer.android.com/reference/android/content/SyncContext.html
+http://developer.android.com/reference/android/content/SyncResult.html
+http://developer.android.com/reference/android/provider/SyncStateContract.html
+http://developer.android.com/reference/android/provider/SyncStateContract.Constants.html
+http://developer.android.com/reference/android/provider/SyncStateContract.Helpers.html
http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
+http://developer.android.com/reference/android/telephony/TelephonyManager.html
http://developer.android.com/reference/dalvik/system/TemporaryDirectory.html
http://developer.android.com/reference/junit/framework/TestFailure.html
http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
http://developer.android.com/reference/junit/framework/TestResult.html
+http://developer.android.com/reference/junit/framework/TestSuite.html
http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
-http://developer.android.com/reference/android/text/TextUtils.html
-http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
http://developer.android.com/reference/android/text/format/Time.html
+http://developer.android.com/reference/android/util/TimeUtils.html
http://developer.android.com/reference/java/util/TimeZone.html
http://developer.android.com/reference/java/util/Timer.html
http://developer.android.com/reference/java/util/TimerTask.html
http://developer.android.com/reference/java/security/Timestamp.html
-http://developer.android.com/reference/android/widget/Toast.html
-http://developer.android.com/reference/android/os/TokenWatcher.html
+http://developer.android.com/reference/android/util/TimingLogger.html
http://developer.android.com/reference/android/media/ToneGenerator.html
http://developer.android.com/reference/android/text/method/Touch.html
http://developer.android.com/reference/dalvik/system/TouchDex.html
-http://developer.android.com/reference/android/view/animation/Transformation.html
-http://developer.android.com/reference/java/security/cert/TrustAnchor.html
+http://developer.android.com/reference/android/test/TouchUtils.html
http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
http://developer.android.com/reference/java/sql/Types.html
+http://developer.android.com/reference/java/net/URI.html
http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
+http://developer.android.com/reference/java/net/URL.html
+http://developer.android.com/reference/java/net/URLConnection.html
+http://developer.android.com/reference/java/net/URLDecoder.html
http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
+http://developer.android.com/reference/java/net/URLEncoder.html
+http://developer.android.com/reference/java/net/URLStreamHandler.html
http://developer.android.com/reference/android/webkit/URLUtil.html
http://developer.android.com/reference/java/util/UUID.html
+http://developer.android.com/reference/android/net/Uri.html
http://developer.android.com/reference/android/net/Uri.Builder.html
-http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
+http://developer.android.com/reference/android/content/UriMatcher.html
http://developer.android.com/reference/android/webkit/UrlInterceptRegistry.html
http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
http://developer.android.com/reference/android/provider/UserDictionary.html
http://developer.android.com/reference/android/provider/UserDictionary.Words.html
+http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
http://developer.android.com/reference/dalvik/system/VMDebug.html
http://developer.android.com/reference/dalvik/system/VMRuntime.html
http://developer.android.com/reference/dalvik/system/VMStack.html
+http://developer.android.com/reference/junit/runner/Version.html
+http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
+http://developer.android.com/reference/android/test/ViewAsserts.html
http://developer.android.com/reference/android/opengl/Visibility.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
+http://developer.android.com/reference/android/app/WallpaperManager.html
http://developer.android.com/reference/android/webkit/WebBackForwardList.html
http://developer.android.com/reference/android/webkit/WebChromeClient.html
http://developer.android.com/reference/android/webkit/WebHistoryItem.html
http://developer.android.com/reference/android/webkit/WebIconDatabase.html
http://developer.android.com/reference/android/webkit/WebSettings.html
+http://developer.android.com/reference/android/webkit/WebStorage.html
http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
http://developer.android.com/reference/android/webkit/WebViewClient.html
@@ -1580,121 +1872,109 @@
http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
http://developer.android.com/reference/android/net/wifi/WifiInfo.html
+http://developer.android.com/reference/android/net/wifi/WifiManager.html
+http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
-http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
http://developer.android.com/reference/java/io/Writer.html
http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
-http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
-http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
-http://developer.android.com/reference/java/security/cert/X509CertSelector.html
http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
http://developer.android.com/reference/javax/xml/XMLConstants.html
http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
+http://developer.android.com/reference/android/util/Xml.html
http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
http://developer.android.com/reference/dalvik/system/Zygote.html
-http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
-http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
http://developer.android.com/reference/android/view/inputmethod/InputMethod.html
http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.html
http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
+http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
http://developer.android.com/reference/org/xml/sax/AttributeList.html
http://developer.android.com/reference/org/xml/sax/Attributes.html
-http://developer.android.com/reference/org/apache/http/params/HttpParams.html
-http://developer.android.com/reference/android/widget/ListAdapter.html
-http://developer.android.com/reference/android/widget/SpinnerAdapter.html
-http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
+http://developer.android.com/reference/org/apache/http/auth/Credentials.html
http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
http://developer.android.com/reference/org/apache/http/HeaderIterator.html
http://developer.android.com/reference/java/util/List.html
-http://developer.android.com/reference/org/apache/http/HttpRequest.html
http://developer.android.com/reference/org/apache/http/client/ResponseHandler.html
http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
http://developer.android.com/reference/org/apache/http/TokenIterator.html
-http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
http://developer.android.com/reference/javax/net/ssl/TrustManager.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
-http://developer.android.com/reference/java/util/concurrent/CompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executor.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
-http://developer.android.com/reference/java/util/concurrent/Callable.html
+http://developer.android.com/reference/org/apache/http/HttpEntity.html
http://developer.android.com/reference/java/util/Formattable.html
http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
-http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
http://developer.android.com/reference/java/security/Principal.html
http://developer.android.com/reference/java/security/KeyPairGenerator.html
http://developer.android.com/reference/java/security/Key.html
+http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
+http://developer.android.com/reference/android/util/Printer.html
http://developer.android.com/reference/java/math/BigDecimal.html
http://developer.android.com/reference/java/security/MessageDigest.html
+http://developer.android.com/reference/android/content/DialogInterface.html
http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
http://developer.android.com/reference/org/xml/sax/Parser.html
http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
http://developer.android.com/reference/org/xml/sax/XMLReader.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
+http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
http://developer.android.com/reference/java/security/SecureRandom.html
http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
-http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
-http://developer.android.com/reference/java/nio/channels/SocketChannel.html
http://developer.android.com/reference/java/security/Signature.html
http://developer.android.com/reference/java/text/CharacterIterator.html
-http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
+http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
http://developer.android.com/reference/java/util/AbstractList.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
http://developer.android.com/reference/java/util/AbstractQueue.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
http://developer.android.com/reference/java/util/AbstractSequentialList.html
http://developer.android.com/reference/java/util/AbstractSet.html
http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
http://developer.android.com/reference/java/security/AccessControlException.html
+http://developer.android.com/reference/android/accounts/AccountsException.html
http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
http://developer.android.com/reference/android/content/pm/ActivityInfo.html
+http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
+http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
+http://developer.android.com/reference/android/content/ActivityNotFoundException.html
+http://developer.android.com/reference/android/test/ActivityTestCase.html
+http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
http://developer.android.com/reference/java/security/AllPermission.html
http://developer.android.com/reference/dalvik/system/AllocationLimitError.html
http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
-http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
-http://developer.android.com/reference/android/widget/AlphabetIndexer.html
-http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
+http://developer.android.com/reference/android/util/AndroidException.html
+http://developer.android.com/reference/android/util/AndroidRuntimeException.html
+http://developer.android.com/reference/android/test/AndroidTestCase.html
+http://developer.android.com/reference/android/test/AndroidTestRunner.html
+http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
+http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
+http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html
http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
-http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
+http://developer.android.com/reference/android/test/ApplicationTestCase.html
http://developer.android.com/reference/junit/framework/AssertionFailedError.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
-http://developer.android.com/reference/android/os/AsyncTask.Status.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
-http://developer.android.com/reference/javax/security/auth/AuthPermission.html
http://developer.android.com/reference/java/security/AuthProvider.html
+http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
+http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
+http://developer.android.com/reference/android/accounts/AuthenticatorException.html
http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
http://developer.android.com/reference/javax/crypto/BadPaddingException.html
-http://developer.android.com/reference/android/os/BadParcelableException.html
http://developer.android.com/reference/android/text/method/BaseKeyListener.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
@@ -1709,14 +1989,11 @@
http://developer.android.com/reference/java/security/BasicPermission.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
http://developer.android.com/reference/java/sql/BatchUpdateException.html
http://developer.android.com/reference/java/math/BigInteger.html
-http://developer.android.com/reference/android/text/BoringLayout.html
-http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
-http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
+http://developer.android.com/reference/java/net/BindException.html
http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
http://developer.android.com/reference/java/nio/BufferOverflowException.html
@@ -1730,12 +2007,7 @@
http://developer.android.com/reference/java/io/ByteArrayInputStream.html
http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
http://developer.android.com/reference/java/nio/ByteBuffer.html
-http://developer.android.com/reference/java/security/cert/CRLException.html
-http://developer.android.com/reference/java/util/concurrent/CancellationException.html
-http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
-http://developer.android.com/reference/java/security/cert/CertStoreException.html
+http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html
http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
http://developer.android.com/reference/javax/security/cert/CertificateException.html
http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
@@ -1746,7 +2018,6 @@
http://developer.android.com/reference/java/nio/CharBuffer.html
http://developer.android.com/reference/java/io/CharConversionException.html
http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
-http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
http://developer.android.com/reference/android/preference/CheckBoxPreference.html
http://developer.android.com/reference/java/text/ChoiceFormat.html
http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
@@ -1758,35 +2029,33 @@
http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
http://developer.android.com/reference/org/apache/http/client/ClientProtocolException.html
+http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
-http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
+http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
http://developer.android.com/reference/junit/framework/ComparisonFailure.html
http://developer.android.com/reference/android/content/pm/ComponentInfo.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
http://developer.android.com/reference/java/util/ConcurrentModificationException.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
+http://developer.android.com/reference/java/net/ConnectException.html
http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
http://developer.android.com/reference/javax/sql/ConnectionEvent.html
-http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
-http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
http://developer.android.com/reference/java/lang/reflect/Constructor.html
+http://developer.android.com/reference/android/provider/ContactsContract.Presence.html
http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
http://developer.android.com/reference/android/database/ContentObservable.html
+http://developer.android.com/reference/android/content/ContentQueryMap.html
+http://developer.android.com/reference/android/content/ContextWrapper.html
http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
-http://developer.android.com/reference/android/widget/CursorAdapter.html
http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
http://developer.android.com/reference/android/database/CursorJoiner.Result.html
-http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
http://developer.android.com/reference/android/database/CursorWindow.html
http://developer.android.com/reference/org/w3c/dom/DOMException.html
http://developer.android.com/reference/java/io/DataInputStream.html
@@ -1799,20 +2068,12 @@
http://developer.android.com/reference/android/text/method/DateKeyListener.html
http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
-http://developer.android.com/reference/android/os/DeadObjectException.html
http://developer.android.com/reference/java/text/DecimalFormat.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
-http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
-http://developer.android.com/reference/java/util/concurrent/Delayed.html
-http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
http://developer.android.com/reference/dalvik/system/DexClassLoader.html
http://developer.android.com/reference/android/text/method/DialerKeyListener.html
http://developer.android.com/reference/android/preference/DialogPreference.html
@@ -1822,25 +2083,28 @@
http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
http://developer.android.com/reference/java/nio/DoubleBuffer.html
+http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
+http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
-http://developer.android.com/reference/android/text/DynamicLayout.html
http://developer.android.com/reference/java/io/EOFException.html
http://developer.android.com/reference/android/preference/EditTextPreference.html
+http://developer.android.com/reference/java/lang/annotation/ElementType.html
http://developer.android.com/reference/java/util/EmptyStackException.html
http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
http://developer.android.com/reference/java/util/EnumMap.html
http://developer.android.com/reference/java/util/EnumSet.html
http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
-http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
http://developer.android.com/reference/java/lang/reflect/Field.html
http://developer.android.com/reference/java/nio/channels/FileChannel.html
http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
-http://developer.android.com/reference/java/util/logging/FileHandler.html
+http://developer.android.com/reference/java/io/FileInputStream.html
http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
+http://developer.android.com/reference/java/io/FileNotFoundException.html
+http://developer.android.com/reference/java/io/FileOutputStream.html
http://developer.android.com/reference/java/io/FilePermission.html
http://developer.android.com/reference/java/io/FileReader.html
http://developer.android.com/reference/java/io/FileWriter.html
@@ -1853,16 +2117,14 @@
http://developer.android.com/reference/java/text/Format.Field.html
http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
-http://developer.android.com/reference/java/util/FormatterClosedException.html
-http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
+http://developer.android.com/reference/android/opengl/GLES11.html
http://developer.android.com/reference/android/opengl/GLException.html
-http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
http://developer.android.com/reference/java/security/GeneralSecurityException.html
http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
+http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
http://developer.android.com/reference/java/util/GregorianCalendar.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/os/HandlerThread.html
+http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
http://developer.android.com/reference/java/util/HashMap.html
http://developer.android.com/reference/java/util/HashSet.html
@@ -1870,32 +2132,23 @@
http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
http://developer.android.com/reference/org/apache/http/HttpException.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
+http://developer.android.com/reference/java/net/HttpRetryException.html
+http://developer.android.com/reference/java/net/HttpURLConnection.html
http://developer.android.com/reference/org/apache/http/HttpVersion.html
http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
-http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.Stub.html
http://developer.android.com/reference/java/util/IdentityHashMap.html
http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
http://developer.android.com/reference/java/security/IdentityScope.html
http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
-http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
@@ -1905,45 +2158,55 @@
http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
http://developer.android.com/reference/android/text/style/ImageSpan.html
-http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
+http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
http://developer.android.com/reference/java/beans/IndexedPropertyChangeEvent.html
+http://developer.android.com/reference/java/net/Inet4Address.html
+http://developer.android.com/reference/java/net/Inet6Address.html
+http://developer.android.com/reference/java/net/InetSocketAddress.html
+http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodImpl.html
http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html
http://developer.android.com/reference/java/util/InputMismatchException.html
http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
http://developer.android.com/reference/java/io/InputStreamReader.html
+http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
+http://developer.android.com/reference/android/test/InstrumentationTestCase.html
+http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
+http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
http://developer.android.com/reference/java/nio/IntBuffer.html
+http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
+http://developer.android.com/reference/android/content/IntentSender.SendIntentException.html
+http://developer.android.com/reference/android/app/IntentService.html
http://developer.android.com/reference/java/io/InterruptedIOException.html
http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
http://developer.android.com/reference/java/io/InvalidClassException.html
+http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
http://developer.android.com/reference/java/security/InvalidKeyException.html
-http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
-http://developer.android.com/reference/java/nio/InvalidMarkException.html
http://developer.android.com/reference/java/io/InvalidObjectException.html
http://developer.android.com/reference/java/security/InvalidParameterException.html
-http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
+http://developer.android.com/reference/android/test/IsolatedContext.html
http://developer.android.com/reference/org/json/JSONException.html
http://developer.android.com/reference/java/util/jar/JarEntry.html
http://developer.android.com/reference/java/util/jar/JarException.html
http://developer.android.com/reference/java/util/jar/JarFile.html
http://developer.android.com/reference/java/util/jar/JarInputStream.html
http://developer.android.com/reference/java/util/jar/JarOutputStream.html
+http://developer.android.com/reference/java/net/JarURLConnection.html
http://developer.android.com/reference/android/webkit/JsPromptResult.html
http://developer.android.com/reference/java/security/KeyException.html
http://developer.android.com/reference/java/security/KeyManagementException.html
http://developer.android.com/reference/java/security/KeyRep.Type.html
http://developer.android.com/reference/java/security/KeyStoreException.html
+http://developer.android.com/reference/android/content/pm/LabeledIntent.html
http://developer.android.com/reference/java/security/acl/LastOwnerException.html
-http://developer.android.com/reference/android/text/Layout.Alignment.html
+http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
http://developer.android.com/reference/java/io/LineNumberInputStream.html
http://developer.android.com/reference/java/io/LineNumberReader.html
-http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
-http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
http://developer.android.com/reference/java/util/LinkedHashMap.html
http://developer.android.com/reference/java/util/LinkedHashSet.html
http://developer.android.com/reference/java/util/LinkedList.html
@@ -1951,18 +2214,17 @@
http://developer.android.com/reference/java/util/ListResourceBundle.html
http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
-http://developer.android.com/reference/java/util/logging/LoggingPermission.html
-http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
+http://developer.android.com/reference/javax/security/auth/login/LoginException.html
http://developer.android.com/reference/java/nio/LongBuffer.html
+http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
+http://developer.android.com/reference/java/net/MalformedURLException.html
http://developer.android.com/reference/java/nio/MappedByteBuffer.html
http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
-http://developer.android.com/reference/java/util/logging/MemoryHandler.html
+http://developer.android.com/reference/android/database/MatrixCursor.html
http://developer.android.com/reference/android/database/MergeCursor.html
http://developer.android.com/reference/java/text/MessageFormat.html
http://developer.android.com/reference/java/text/MessageFormat.Field.html
@@ -1972,31 +2234,33 @@
http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
http://developer.android.com/reference/java/util/MissingFormatWidthException.html
http://developer.android.com/reference/java/util/MissingResourceException.html
+http://developer.android.com/reference/android/test/mock/MockApplication.html
http://developer.android.com/reference/android/test/mock/MockContentResolver.html
+http://developer.android.com/reference/android/test/mock/MockContext.html
http://developer.android.com/reference/android/test/mock/MockPackageManager.html
-http://developer.android.com/reference/android/test/mock/MockResources.html
http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
+http://developer.android.com/reference/java/net/MulticastSocket.html
+http://developer.android.com/reference/android/content/MutableContextWrapper.html
http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
+http://developer.android.com/reference/java/net/NetPermission.html
http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
+http://developer.android.com/reference/android/accounts/NetworkErrorException.html
http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
http://developer.android.com/reference/android/net/NetworkInfo.State.html
-http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
+http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
+http://developer.android.com/reference/java/net/NoRouteToHostException.html
http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
http://developer.android.com/reference/java/util/NoSuchElementException.html
http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
http://developer.android.com/reference/java/security/NoSuchProviderException.html
http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
-http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
-http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
http://developer.android.com/reference/java/io/NotActiveException.html
http://developer.android.com/reference/java/security/acl/NotOwnerException.html
http://developer.android.com/reference/java/io/NotSerializableException.html
-http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
-http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
http://developer.android.com/reference/javax/crypto/NullCipher.html
http://developer.android.com/reference/java/text/NumberFormat.html
http://developer.android.com/reference/java/text/NumberFormat.Field.html
@@ -2004,47 +2268,50 @@
http://developer.android.com/reference/java/io/ObjectInputStream.html
http://developer.android.com/reference/java/io/ObjectOutputStream.html
http://developer.android.com/reference/java/io/ObjectStreamException.html
+http://developer.android.com/reference/android/content/OperationApplicationException.html
+http://developer.android.com/reference/android/accounts/OperationCanceledException.html
http://developer.android.com/reference/java/io/OptionalDataException.html
http://developer.android.com/reference/java/io/OutputStreamWriter.html
-http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
-http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
-http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/os/ParcelFormatException.html
+http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
+http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
http://developer.android.com/reference/java/text/ParseException.html
http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
http://developer.android.com/reference/dalvik/system/PathClassLoader.html
-http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
+http://developer.android.com/reference/android/content/pm/PathPermission.html
+http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
http://developer.android.com/reference/android/content/pm/PermissionInfo.html
http://developer.android.com/reference/java/security/Permissions.html
+http://developer.android.com/reference/java/lang/ref/PhantomReference.html
+http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
http://developer.android.com/reference/java/io/PipedInputStream.html
http://developer.android.com/reference/java/io/PipedOutputStream.html
http://developer.android.com/reference/java/io/PipedReader.html
http://developer.android.com/reference/java/io/PipedWriter.html
+http://developer.android.com/reference/java/net/PortUnreachableException.html
http://developer.android.com/reference/dalvik/system/PotentialDeadlockError.html
http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
http://developer.android.com/reference/android/preference/PreferenceCategory.html
http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
http://developer.android.com/reference/android/preference/PreferenceGroup.html
http://developer.android.com/reference/android/preference/PreferenceScreen.html
-http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
http://developer.android.com/reference/java/util/PriorityQueue.html
-http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
http://developer.android.com/reference/java/security/PrivilegedActionException.html
http://developer.android.com/reference/java/util/Properties.html
http://developer.android.com/reference/java/beans/PropertyChangeEvent.html
http://developer.android.com/reference/java/beans/PropertyChangeListenerProxy.html
http://developer.android.com/reference/java/util/PropertyPermission.html
http://developer.android.com/reference/java/util/PropertyResourceBundle.html
+http://developer.android.com/reference/java/net/ProtocolException.html
http://developer.android.com/reference/java/security/Provider.html
http://developer.android.com/reference/java/security/ProviderException.html
http://developer.android.com/reference/android/content/pm/ProviderInfo.html
+http://developer.android.com/reference/android/test/ProviderTestCase.html
+http://developer.android.com/reference/android/test/ProviderTestCase2.html
+http://developer.android.com/reference/java/net/Proxy.Type.html
http://developer.android.com/reference/java/io/PushbackInputStream.html
http://developer.android.com/reference/java/io/PushbackReader.html
http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
@@ -2052,25 +2319,19 @@
http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
-http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
-http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
http://developer.android.com/reference/android/text/style/RasterizerSpan.html
http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
+http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
http://developer.android.com/reference/org/apache/http/client/RedirectException.html
http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
-http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
-http://developer.android.com/reference/android/os/RemoteException.html
-http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
+http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
http://developer.android.com/reference/android/text/style/ReplacementSpan.html
http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
-http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
+http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
http://developer.android.com/reference/android/preference/RingtonePreference.html
http://developer.android.com/reference/android/sax/RootElement.html
-http://developer.android.com/reference/android/view/animation/RotateAnimation.html
+http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
http://developer.android.com/reference/java/math/RoundingMode.html
http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
@@ -2085,9 +2346,11 @@
http://developer.android.com/reference/java/sql/SQLWarning.html
http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteConstraintException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseCorruptException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteDiskIOException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteDoneException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteFullException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteMisuseException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
@@ -2107,44 +2370,40 @@
http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
+http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
http://developer.android.com/reference/android/text/style/ScaleXSpan.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
+http://developer.android.com/reference/java/net/SecureCacheResponse.html
http://developer.android.com/reference/java/security/SecureClassLoader.html
http://developer.android.com/reference/java/security/SecurityPermission.html
http://developer.android.com/reference/java/io/SequenceInputStream.html
http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
http://developer.android.com/reference/java/io/SerializablePermission.html
http://developer.android.com/reference/android/content/pm/ServiceInfo.html
+http://developer.android.com/reference/android/test/ServiceTestCase.html
+http://developer.android.com/reference/android/provider/Settings.Secure.html
http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
http://developer.android.com/reference/android/provider/Settings.System.html
http://developer.android.com/reference/java/nio/ShortBuffer.html
http://developer.android.com/reference/javax/crypto/ShortBufferException.html
http://developer.android.com/reference/java/security/SignatureException.html
http://developer.android.com/reference/java/security/Signer.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
http://developer.android.com/reference/java/text/SimpleDateFormat.html
-http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
-http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
http://developer.android.com/reference/java/util/SimpleTimeZone.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
+http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
-http://developer.android.com/reference/java/util/logging/SocketHandler.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
+http://developer.android.com/reference/java/net/SocketException.html
http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
+http://developer.android.com/reference/java/net/SocketPermission.html
+http://developer.android.com/reference/java/net/SocketTimeoutException.html
+http://developer.android.com/reference/java/lang/ref/SoftReference.html
http://developer.android.com/reference/android/webkit/SslErrorHandler.html
http://developer.android.com/reference/java/util/Stack.html
http://developer.android.com/reference/android/database/StaleDataException.html
http://developer.android.com/reference/dalvik/system/StaleDexCacheError.html
-http://developer.android.com/reference/android/text/StaticLayout.html
+http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
http://developer.android.com/reference/java/io/StreamCorruptedException.html
-http://developer.android.com/reference/java/util/logging/StreamHandler.html
http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
http://developer.android.com/reference/java/io/StringBufferInputStream.html
@@ -2155,44 +2414,40 @@
http://developer.android.com/reference/android/text/style/SubscriptSpan.html
http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
http://developer.android.com/reference/android/net/wifi/SupplicantState.html
-http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
+http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
http://developer.android.com/reference/java/io/SyncFailedException.html
-http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
-http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
+http://developer.android.com/reference/junit/framework/TestCase.html
http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
http://developer.android.com/reference/java/awt/font/TextAttribute.html
http://developer.android.com/reference/android/text/method/TextKeyListener.html
http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
-http://developer.android.com/reference/android/text/TextPaint.html
-http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
-http://developer.android.com/reference/android/widget/TextView.BufferType.html
-http://developer.android.com/reference/android/widget/TextView.SavedState.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
http://developer.android.com/reference/java/sql/Time.html
+http://developer.android.com/reference/android/util/TimeFormatException.html
http://developer.android.com/reference/android/text/method/TimeKeyListener.html
-http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
-http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
http://developer.android.com/reference/java/sql/Timestamp.html
http://developer.android.com/reference/java/util/TooManyListenersException.html
-http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
+http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
http://developer.android.com/reference/java/util/TreeMap.html
http://developer.android.com/reference/java/util/TreeSet.html
http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
http://developer.android.com/reference/android/text/style/TypefaceSpan.html
-http://developer.android.com/reference/android/text/style/URLSpan.html
+http://developer.android.com/reference/java/net/URISyntaxException.html
+http://developer.android.com/reference/java/net/URLClassLoader.html
http://developer.android.com/reference/java/io/UTFDataFormatException.html
http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
http://developer.android.com/reference/android/text/style/UnderlineSpan.html
http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
+http://developer.android.com/reference/java/net/UnknownHostException.html
+http://developer.android.com/reference/java/net/UnknownServiceException.html
http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
http://developer.android.com/reference/java/security/UnresolvedPermission.html
http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
+http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
@@ -2204,111 +2459,123 @@
http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
http://developer.android.com/reference/java/io/WriteAbortedException.html
-http://developer.android.com/reference/java/security/cert/X509CRL.html
http://developer.android.com/reference/javax/security/cert/X509Certificate.html
-http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
-http://developer.android.com/reference/java/util/logging/XMLFormatter.html
+http://developer.android.com/reference/android/util/Xml.Encoding.html
http://developer.android.com/reference/java/util/Queue.html
-http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
http://developer.android.com/reference/javax/sql/PooledConnection.html
http://developer.android.com/reference/java/util/Set.html
http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
-http://developer.android.com/reference/javax/security/auth/Destroyable.html
-http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
http://developer.android.com/reference/javax/sql/RowSet.html
-http://developer.android.com/reference/javax/net/ssl/SSLSession.html
-http://developer.android.com/reference/java/security/Certificate.html
-http://developer.android.com/reference/java/security/DomainCombiner.html
-http://developer.android.com/reference/java/security/Guard.html
-http://developer.android.com/reference/java/security/KeyStore.Entry.html
-http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
-http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
-http://developer.android.com/reference/java/security/PrivateKey.html
+http://developer.android.com/reference/javax/security/auth/callback/Callback.html
+http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/FormattedHeader.html
+http://developer.android.com/reference/org/apache/http/Header.html
+http://developer.android.com/reference/org/apache/http/HeaderElement.html
+http://developer.android.com/reference/org/apache/http/HttpMessage.html
+http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
+http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
+http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
+http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/HttpStatus.html
+http://developer.android.com/reference/org/apache/http/NameValuePair.html
+http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
+http://developer.android.com/reference/org/apache/http/RequestLine.html
+http://developer.android.com/reference/org/apache/http/StatusLine.html
+http://developer.android.com/reference/org/apache/http/ParseException.html
+http://developer.android.com/reference/org/apache/http/ProtocolException.html
+http://developer.android.com/reference/android/net/wifi/package-descr.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/AndroidManifest.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
+http://developer.android.com/reference/org/apache/http/auth/package-descr.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
+http://developer.android.com/reference/android/graphics/drawable/Animatable.html
+http://developer.android.com/reference/android/graphics/drawable/package-descr.html
+http://developer.android.com/reference/android/test/PerformanceTestCase.html
+http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
+http://developer.android.com/reference/android/test/TestSuiteProvider.html
+http://developer.android.com/reference/android/test/AssertionFailedError.html
+http://developer.android.com/reference/android/test/ComparisonFailure.html
+http://developer.android.com/reference/android/test/package-descr.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi-v6/app_notes.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi-v6/live_folder_notes.html
+http://developer.android.com/reference/java/util/Collection.html
http://developer.android.com/reference/java/security/PrivilegedAction.html
-http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
-http://developer.android.com/reference/java/security/PublicKey.html
-http://developer.android.com/reference/java/security/package-descr.html
-http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
-http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
-http://developer.android.com/reference/android/widget/Chronometer.OnChronometerTickListener.html
-http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
-http://developer.android.com/reference/android/widget/Filter.FilterListener.html
-http://developer.android.com/reference/android/widget/Filterable.html
-http://developer.android.com/reference/android/widget/FilterQueryProvider.html
-http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
-http://developer.android.com/reference/android/widget/PopupWindow.OnDismissListener.html
-http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
-http://developer.android.com/reference/android/widget/SectionIndexer.html
-http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerCloseListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerOpenListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerScrollListener.html
-http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
-http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
-http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
-http://developer.android.com/reference/android/widget/WrapperListAdapter.html
-http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
+http://developer.android.com/reference/java/io/Serializable.html
+http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
+http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
+http://developer.android.com/reference/java/lang/reflect/Type.html
+http://developer.android.com/reference/java/lang/annotation/Annotation.html
+http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
+http://developer.android.com/reference/java/util/Comparator.html
+http://developer.android.com/reference/java/util/Enumeration.html
+http://developer.android.com/reference/java/util/EventListener.html
+http://developer.android.com/reference/java/util/Iterator.html
+http://developer.android.com/reference/java/util/ListIterator.html
+http://developer.android.com/reference/java/util/Map.html
+http://developer.android.com/reference/java/util/Map.Entry.html
+http://developer.android.com/reference/java/util/Observer.html
+http://developer.android.com/reference/java/util/RandomAccess.html
+http://developer.android.com/reference/java/util/SortedMap.html
+http://developer.android.com/reference/java/util/SortedSet.html
+http://developer.android.com/reference/android/provider/BaseColumns.html
+http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
+http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
+http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
+http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
+http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.BaseSyncColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.BaseTypes.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.CommonColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.ContactOptionsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.ContactStatusColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html
+http://developer.android.com/reference/android/provider/ContactsContract.GroupsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.PresenceColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.SettingsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.StatusColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.SyncColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
+http://developer.android.com/reference/android/provider/OpenableColumns.html
+http://developer.android.com/reference/android/provider/SyncStateContract.Columns.html
http://developer.android.com/reference/java/io/Closeable.html
+http://developer.android.com/reference/java/io/Flushable.html
http://developer.android.com/reference/java/io/DataInput.html
http://developer.android.com/reference/java/io/DataOutput.html
http://developer.android.com/reference/java/io/Externalizable.html
http://developer.android.com/reference/java/io/FileFilter.html
http://developer.android.com/reference/java/io/FilenameFilter.html
-http://developer.android.com/reference/java/io/Flushable.html
http://developer.android.com/reference/java/io/ObjectInput.html
http://developer.android.com/reference/java/io/ObjectInputValidation.html
http://developer.android.com/reference/java/io/ObjectOutput.html
http://developer.android.com/reference/java/io/ObjectStreamConstants.html
-http://developer.android.com/reference/java/io/Serializable.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
-http://developer.android.com/reference/org/xml/sax/ContentHandler.html
-http://developer.android.com/reference/java/security/acl/Acl.html
-http://developer.android.com/reference/java/security/acl/AclEntry.html
-http://developer.android.com/reference/java/security/acl/Group.html
-http://developer.android.com/reference/java/security/acl/Owner.html
-http://developer.android.com/reference/java/security/acl/Permission.html
-http://developer.android.com/reference/java/security/acl/package-descr.html
-http://developer.android.com/reference/android/os/Parcelable.Creator.html
-http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/client/HttpClient.html
-http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/client/package-descr.html
-http://developer.android.com/reference/org/apache/http/HttpResponse.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
-http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
-http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
-http://developer.android.com/reference/android/hardware/SensorEventListener.html
-http://developer.android.com/reference/android/hardware/SensorListener.html
-http://developer.android.com/reference/android/hardware/Camera.html
-http://developer.android.com/reference/android/hardware/package-descr.html
-http://developer.android.com/reference/java/nio/charset/package-descr.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
-http://developer.android.com/reference/android/preference/package-descr.html
+http://developer.android.com/reference/android/accounts/AccountManagerCallback.html
+http://developer.android.com/reference/android/accounts/AccountManagerFuture.html
+http://developer.android.com/reference/android/accounts/OnAccountsUpdateListener.html
http://developer.android.com/reference/java/nio/channels/ByteChannel.html
http://developer.android.com/reference/java/nio/channels/Channel.html
http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
@@ -2316,49 +2583,65 @@
http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
-http://developer.android.com/reference/java/util/Map.Entry.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/LineParser.html
-http://developer.android.com/reference/org/apache/http/HeaderElement.html
-http://developer.android.com/reference/org/apache/http/NameValuePair.html
-http://developer.android.com/reference/javax/crypto/SecretKey.html
-http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
+http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
+http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
+http://developer.android.com/reference/org/apache/http/client/HttpClient.html
+http://developer.android.com/reference/android/util/package-descr.html
+http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
+http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
+http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
+http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
+http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
+http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
+http://developer.android.com/guide/topics/ui/notifiers/notifications.html
+http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
+http://developer.android.com/reference/org/xml/sax/helpers/package-descr.html
+http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
+http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
+http://developer.android.com/reference/java/security/Certificate.html
+http://developer.android.com/reference/java/security/DomainCombiner.html
+http://developer.android.com/reference/java/security/Guard.html
+http://developer.android.com/reference/java/security/KeyStore.Entry.html
+http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
+http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
+http://developer.android.com/reference/java/security/PrivateKey.html
+http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
http://developer.android.com/reference/android/database/CrossProcessCursor.html
http://developer.android.com/reference/android/database/CharArrayBuffer.html
http://developer.android.com/reference/android/database/Observable.html
http://developer.android.com/reference/android/database/SQLException.html
-http://developer.android.com/reference/java/util/Collection.html
-http://developer.android.com/reference/java/util/Comparator.html
-http://developer.android.com/reference/java/util/Enumeration.html
-http://developer.android.com/reference/java/util/EventListener.html
-http://developer.android.com/reference/java/util/Iterator.html
-http://developer.android.com/reference/java/util/ListIterator.html
-http://developer.android.com/reference/java/util/Map.html
-http://developer.android.com/reference/java/util/Observer.html
-http://developer.android.com/reference/java/util/RandomAccess.html
-http://developer.android.com/reference/java/util/SortedMap.html
-http://developer.android.com/reference/java/util/SortedSet.html
-http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
-http://developer.android.com/reference/org/apache/http/cookie/SM.html
-http://developer.android.com/reference/android/content/res/XmlResourceParser.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
-http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
-http://developer.android.com/reference/org/apache/http/RequestLine.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
-http://developer.android.com/reference/org/apache/http/Header.html
-http://developer.android.com/reference/org/apache/http/HttpMessage.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
+http://developer.android.com/reference/android/text/style/AlignmentSpan.html
+http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
+http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
+http://developer.android.com/reference/android/text/style/LineHeightSpan.html
+http://developer.android.com/reference/android/text/style/LineHeightSpan.WithDensity.html
+http://developer.android.com/reference/android/text/style/ParagraphStyle.html
+http://developer.android.com/reference/android/text/style/TabStopSpan.html
+http://developer.android.com/reference/android/text/style/UpdateAppearance.html
+http://developer.android.com/reference/android/text/style/UpdateLayout.html
+http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
+http://developer.android.com/reference/android/content/ComponentCallbacks.html
+http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
+http://developer.android.com/reference/android/content/IntentSender.OnFinished.html
+http://developer.android.com/reference/android/content/SharedPreferences.html
+http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
+http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
+http://developer.android.com/reference/android/content/SyncStatusObserver.html
+http://developer.android.com/reference/android/webkit/DownloadListener.html
+http://developer.android.com/reference/android/webkit/GeolocationPermissions.Callback.html
+http://developer.android.com/reference/android/webkit/Plugin.PreferencesClickHandler.html
+http://developer.android.com/reference/android/webkit/PluginStub.html
+http://developer.android.com/reference/android/webkit/UrlInterceptHandler.html
+http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
+http://developer.android.com/reference/android/webkit/WebStorage.QuotaUpdater.html
+http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
http://developer.android.com/reference/android/media/AudioRecord.OnRecordPositionUpdateListener.html
http://developer.android.com/reference/android/media/AudioTrack.OnPlaybackPositionUpdateListener.html
http://developer.android.com/reference/android/media/JetPlayer.OnJetEventListener.html
@@ -2372,1011 +2655,1209 @@
http://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html
http://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html
http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/HttpConnection.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
-http://developer.android.com/reference/android/net/Proxy.html
-http://developer.android.com/reference/android/net/ParseException.html
-http://developer.android.com/reference/java/util/regex/MatchResult.html
-http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/FormattedHeader.html
-http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
-http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
-http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/HttpStatus.html
-http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
-http://developer.android.com/reference/org/apache/http/StatusLine.html
-http://developer.android.com/reference/org/apache/http/ParseException.html
-http://developer.android.com/reference/org/apache/http/ProtocolException.html
-http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
-http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
-http://developer.android.com/reference/android/provider/OpenableColumns.html
-http://developer.android.com/reference/java/security/cert/Certificate.html
-http://developer.android.com/reference/junit/framework/TestListener.html
-http://developer.android.com/reference/junit/framework/Test.html
-http://developer.android.com/reference/android/os/Handler.Callback.html
-http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
-http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
-http://developer.android.com/reference/android/os/Process.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
-http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.html
-http://developer.android.com/reference/android/text/style/ParagraphStyle.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.html
-http://developer.android.com/reference/android/text/style/UpdateAppearance.html
-http://developer.android.com/reference/android/text/style/UpdateLayout.html
-http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
-http://developer.android.com/reference/android/text/style/package-descr.html
-http://developer.android.com/reference/android/text/TextWatcher.html
-http://developer.android.com/reference/android/text/method/MovementMethod.html
-http://developer.android.com/reference/android/text/Editable.html
-http://developer.android.com/reference/android/text/InputFilter.html
-http://developer.android.com/reference/android/text/method/KeyListener.html
-http://developer.android.com/reference/android/text/method/TransformationMethod.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
-http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
-http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
-http://developer.android.com/reference/android/provider/package-descr.html
-http://developer.android.com/reference/org/apache/http/impl/entity/package-descr.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
-http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
-http://developer.android.com/reference/javax/net/ssl/KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
-http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
-http://developer.android.com/reference/java/util/concurrent/Future.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
+http://developer.android.com/reference/android/webkit/package-descr.html
+http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
+http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
+http://developer.android.com/reference/java/lang/reflect/Member.html
+http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
+http://developer.android.com/reference/java/lang/reflect/WildcardType.html
+http://developer.android.com/reference/java/lang/reflect/Proxy.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
+http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
+http://developer.android.com/reference/org/xml/sax/ContentHandler.html
http://developer.android.com/reference/org/xml/sax/DTDHandler.html
http://developer.android.com/reference/org/xml/sax/EntityResolver.html
http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
http://developer.android.com/reference/org/xml/sax/Locator.html
http://developer.android.com/reference/org/xml/sax/XMLFilter.html
-http://developer.android.com/reference/java/security/cert/CertPathParameters.html
-http://developer.android.com/reference/android/location/GpsStatus.Listener.html
-http://developer.android.com/reference/android/location/LocationListener.html
-http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
-http://developer.android.com/reference/android/text/method/package-descr.html
-http://developer.android.com/guide/samples/NotePad/res/index.html
-http://developer.android.com/guide/samples/NotePad/src/index.html
-http://developer.android.com/guide/samples/NotePad/tests/index.html
-http://developer.android.com/guide/samples/NotePad/AndroidManifest.html
-http://developer.android.com/guide/samples/NotePad/sample_note.html
-http://developer.android.com/guide/samples/NotePad/sample_notepad.html
-http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.html
-http://developer.android.com/guide/samples/LunarLander/res/index.html
-http://developer.android.com/guide/samples/LunarLander/src/index.html
-http://developer.android.com/guide/samples/LunarLander/tests/index.html
-http://developer.android.com/guide/samples/LunarLander/AndroidManifest.html
-http://developer.android.com/guide/samples/LunarLander/sample_lunarlander.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/CertSelector.html
-http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
-http://developer.android.com/reference/java/security/cert/CRLSelector.html
-http://developer.android.com/reference/java/security/cert/PolicyNode.html
-http://developer.android.com/reference/java/security/cert/X509Extension.html
-http://developer.android.com/reference/java/security/cert/X509Certificate.html
-http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/java/security/cert/CertificateException.html
-http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/java/security/spec/ECField.html
-http://developer.android.com/reference/java/security/spec/KeySpec.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
-http://developer.android.com/reference/org/apache/http/params/package-descr.html
-http://developer.android.com/sdk/android-1.5-highlights.html
-http://developer.android.com/reference/javax/security/auth/package-descr.html
-http://developer.android.com/reference/java/beans/PropertyChangeListener.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
+http://developer.android.com/reference/java/security/acl/Acl.html
+http://developer.android.com/reference/java/security/acl/AclEntry.html
+http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
+http://developer.android.com/reference/java/sql/Array.html
+http://developer.android.com/reference/org/w3c/dom/Attr.html
+http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
+http://developer.android.com/reference/java/sql/Blob.html
+http://developer.android.com/reference/java/sql/CallableStatement.html
+http://developer.android.com/reference/android/hardware/Camera.html
+http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
+http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
+http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
+http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
+http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
+http://developer.android.com/reference/org/w3c/dom/CDATASection.html
+http://developer.android.com/reference/org/w3c/dom/CharacterData.html
+http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
+http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
+http://developer.android.com/reference/java/sql/Clob.html
+http://developer.android.com/reference/org/w3c/dom/Comment.html
+http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
+http://developer.android.com/reference/java/sql/Connection.html
+http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
+http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
+http://developer.android.com/reference/java/net/ContentHandlerFactory.html
+http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
+http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
+http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
+http://developer.android.com/reference/android/net/Credentials.html
+http://developer.android.com/reference/java/sql/DatabaseMetaData.html
+http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
+http://developer.android.com/reference/javax/sql/DataSource.html
+http://developer.android.com/reference/android/text/format/DateUtils.html
+http://developer.android.com/reference/java/lang/Deprecated.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
+http://developer.android.com/reference/org/w3c/dom/Document.html
+http://developer.android.com/reference/java/lang/annotation/Documented.html
+http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
+http://developer.android.com/reference/org/w3c/dom/DocumentType.html
+http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
+http://developer.android.com/reference/java/sql/Driver.html
+http://developer.android.com/reference/java/security/interfaces/DSAKey.html
+http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
+http://developer.android.com/reference/java/security/interfaces/DSAParams.html
+http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
+http://developer.android.com/reference/java/security/interfaces/ECKey.html
+http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
-http://developer.android.com/reference/android/text/GetChars.html
-http://developer.android.com/reference/android/text/Html.ImageGetter.html
-http://developer.android.com/reference/android/text/Html.TagHandler.html
-http://developer.android.com/reference/android/text/InputType.html
-http://developer.android.com/reference/android/text/NoCopySpan.html
-http://developer.android.com/reference/android/text/ParcelableSpan.html
-http://developer.android.com/reference/android/text/Spannable.html
-http://developer.android.com/reference/android/text/Spanned.html
-http://developer.android.com/reference/android/text/SpanWatcher.html
-http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
-http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
-http://developer.android.com/reference/android/text/Annotation.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
+http://developer.android.com/reference/org/w3c/dom/Element.html
+http://developer.android.com/reference/android/sax/ElementListener.html
+http://developer.android.com/reference/android/sax/EndElementListener.html
+http://developer.android.com/reference/android/sax/EndTextElementListener.html
+http://developer.android.com/reference/org/w3c/dom/Entity.html
+http://developer.android.com/reference/org/w3c/dom/EntityReference.html
+http://developer.android.com/reference/java/net/FileNameMap.html
+http://developer.android.com/reference/android/test/FlakyTest.html
+http://developer.android.com/reference/android/text/format/Formatter.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGestureListener.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturePerformedListener.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturingListener.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLContextFactory.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLWindowSurfaceFactory.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
+http://developer.android.com/reference/android/location/GpsStatus.Listener.html
+http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html
+http://developer.android.com/reference/java/security/acl/Group.html
+http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
+http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
+http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
+http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
+http://developer.android.com/reference/java/lang/annotation/Inherited.html
+http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
+http://developer.android.com/reference/javax/net/ssl/KeyManager.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
-http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
-http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
-http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
-http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
-http://developer.android.com/reference/java/lang/reflect/Member.html
-http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
-http://developer.android.com/reference/java/lang/reflect/Type.html
-http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
-http://developer.android.com/reference/java/lang/reflect/WildcardType.html
-http://developer.android.com/reference/java/lang/reflect/Proxy.html
-http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
+http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
+http://developer.android.com/reference/org/apache/http/message/LineParser.html
+http://developer.android.com/reference/android/location/LocationListener.html
+http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
+http://developer.android.com/reference/java/util/jar/Manifest.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
+http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
+http://developer.android.com/reference/org/w3c/dom/Node.html
+http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
+http://developer.android.com/reference/org/w3c/dom/NodeList.html
+http://developer.android.com/reference/org/w3c/dom/Notation.html
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
+http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
+http://developer.android.com/reference/java/lang/Override.html
+http://developer.android.com/reference/java/security/acl/Owner.html
+http://developer.android.com/reference/java/sql/ParameterMetaData.html
+http://developer.android.com/reference/android/net/ParseException.html
+http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
+http://developer.android.com/reference/java/security/acl/Permission.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
+http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
+http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
+http://developer.android.com/reference/java/sql/PreparedStatement.html
+http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
+http://developer.android.com/reference/java/beans/PropertyChangeListener.html
http://developer.android.com/reference/junit/framework/Protectable.html
-http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
-http://developer.android.com/reference/javax/sql/DataSource.html
+http://developer.android.com/reference/android/net/Proxy.html
+http://developer.android.com/reference/java/sql/Ref.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
+http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
+http://developer.android.com/reference/java/sql/ResultSet.html
+http://developer.android.com/reference/java/sql/ResultSetMetaData.html
+http://developer.android.com/reference/java/lang/annotation/Retention.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
http://developer.android.com/reference/javax/sql/RowSetInternal.html
http://developer.android.com/reference/javax/sql/RowSetListener.html
http://developer.android.com/reference/javax/sql/RowSetMetaData.html
http://developer.android.com/reference/javax/sql/RowSetReader.html
http://developer.android.com/reference/javax/sql/RowSetWriter.html
-http://developer.android.com/reference/java/sql/Connection.html
-http://developer.android.com/reference/java/util/logging/Filter.html
-http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
-http://developer.android.com/reference/java/util/logging/Formatter.html
-http://developer.android.com/reference/android/package-descr.html
-http://developer.android.com/reference/android/webkit/DownloadListener.html
-http://developer.android.com/reference/android/webkit/Plugin.PreferencesClickHandler.html
-http://developer.android.com/reference/android/webkit/UrlInterceptHandler.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
-http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
-http://developer.android.com/reference/java/security/cert/package-descr.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
-http://developer.android.com/reference/android/graphics/drawable/package-descr.html
-http://developer.android.com/reference/java/sql/Array.html
-http://developer.android.com/reference/java/sql/Blob.html
-http://developer.android.com/reference/java/sql/CallableStatement.html
-http://developer.android.com/reference/java/sql/Clob.html
-http://developer.android.com/reference/java/sql/DatabaseMetaData.html
-http://developer.android.com/reference/java/sql/Driver.html
-http://developer.android.com/reference/java/sql/ParameterMetaData.html
-http://developer.android.com/reference/java/sql/PreparedStatement.html
-http://developer.android.com/reference/java/sql/Ref.html
-http://developer.android.com/reference/java/sql/ResultSet.html
-http://developer.android.com/reference/java/sql/ResultSetMetaData.html
-http://developer.android.com/reference/java/sql/Savepoint.html
-http://developer.android.com/reference/java/sql/SQLData.html
-http://developer.android.com/reference/java/sql/SQLInput.html
-http://developer.android.com/reference/java/sql/SQLOutput.html
-http://developer.android.com/reference/java/sql/Statement.html
-http://developer.android.com/reference/java/sql/Struct.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
-http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
-http://developer.android.com/reference/javax/xml/parsers/package-descr.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
-http://developer.android.com/reference/java/lang/package-descr.html
-http://developer.android.com/reference/android/webkit/package-descr.html
-http://developer.android.com/reference/java/util/concurrent/locks/package-descr.html
-http://developer.android.com/reference/dalvik/system/package-descr.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
-http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
-http://developer.android.com/reference/java/util/jar/Manifest.html
-http://developer.android.com/reference/javax/security/cert/package-descr.html
-http://developer.android.com/reference/org/apache/http/conn/params/package-descr.html
-http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
-http://developer.android.com/reference/android/content/pm/package-descr.html
-http://developer.android.com/reference/org/xml/sax/ext/package-descr.html
-http://developer.android.com/reference/java/io/package-descr.html
-http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
-http://developer.android.com/reference/javax/crypto/package-descr.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
-http://developer.android.com/reference/org/apache/http/auth/params/package-descr.html
-http://developer.android.com/reference/javax/net/package-descr.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
-http://developer.android.com/reference/org/apache/http/entity/package-descr.html
-http://developer.android.com/sdk/1.0_r2/requirements.html
-http://developer.android.com/sdk/adt_download.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
-http://developer.android.com/reference/android/inputmethodservice/package-descr.html
-http://developer.android.com/reference/javax/net/ssl/package-descr.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
-http://developer.android.com/reference/org/apache/http/cookie/params/package-descr.html
-http://developer.android.com/reference/java/security/spec/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/index.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable-land/index.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable-port/index.html
-http://developer.android.com/guide/samples/LunarLander/res/layout/index.html
-http://developer.android.com/guide/samples/LunarLander/res/values/index.html
-http://developer.android.com/reference/java/sql/package-descr.html
-http://developer.android.com/reference/android/graphics/package-descr.html
-http://developer.android.com/reference/android/content/res/package-descr.html
-http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
-http://developer.android.com/reference/junit/framework/package-descr.html
-http://developer.android.com/reference/org/apache/http/impl/package-descr.html
-http://developer.android.com/guide/appendix/faq/commontasks.html
-http://developer.android.com/guide/appendix/faq/framework.html
-http://developer.android.com/guide/appendix/faq/licensingandoss.html
-http://developer.android.com/guide/appendix/faq/security.html
-http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.0_r2.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-mac_x86-1.0_r2.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-1.0_r2.zip
-http://developer.android.com/reference/android/opengl/package-descr.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
-http://developer.android.com/reference/android/view/package-descr.html
-http://developer.android.com/reference/org/w3c/dom/Attr.html
-http://developer.android.com/reference/org/w3c/dom/CDATASection.html
-http://developer.android.com/reference/org/w3c/dom/CharacterData.html
-http://developer.android.com/reference/org/w3c/dom/Comment.html
-http://developer.android.com/reference/org/w3c/dom/Document.html
-http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentType.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
-http://developer.android.com/reference/org/w3c/dom/Element.html
-http://developer.android.com/reference/org/w3c/dom/Entity.html
-http://developer.android.com/reference/org/w3c/dom/EntityReference.html
-http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
-http://developer.android.com/reference/org/w3c/dom/Node.html
-http://developer.android.com/reference/org/w3c/dom/NodeList.html
-http://developer.android.com/reference/org/w3c/dom/Notation.html
-http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
-http://developer.android.com/reference/org/w3c/dom/Text.html
-http://developer.android.com/reference/org/apache/http/message/package-descr.html
-http://developer.android.com/reference/java/util/concurrent/package-descr.html
-http://developer.android.com/guide/tutorials/views/hello-datepicker.html
-http://developer.android.com/guide/tutorials/views/hello-timepicker.html
-http://developer.android.com/reference/android/net/wifi/package-descr.html
-http://developer.android.com/reference/android/content/package-descr.html
-http://developer.android.com/guide/samples/NotePad/src/com/index.html
-http://developer.android.com/guide/samples/LunarLander/src/com/index.html
-http://developer.android.com/reference/org/apache/http/impl/io/package-descr.html
-http://developer.android.com/reference/android/text/format/DateUtils.html
-http://developer.android.com/reference/android/text/format/Formatter.html
-http://developer.android.com/reference/java/security/interfaces/DSAKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
-http://developer.android.com/reference/java/security/interfaces/DSAParams.html
-http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/ECKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
http://developer.android.com/reference/java/security/interfaces/RSAKey.html
http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/package-descr.html
-http://developer.android.com/reference/org/apache/http/client/params/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/res/layout/lunar_layout.html
-http://developer.android.com/reference/android/net/package-descr.html
-http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
-http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
-http://developer.android.com/reference/android/text/util/package-descr.html
-http://developer.android.com/reference/android/appwidget/package-descr.html
-http://developer.android.com/sdk/1.1_r1/requirements.html
-http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.1_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-mac_x86-1.1_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-1.1_r1.zip
-http://developer.android.com/reference/android/graphics/drawable/shapes/package-descr.html
-http://developer.android.com/reference/javax/xml/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable-land/earthrise.html
-http://developer.android.com/reference/android/test/mock/package-descr.html
-http://developer.android.com/reference/org/apache/http/protocol/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/tests/src/index.html
-http://developer.android.com/guide/samples/LunarLander/tests/AndroidManifest.html
-http://developer.android.com/guide/samples/NotePad/tests/src/index.html
-http://developer.android.com/guide/samples/NotePad/tests/AndroidManifest.html
-http://developer.android.com/reference/java/lang/annotation/Retention.html
-http://developer.android.com/reference/java/util/prefs/package-descr.html
-http://developer.android.com/reference/android/view/animation/package-descr.html
-http://developer.android.com/reference/java/nio/charset/spi/package-descr.html
-http://developer.android.com/reference/javax/security/auth/x500/package-descr.html
-http://developer.android.com/reference/org/apache/http/conn/package-descr.html
-http://developer.android.com/reference/java/util/package-descr.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/index.html
-http://developer.android.com/guide/samples/NotePad/src/com/google/index.html
-http://developer.android.com/reference/android/telephony/gsm/package-descr.html
-http://developer.android.com/reference/android/sax/ElementListener.html
-http://developer.android.com/reference/android/sax/EndElementListener.html
-http://developer.android.com/reference/android/sax/EndTextElementListener.html
+http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
+http://developer.android.com/reference/java/sql/Savepoint.html
+http://developer.android.com/reference/javax/crypto/SecretKey.html
+http://developer.android.com/reference/android/hardware/SensorEventListener.html
+http://developer.android.com/reference/android/hardware/SensorListener.html
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
+http://developer.android.com/reference/org/apache/http/cookie/SM.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
+http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
+http://developer.android.com/reference/android/telephony/SmsMessage.html
+http://developer.android.com/reference/android/telephony/SmsMessage.MessageClass.html
+http://developer.android.com/reference/android/telephony/SmsMessage.SubmitPdu.html
+http://developer.android.com/reference/java/net/SocketImplFactory.html
+http://developer.android.com/reference/java/net/SocketOptions.html
+http://developer.android.com/reference/java/sql/SQLData.html
+http://developer.android.com/reference/java/sql/SQLInput.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html
+http://developer.android.com/reference/java/sql/SQLOutput.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
http://developer.android.com/reference/android/sax/StartElementListener.html
-http://developer.android.com/reference/android/sax/TextElementListener.html
-http://developer.android.com/reference/android/sax/package-descr.html
-http://developer.android.com/reference/index.html
-http://developer.android.com/reference/org/apache/http/client/methods/package-descr.html
-http://developer.android.com/reference/android/database/sqlite/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
-http://developer.android.com/guide/samples/LunarLander/res/values/strings.html
-http://developer.android.com/reference/android/telephony/package-descr.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/index.html
-http://developer.android.com/reference/org/apache/http/package-descr.html
-http://developer.android.com/reference/java/util/regex/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable-port/earthrise.html
-http://developer.android.com/reference/android/location/package-descr.html
+http://developer.android.com/reference/java/sql/Statement.html
+http://developer.android.com/reference/java/sql/Struct.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
+http://developer.android.com/reference/java/lang/SuppressWarnings.html
http://developer.android.com/reference/java/lang/annotation/Target.html
+http://developer.android.com/reference/junit/framework/Test.html
+http://developer.android.com/reference/junit/framework/TestListener.html
+http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
+http://developer.android.com/reference/dalvik/annotation/TestTarget.html
+http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
+http://developer.android.com/reference/org/w3c/dom/Text.html
+http://developer.android.com/reference/android/sax/TextElementListener.html
+http://developer.android.com/reference/android/test/UiThreadTest.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
+http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
+http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
+http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
+http://developer.android.com/reference/android/view/ViewDebug.FlagToString.html
+http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
+http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
+http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
+http://developer.android.com/reference/org/apache/http/cookie/params/package-descr.html
+http://developer.android.com/reference/java/util/concurrent/locks/package-descr.html
+http://developer.android.com/reference/org/apache/http/conn/routing/package-descr.html
+http://developer.android.com/guide/samples/index.html
http://developer.android.com/guide/tutorials/notepad/notepad-ex1.html
http://developer.android.com/guide/tutorials/notepad/notepad-ex2.html
http://developer.android.com/guide/tutorials/notepad/notepad-ex3.html
http://developer.android.com/guide/tutorials/notepad/notepad-extra-credit.html
-http://developer.android.com/reference/java/math/package-descr.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/app_lunar_lander.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_crashed.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_firing.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_plain.html
-http://developer.android.com/reference/android/test/UiThreadTest.html
-http://developer.android.com/guide/topics/ui/notifiers/notifications.html
-http://developer.android.com/guide/samples/NotePad/tests/src/com/index.html
-http://developer.android.com/reference/java/util/jar/package-descr.html
-http://developer.android.com/reference/org/apache/http/io/package-descr.html
-http://developer.android.com/reference/org/xml/sax/helpers/package-descr.html
-http://developer.android.com/reference/android/database/package-descr.html
-http://developer.android.com/reference/javax/sql/package-descr.html
-http://developer.android.com/reference/java/nio/package-descr.html
-http://developer.android.com/sdk/OLD_RELEASENOTES.html
-http://developer.android.com/sdk/download.html?v=android-sdk-windows-0.9_beta.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-mac_x86-0.9_beta.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-0.9_beta.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc15_windows.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc15_mac-x86.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc15_linux-x86.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc14_windows.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc14_mac-x86.zip
-http://developer.android.com/sdk/download.html?v=android-sdk_m5-rc14_linux-x86.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_windows_m3-rc37a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_darwin_m3-rc37a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_linux_m3-rc37a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_windows_m3-rc22a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_darwin_m3-rc22a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_linux_m3-rc22a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_windows_m3-rc20a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_darwin_m3-rc20a.zip
-http://developer.android.com/sdk/download.html?v=android_sdk_linux_m3-rc20a.zip
-http://developer.android.com/reference/javax/crypto/spec/package-descr.html
-http://developer.android.com/reference/java/nio/channels/spi/package-descr.html
-http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
-http://developer.android.com/reference/dalvik/bytecode/package-descr.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/package-descr.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/index.html
-http://developer.android.com/guide/samples/ApiDemos/assets/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/index.html
-http://developer.android.com/guide/samples/ApiDemos/AndroidManifest.html
-http://developer.android.com/reference/org/xml/sax/package-descr.html
-http://developer.android.com/reference/android/widget/package-descr.html
-http://developer.android.com/reference/android/test/suitebuilder/package-descr.html
-http://developer.android.com/reference/android/media/package-descr.html
-http://developer.android.com/reference/java/util/logging/package-descr.html
-http://developer.android.com/reference/java/nio/channels/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/assets/fonts/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/hello_world.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/surface_view_overlay.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html
-http://developer.android.com/reference/org/apache/http/client/utils/package-descr.html
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.java
-http://developer.android.com/guide/developing/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_view_1.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
+http://developer.android.com/guide/appendix/faq/commontasks.html
+http://developer.android.com/reference/javax/security/cert/package-descr.html
+http://developer.android.com/reference/org/xml/sax/ext/package-descr.html
+http://developer.android.com/reference/java/security/package-descr.html
+http://developer.android.com/guide/topics/ui/notifiers/toasts.html
+http://developer.android.com/guide/appendix/faq/index.html
+http://developer.android.com/reference/org/apache/http/message/package-descr.html
+http://developer.android.com/resources/samples/ContactManager/res/index.html
+http://developer.android.com/resources/samples/ContactManager/src/index.html
+http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html
+http://developer.android.com/guide/developing/tools/adt.html
+http://developer.android.com/resources/samples/BluetoothChat/res/index.html
+http://developer.android.com/resources/samples/BluetoothChat/src/index.html
+http://developer.android.com/resources/samples/BluetoothChat/AndroidManifest.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.java
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.html
+http://developer.android.com/reference/android/content/pm/package-descr.html
+http://developer.android.com/reference/org/apache/http/auth/params/package-descr.html
+http://developer.android.com/reference/org/apache/http/cookie/package-descr.html
+http://developer.android.com/reference/java/net/package-descr.html
+http://developer.android.com/reference/java/util/prefs/package-descr.html
+http://developer.android.com/reference/android/sax/package-descr.html
+http://developer.android.com/resources/samples/LunarLander/res/index.html
+http://developer.android.com/resources/samples/LunarLander/src/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/index.html
+http://developer.android.com/resources/samples/LunarLander/AndroidManifest.html
+http://developer.android.com/reference/java/io/package-descr.html
+http://developer.android.com/reference/javax/xml/parsers/package-descr.html
+http://developer.android.com/reference/java/nio/channels/package-descr.html
+http://developer.android.com/resources/tutorials/views/hello-datepicker.html
+http://developer.android.com/resources/tutorials/views/hello-timepicker.html
+http://developer.android.com/reference/java/util/concurrent/package-descr.html
+http://developer.android.com/reference/org/apache/http/client/utils/package-descr.html
+http://developer.android.com/reference/android/database/sqlite/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/AndroidManifest.html
+http://developer.android.com/resources/samples/LunarLander/src/com/index.html
+http://developer.android.com/reference/junit/framework/package-descr.html
+http://developer.android.com/reference/java/util/concurrent/atomic/package-descr.html
+http://developer.android.com/reference/org/xml/sax/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/index.html
+http://developer.android.com/reference/java/lang/package-descr.html
+http://developer.android.com/reference/android/bluetooth/package-descr.html
+http://developer.android.com/guide/appendix/faq/framework.html
+http://developer.android.com/guide/appendix/faq/troubleshooting.html
+http://developer.android.com/guide/appendix/faq/licensingandoss.html
+http://developer.android.com/guide/appendix/faq/security.html
+http://developer.android.com/resources/samples/ApiDemos/assets/fonts/index.html
+http://developer.android.com/reference/android/telephony/package-descr.html
+http://developer.android.com/reference/android/hardware/package-descr.html
+http://developer.android.com/reference/android/package-descr.html
+http://developer.android.com/reference/java/sql/package-descr.html
+http://developer.android.com/reference/org/apache/http/impl/io/package-descr.html
+http://developer.android.com/resources/tutorials/views/hello-spinner.html
+http://developer.android.com/resources/tutorials/views/hello-listview.html
+http://developer.android.com/resources/tutorials/views/hello-gridview.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-nodpi/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/raw/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large-long/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large-notlong/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-long/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal-long/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal-notlong/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-notlong/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small-long/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small-notlong/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/index.html
+http://developer.android.com/reference/android/view/inputmethod/package-descr.html
+http://developer.android.com/resources/samples/NotePad/res/layout/note_editor.html
+http://developer.android.com/resources/samples/NotePad/res/layout/noteslist_item.html
+http://developer.android.com/resources/samples/NotePad/res/layout/title_editor.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/alert_dialog_icon.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/app_sample_code.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/arrow_down_float.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/arrow_up_float.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/btn_check_off.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/btn_check_on.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/btn_circle_normal.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/btn_default_normal.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/button.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/ic_contact_picture.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/ic_popup_reminder.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/icon48x48_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/progress_circular_background.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/progress_particle.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/robot.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/scrollbar_state2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/star_big_on.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/stat_happy.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/stat_neutral.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/stat_sad.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-mdpi/stat_sample.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html
+http://developer.android.com/resources/samples/Snake/res/index.html
+http://developer.android.com/resources/samples/Snake/src/index.html
+http://developer.android.com/resources/samples/Snake/tests/index.html
+http://developer.android.com/resources/samples/Snake/AndroidManifest.html
+http://developer.android.com/sdk/api_diff/6/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/changes-summary.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/logo120dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/npatch120dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/reslogo120dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/smlnpatch120dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-ldpi/stylogo120dpi.html
+http://developer.android.com/sdk/api_diff/3/changes.html
+http://developer.android.com/sdk/android-1.5-highlights.html
+http://developer.android.com/sdk/api_diff/6/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/6/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/6/changes/pkg_android.accounts.html
+http://developer.android.com/sdk/api_diff/6/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/6/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/4/changes.html
+http://developer.android.com/sdk/android-1.6-highlights.html
+http://developer.android.com/reference/android/content/res/package-descr.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-hdpi-v6/app_notes.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-hdpi-v6/live_folder_notes.html
+http://developer.android.com/reference/android/test/mock/package-descr.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/AndroidManifest.html
+http://developer.android.com/sdk/api_diff/4/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/changes-summary.html
+http://developer.android.com/resources/samples/NotePad/tests/src/index.html
+http://developer.android.com/resources/samples/NotePad/tests/AndroidManifest.html
+http://developer.android.com/reference/java/nio/charset/package-descr.html
+http://developer.android.com/reference/javax/crypto/interfaces/package-descr.html
+http://developer.android.com/reference/org/apache/http/conn/params/package-descr.html
+http://developer.android.com/resources/samples/MultiResolution/res/index.html
+http://developer.android.com/resources/samples/MultiResolution/src/index.html
+http://developer.android.com/resources/samples/MultiResolution/AndroidManifest.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small-long/strings.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_all.html
+http://developer.android.com/reference/android/view/package-descr.html
+http://developer.android.com/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/reference/android/database/package-descr.html
+http://developer.android.com/sdk/adt_download.html
+http://developer.android.com/reference/javax/security/auth/x500/package-descr.html
+http://developer.android.com/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/reference/android/net/package-descr.html
+http://developer.android.com/reference/org/apache/http/client/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.6_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.6_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.6_r1.tgz
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.5_r3.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r3.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r3.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.1_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.1_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.1_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.0_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.5_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r2.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.5_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-1.0_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r1.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r1.zip
+http://developer.android.com/sdk/OLD_RELEASENOTES.html
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-windows-0.9_beta.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-mac_x86-0.9_beta.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk-linux_x86-0.9_beta.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc15_windows.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc15_mac-x86.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc15_linux-x86.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc14_windows.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc14_mac-x86.zip
+http://developer.android.com/sdk/download.html?v=archives/android-sdk_m5-rc14_linux-x86.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_windows_m3-rc37a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_darwin_m3-rc37a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_linux_m3-rc37a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_windows_m3-rc22a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_darwin_m3-rc22a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_linux_m3-rc22a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_windows_m3-rc20a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_darwin_m3-rc20a.zip
+http://developer.android.com/sdk/download.html?v=archives/android_sdk_linux_m3-rc20a.zip
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/animated_gif.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/balloons.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/beach.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/black_box.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/black_opaque_box.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/box.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/circular_progress.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/filled_box.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/frog.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_background_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/gallery_photo_8.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/icon48x48_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/line.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/logo160dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/npatch160dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo3.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo4.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo5.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/photo6.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/picture_frame.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/reslogo160dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_0.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_0.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/sample_thumb_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/scrollbar_vertical_thumb.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/scrollbar_vertical_track.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/shape_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/shape_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/shape_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/shape_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/shape_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/smlnpatch160dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable/stylogo160dpi.html
+http://developer.android.com/resources/samples/JetBoy/JETBOY_content/index.html
+http://developer.android.com/resources/samples/JetBoy/res/index.html
+http://developer.android.com/resources/samples/JetBoy/src/index.html
+http://developer.android.com/resources/samples/JetBoy/AndroidManifest.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ComponentName.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.VelocityTracker.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Typeface.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabWidget.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Canvas.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.NinePatch.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/4/changes/android.location.Address.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.PopupWindow.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
+http://developer.android.com/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
+http://developer.android.com/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
+http://developer.android.com/resources/samples/Home/res/index.html
+http://developer.android.com/resources/samples/Home/src/index.html
+http://developer.android.com/resources/samples/Home/AndroidManifest.html
+http://developer.android.com/sdk/api_diff/4/changes/jdiff_statistics.html
+http://developer.android.com/reference/java/security/acl/package-descr.html
+http://developer.android.com/reference/javax/crypto/spec/package-descr.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/index.html
+http://developer.android.com/reference/android/telephony/cdma/package-descr.html
+http://developer.android.com/reference/android/content/package-descr.html
+http://developer.android.com/reference/android/app/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-notlong/strings.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-long/strings.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/layout/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values-land/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/xml/index.html
+http://developer.android.com/reference/java/util/package-descr.html
http://developer.android.com/reference/java/text/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
+http://developer.android.com/resources/samples/BluetoothChat/src/com/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/advanced_preferences.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/appwidget_provider.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/default_values.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/preference_dependencies.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/preferences.html
+http://developer.android.com/resources/samples/ApiDemos/res/xml/searchable.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.VERSION.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.Config.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
+http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission_group.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.anim.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/4/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.ToneGenerator.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.TypedValue.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.net.wifi.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.widget.html
+http://developer.android.com/reference/org/apache/http/protocol/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large-long/strings.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values-land/dimens.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large/strings.html
+http://developer.android.com/reference/java/security/interfaces/package-descr.html
+http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html
+http://developer.android.com/resources/tutorials/notepad/notepad-ex2.html
+http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html
+http://developer.android.com/resources/tutorials/notepad/notepad-extra-credit.html
+http://developer.android.com/reference/android/text/style/package-descr.html
+http://developer.android.com/resources/samples/BluetoothChat/res/drawable/index.html
+http://developer.android.com/resources/samples/BluetoothChat/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/index.html
+http://developer.android.com/resources/samples/BluetoothChat/res/menu/index.html
+http://developer.android.com/resources/samples/BluetoothChat/res/values/index.html
+http://developer.android.com/resources/tutorials/views/hello-linearlayout.html
+http://developer.android.com/resources/tutorials/views/hello-tablelayout.html
+http://developer.android.com/resources/tutorials/views/hello-relativelayout.html
+http://developer.android.com/reference/dalvik/system/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/arrays.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/attrs.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/colors.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/ids.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/strings.html
+http://developer.android.com/resources/samples/ApiDemos/res/values/styles.html
+http://developer.android.com/reference/javax/net/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/index.html
+http://developer.android.com/sdk/api_diff/6/changes/android.R.attr.html
+http://developer.android.com/reference/android/provider/package-descr.html
+http://developer.android.com/sdk/terms_body.html
+http://developer.android.com/reference/java/util/jar/package-descr.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/AndroidManifest.html
+http://developer.android.com/resources/samples/BluetoothChat/res/menu/option_menu.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values/colors.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values/dimens.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/values/strings.html
+http://developer.android.com/resources/tutorials/views/hello-formstuff.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-ldpi/index.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/ContactManager/res/layout/index.html
+http://developer.android.com/resources/samples/ContactManager/res/values/index.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-hdpi/app_notes.html
+http://developer.android.com/reference/dalvik/bytecode/package-descr.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/custom_title.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/device_list.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/device_name.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/main.html
+http://developer.android.com/resources/samples/BluetoothChat/res/layout/message.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-ldpi-v6/app_notes.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-ldpi-v6/live_folder_notes.html
+http://developer.android.com/guide/tutorials/views/index.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
+http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/category_order.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/checkable.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/disabled.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/groups.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/order.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/shortcuts.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/submenu.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/title_icon.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/title_only.html
+http://developer.android.com/resources/samples/ApiDemos/res/menu/visible.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/activity_animation.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/alarm_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/alarm_service.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/alert_dialog.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/alert_dialog_text_entry.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/animation_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/animation_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/animation_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/animations_main_screen.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/appwidget_configure.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/appwidget_provider.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/autocomplete_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_nested_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_nested_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/baseline_nested_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/buttons_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/chronometer.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/contacts_filter.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/controls_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_dialog_activity.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_title.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_title_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/date_widgets_example_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/date_widgets_example_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/density_image_views.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/density_styled_image_views.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/dialog_activity.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/focus_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/focus_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/focus_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/foreground_service_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/forward_target.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/forwarding.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/gallery_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/gallery_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/google_login.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/grid_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/grid_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/hello_world.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/image_button_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/image_switcher_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/image_view_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/incoming_message.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/incoming_message_info.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/incoming_message_panel.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/incoming_message_view.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/intents.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/launcher_shortcuts.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animation_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_10.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_8.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/linear_layout_9.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/link.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_12.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_13.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_8.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_item_checkbox.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_item_icon_text.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/list_position.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/local_sample.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/local_service_binding.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/local_service_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/log_text_box_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/mapview.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/marquee.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/mediaplayer_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/mediaplayer_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/morse_code.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/notify_with_text.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/notifying_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/preference_widget_mypreference.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/progressbar_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/progressbar_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/progressbar_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/progressbar_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/quick_contacts.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/radio_group_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/ratingbar_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/read_asset.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/receive_result.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/redirect_enter.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/redirect_getter.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/redirect_main.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/relative_layout_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/relative_layout_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/remote_service_binding.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/remote_service_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/reorder_four.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/reorder_on_launch.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/reorder_three.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/reorder_two.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/resources.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/save_restore_state.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/scroll_view_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/scroll_view_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/scrollbar1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/scrollbar2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/scrollbar3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/search_invoke.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/search_query_results.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/seekbar_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/select_dialog.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/send_result.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/service_start_arguments_controller.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/shape_drawable_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/spinner_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/status_bar_balloon.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/status_bar_notifications.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/styled_text.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/surface_view_overlay.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_10.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_11.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_12.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_3.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_4.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_5.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_6.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_8.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/table_layout_9.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/tabs1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/text_switcher_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/text_to_speech.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/translucent_background.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/videoview.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/visibility_1.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/voice_recognition.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/wallpaper_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/webview_1.html
+http://developer.android.com/sdk/api_diff/5/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/changes-summary.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/layout/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/values/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/xml/index.html
+http://developer.android.com/reference/android/os/package-descr.html
+http://developer.android.com/reference/javax/xml/package-descr.html
+http://developer.android.com/resources/samples/Snake/tests/src/index.html
+http://developer.android.com/resources/samples/Snake/tests/AndroidManifest.html
+http://developer.android.com/reference/org/apache/http/client/params/package-descr.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/app_icon.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/star_logo.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/widget_bg.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/widget_bg_normal.9.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/widget_bg_pressed.9.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/drawable/widget_bg_selected.9.html
+http://developer.android.com/sdk/api_diff/6/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_all.html
+http://developer.android.com/resources/samples/NotePad/src/com/index.html
+http://developer.android.com/resources/samples/LunarLander/src/com/example/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small/strings.html
+http://developer.android.com/reference/java/math/package-descr.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/layout/input.html
+http://developer.android.com/resources/samples/BluetoothChat/res/drawable-hdpi/app_icon.html
+http://developer.android.com/reference/javax/crypto/package-descr.html
+http://developer.android.com/reference/android/gesture/package-descr.html
+http://developer.android.com/sdk/api_diff/6/changes/classes_index_changes.html
+http://developer.android.com/reference/org/apache/http/params/package-descr.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_changes.html
+http://developer.android.com/reference/android/telephony/gsm/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal/strings.html
+http://developer.android.com/reference/javax/security/auth/login/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/index.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/package-descr.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-hdpi/icon.html
+http://developer.android.com/guide/tutorials/views/hello-linearlayout.html
+http://developer.android.com/guide/tutorials/views/hello-relativelayout.html
+http://developer.android.com/guide/tutorials/views/hello-tablelayout.html
+http://developer.android.com/guide/tutorials/views/hello-datepicker.html
+http://developer.android.com/guide/tutorials/views/hello-timepicker.html
+http://developer.android.com/guide/tutorials/views/hello-formstuff.html
+http://developer.android.com/guide/tutorials/views/hello-spinner.html
http://developer.android.com/guide/tutorials/views/hello-autocomplete.html
+http://developer.android.com/guide/tutorials/views/hello-listview.html
+http://developer.android.com/guide/tutorials/views/hello-gridview.html
http://developer.android.com/guide/tutorials/views/hello-gallery.html
http://developer.android.com/guide/tutorials/views/hello-tabwidget.html
http://developer.android.com/guide/tutorials/views/hello-mapview.html
http://developer.android.com/guide/tutorials/views/hello-webview.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
-http://developer.android.com/guide/samples/ApiDemos/res/anim/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/raw/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/index.html
-http://developer.android.com/guide/topics/ui/notifiers/toasts.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/index.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_all.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/index.html
+http://developer.android.com/resources/samples/BluetoothChat/res/drawable/app_icon.html
+http://developer.android.com/reference/org/apache/http/impl/entity/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/index.html
+http://developer.android.com/resources/samples/Snake/res/drawable/index.html
+http://developer.android.com/resources/samples/Snake/res/layout/index.html
+http://developer.android.com/resources/samples/Snake/res/values/index.html
+http://developer.android.com/reference/android/location/package-descr.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_changes.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_delete.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_done.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_return.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_search.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_shift.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-hdpi/sym_keyboard_space.html
+http://developer.android.com/resources/samples/MultiResolution/src/com/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/xml/widget_word.html
+http://developer.android.com/resources/tutorials/views/hello-autocomplete.html
+http://developer.android.com/resources/tutorials/views/hello-gallery.html
+http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
+http://developer.android.com/resources/tutorials/views/hello-mapview.html
+http://developer.android.com/resources/tutorials/views/hello-webview.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
+http://developer.android.com/resources/samples/JetBoy/src/com/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/values/strings.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/values/styles.html
+http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_changes.html
+http://developer.android.com/resources/samples/LunarLander/src/com/example/android/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/com/index.html
+http://developer.android.com/sdk/api_diff/6/changes/packages_index_changes.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/alert_dialog_icon.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/app_sample_code.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/arrow_down_float.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/arrow_up_float.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/btn_check_off.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/btn_check_on.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/btn_circle_normal.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/btn_default_normal.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/button.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/ic_contact_picture.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/ic_popup_reminder.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/icon48x48_2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/logo240dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/npatch240dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/progress_circular_background.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/progress_particle.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/reslogo240dpi.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/robot.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/scrollbar_state2.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/smlnpatch240dpi.9.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/star_big_on.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/stat_happy.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/stat_neutral.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/stat_sad.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/stat_sample.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-hdpi/stylogo240dpi.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/xml/method.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/xml/qwerty.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/xml/symbols.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/xml/symbols_shift.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-mdpi/icon.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/app/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/os/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/view/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/index.html
+http://developer.android.com/sdk/api_diff/6/changes/methods_index_changes.html
+http://developer.android.com/reference/android/text/method/package-descr.html
+http://developer.android.com/resources/samples/ContactManager/src/com/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/com/example/index.html
+http://developer.android.com/resources/samples/ContactManager/res/layout/account_entry.html
+http://developer.android.com/resources/samples/ContactManager/res/layout/contact_adder.html
+http://developer.android.com/resources/samples/ContactManager/res/layout/contact_entry.html
+http://developer.android.com/resources/samples/ContactManager/res/layout/contact_manager.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-small-notlong/strings.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/layout/widget_message.html
+http://developer.android.com/resources/samples/WiktionarySimple/res/layout/widget_word.html
+http://developer.android.com/resources/samples/BluetoothChat/res/values/strings.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/cycle_7.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/fade.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/hold.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/hyperspace_in.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/hyperspace_out.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_animation_row_left_slide.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_animation_row_right_slide.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_animation_table.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_bottom_to_top_slide.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_grid_fade.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_grid_inverse_fade.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_random_fade.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/layout_wave_scale.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/push_left_in.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/push_left_out.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/push_up_in.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/push_up_out.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/shake.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/slide_left.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/slide_right.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/slide_top_to_bottom.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/wave_scale.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/zoom_enter.html
+http://developer.android.com/resources/samples/ApiDemos/res/anim/zoom_exit.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/index.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_delete.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_done.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_return.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_search.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_shift.html
+http://developer.android.com/resources/samples/SoftKeyboard/res/drawable-mdpi/sym_keyboard_space.html
+http://developer.android.com/sdk/api_diff/5/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.format.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_dalvik.system.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
+http://developer.android.com/resources/samples/ContactManager/src/com/example/index.html
+http://developer.android.com/reference/javax/net/ssl/package-descr.html
+http://developer.android.com/reference/android/media/package-descr.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi/app_notes.html
+http://developer.android.com/resources/samples/NotePad/res/drawable-mdpi/live_folder_notes.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.VideoView.html
+http://developer.android.com/reference/org/apache/http/conn/package-descr.html
+http://developer.android.com/resources/samples/Home/res/anim/index.html
+http://developer.android.com/resources/samples/Home/res/color/index.html
+http://developer.android.com/resources/samples/Home/res/drawable/index.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/index.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/index.html
+http://developer.android.com/resources/samples/Home/res/layout/index.html
+http://developer.android.com/resources/samples/Home/res/layout-land/index.html
+http://developer.android.com/resources/samples/Home/res/layout-port/index.html
+http://developer.android.com/resources/samples/Home/res/values/index.html
+http://developer.android.com/resources/samples/Home/res/values-cs/index.html
+http://developer.android.com/resources/samples/Home/res/values-de-rDE/index.html
+http://developer.android.com/resources/samples/Home/res/values-es-rUS/index.html
+http://developer.android.com/resources/samples/Home/res/values-land/index.html
+http://developer.android.com/resources/samples/Home/res/values-nl-rNL/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal-notlong/strings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/5/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginList.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.NotificationManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.Plugin.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.format.DateUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.format.Formatter.html
+http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginData.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
+http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.CursorWindow.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
+http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.LauncherActivity.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Service.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.HandlerThread.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.IntentService.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.ToneGenerator.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioFormat.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.TextPaint.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.BatteryManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Notification.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.InputType.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
+http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-large-notlong/strings.html
+http://developer.android.com/reference/javax/sql/package-descr.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/index.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/index.html
http://developer.android.com/sdk/api_diff/3/changes/packages_index_all.html
http://developer.android.com/sdk/api_diff/3/changes/classes_index_all.html
http://developer.android.com/sdk/api_diff/3/changes/constructors_index_all.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_all.html
http://developer.android.com/sdk/api_diff/3/changes/fields_index_all.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
-http://developer.android.com/guide/samples/LunarLander/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
-http://developer.android.com/guide/samples/NotePad/res/drawable/index.html
-http://developer.android.com/guide/samples/NotePad/res/layout/index.html
-http://developer.android.com/guide/samples/NotePad/res/values/index.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
-http://developer.android.com/reference/android/view/inputmethod/package-descr.html
-http://developer.android.com/sdk/1.0_r1/requirements.html
-http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.0_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-mac_x86-1.0_r1.zip
-http://developer.android.com/sdk/download.html?v=android-sdk-linux_x86-1.0_r1.zip
-http://developer.android.com/reference/java/util/concurrent/atomic/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_service.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog_text_entry.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animations_main_screen.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/appwidget_configure.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/appwidget_provider.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/buttons_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/chronometer.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/contacts_filter.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/controls_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_dialog_activity.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/dialog_activity.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/forward_target.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/forwarding.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/google_login.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_button_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_switcher_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_view_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_info.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_panel.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_view.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/intents.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/launcher_shortcuts.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_10.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_9.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/link.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_12.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_13.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_checkbox.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_icon_text.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_position.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_sample.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_binding.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/log_text_box_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mapview.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/marquee.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/morse_code.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/notify_with_text.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/notifying_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/preference_widget_mypreference.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/radio_group_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/ratingbar_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/read_asset.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/receive_result.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_enter.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_getter.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_main.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_binding.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/reorder_four.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/reorder_on_launch.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/reorder_three.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/reorder_two.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/resources.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/save_restore_state.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/search_invoke.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/search_query_results.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/seekbar_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/select_dialog.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/send_result.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/service_start_arguments_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/shape_drawable_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/spinner_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_balloon.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_notifications.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/styled_text.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_10.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_11.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_12.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_9.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/tabs1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/text_switcher_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/translucent_background.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/videoview.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/visibility_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/voice_recognition.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/webview_1.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.java
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestSuiteBuilder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.Date.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.reflect.Proxy.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.reflect.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/3/changes/java.net.Socket.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.String.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.java
-http://developer.android.com/reference/android/text/package-descr.html
-http://developer.android.com/guide/samples/NotePad/src/com/google/provider/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/index.html
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/index.html
-http://developer.android.com/reference/org/apache/http/conn/routing/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.java
-http://developer.android.com/reference/java/lang/Deprecated.html
-http://developer.android.com/reference/java/lang/annotation/Documented.html
-http://developer.android.com/reference/android/test/FlakyTest.html
-http://developer.android.com/reference/java/lang/annotation/Inherited.html
-http://developer.android.com/reference/java/lang/Override.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
-http://developer.android.com/reference/java/lang/SuppressWarnings.html
-http://developer.android.com/reference/dalvik/annotation/TestTarget.html
-http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
-http://developer.android.com/guide/samples/NotePad/res/values/strings.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
-http://developer.android.com/guide/samples/ApiDemos/res/anim/cycle_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_in.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_out.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_left_slide.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_right_slide.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_table.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_bottom_to_top_slide.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_inverse_fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_random_fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_wave_scale.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_in.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_out.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_in.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_out.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/shake.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_left.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_right.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_top_to_bottom.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/wave_scale.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
-http://developer.android.com/guide/samples/ApiDemos/res/values/arrays.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/attrs.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/colors.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/ids.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/strings.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/styles.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
+http://developer.android.com/resources/samples/Snake/src/com/index.html
+http://developer.android.com/reference/android/appwidget/package-descr.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/index.html
+http://developer.android.com/resources/samples/Home/res/anim/fade_in.html
+http://developer.android.com/resources/samples/Home/res/anim/fade_out.html
+http://developer.android.com/resources/samples/Home/res/anim/grid_entry.html
+http://developer.android.com/resources/samples/Home/res/anim/grid_exit.html
+http://developer.android.com/resources/samples/Home/res/anim/hide_applications.html
+http://developer.android.com/resources/samples/Home/res/anim/show_applications.html
http://developer.android.com/reference/org/w3c/dom/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.java
-http://developer.android.com/guide/samples/ApiDemos/res/menu/category_order.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/checkable.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/disabled.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/groups.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/order.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/shortcuts.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/submenu.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/title_icon.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/title_only.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/visible.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.java
+http://developer.android.com/reference/org/apache/http/package-descr.html
+http://developer.android.com/resources/samples/MultiResolution/src/com/example/index.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.html
@@ -3450,6 +3931,7 @@
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation3.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.html
@@ -3460,6 +3942,7 @@
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.html
@@ -3481,428 +3964,826 @@
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.html
http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.java
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/alert_dialog_icon.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/animated_gif.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/app_sample_code.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_down_float.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_up_float.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/balloons.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/beach.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_opaque_box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/button.9.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/circular_progress.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/filled_box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/frog.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_background_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/ic_popup_reminder.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/line.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/picture_frame.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_circular_background.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_particle.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/robot.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_0.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_0.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_state2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_thumb.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_track.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/star_big_on.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_happy.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_neutral.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sad.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sample.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List11.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List9.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
-http://developer.android.com/reference/org/apache/http/cookie/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List13.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List7.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.java
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.java
-http://developer.android.com/reference/android/os/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List12.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List5.java
-http://developer.android.com/guide/samples/NotePad/src/com/google/provider/NotePad.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Intents.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderFour.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderOnLaunch.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderThree.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderTwo.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.java
-http://developer.android.com/reference/android/app/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderOnLaunch.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List8.java
+http://developer.android.com/resources/samples/Home/res/drawable/all_applications.html
+http://developer.android.com/resources/samples/Home/res/drawable/all_applications_background.html
+http://developer.android.com/resources/samples/Home/res/drawable/all_applications_button_background.html
+http://developer.android.com/resources/samples/Home/res/drawable/favorite_background.html
+http://developer.android.com/resources/samples/Home/res/drawable/grid_selector.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/all_applications_label_background.9.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/application_background.9.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/focused_application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/hide_all_applications.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/ic_launcher_allhide.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/ic_launcher_allshow.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/ic_launcher_home.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/pressed_application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-hdpi/show_all_applications.html
+http://developer.android.com/reference/android/inputmethodservice/package-descr.html
+http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMStack.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.Zygote.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
+http://developer.android.com/resources/samples/Home/res/values-de-rDE/strings.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/index.html
+http://developer.android.com/reference/android/opengl/package-descr.html
+http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-nodpi/logonodpi120.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-nodpi/logonodpi160.html
+http://developer.android.com/resources/samples/ApiDemos/res/drawable-nodpi/logonodpi240.html
+http://developer.android.com/resources/samples/Home/res/values-cs/strings.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_changes.html
+http://developer.android.com/reference/java/nio/charset/spi/package-descr.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/index.html
+http://developer.android.com/reference/junit/runner/package-descr.html
+http://developer.android.com/reference/android/test/suitebuilder/package-descr.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/index.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
+http://developer.android.com/resources/samples/Home/res/layout-land/home.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List5.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List8.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Grid1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Grid2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Animation1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Animation2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Controls1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Controls2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Focus1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Focus2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Focus3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Animation3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List10.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List11.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List12.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List13.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List9.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/WebView1.html
+http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
+http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/index.html
+http://developer.android.com/resources/samples/NotePad/src/com/google/index.html
+http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
+http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
+http://developer.android.com/reference/java/nio/package-descr.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderThree.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.java
-http://developer.android.com/guide/samples/NotePad/src/com/google/provider/NotePad.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List10.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.java
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.html
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderTwo.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Intents.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.java
-http://developer.android.com/guide/samples/NotePad/res/layout/note_editor.html
-http://developer.android.com/guide/samples/NotePad/res/layout/noteslist_item.html
-http://developer.android.com/guide/samples/NotePad/res/layout/title_editor.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.java
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
+http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
+http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
+http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
+http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
+http://developer.android.com/resources/samples/Snake/res/layout/snake_layout.html
+http://developer.android.com/resources/samples/MultiResolution/src/com/example/android/index.html
+http://developer.android.com/reference/javax/security/auth/callback/package-descr.html
+http://developer.android.com/resources/samples/Snake/src/com/example/index.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_changes.html
+http://developer.android.com/resources/samples/Wiktionary/res/anim/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/layout/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/menu/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/values/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/xml/index.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
+http://developer.android.com/reference/org/apache/http/util/package-descr.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable/index.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable-land/index.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable-port/index.html
+http://developer.android.com/resources/samples/LunarLander/res/layout/index.html
+http://developer.android.com/resources/samples/LunarLander/res/values/index.html
+http://developer.android.com/resources/samples/MultiResolution/src/com/example/android/multires/index.html
+http://developer.android.com/resources/samples/Home/res/values/attrs.html
+http://developer.android.com/resources/samples/Home/res/values/strings.html
+http://developer.android.com/resources/samples/Home/res/values/styles.html
+http://developer.android.com/resources/samples/Wiktionary/res/layout/about.html
+http://developer.android.com/resources/samples/Wiktionary/res/layout/lookup.html
+http://developer.android.com/resources/samples/Wiktionary/res/layout/widget_message.html
+http://developer.android.com/resources/samples/Wiktionary/res/layout/widget_word.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/app_icon.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/ic_menu_shuffle.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/logo_overlay.9.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/lookup_bg.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/progress_spin.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/star_logo.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/widget_bg.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/widget_bg_normal.9.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/widget_bg_pressed.9.html
+http://developer.android.com/resources/samples/Wiktionary/res/drawable/widget_bg_selected.9.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/index.html
+http://developer.android.com/resources/samples/LunarLander/res/values/strings.html
+http://developer.android.com/resources/samples/Home/res/layout/all_applications_button.html
+http://developer.android.com/resources/samples/Home/res/layout/application.html
+http://developer.android.com/resources/samples/Home/res/layout/favorite.html
+http://developer.android.com/resources/samples/Home/res/layout/wallpaper.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable-port/earthrise.html
+http://developer.android.com/resources/samples/Snake/res/drawable/greenstar.html
+http://developer.android.com/resources/samples/Snake/res/drawable/redstar.html
+http://developer.android.com/resources/samples/Snake/res/drawable/yellowstar.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/index.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/index.html
+http://developer.android.com/resources/samples/JetBoy/res/layout/index.html
+http://developer.android.com/resources/samples/JetBoy/res/raw/index.html
+http://developer.android.com/resources/samples/JetBoy/res/values/index.html
+http://developer.android.com/resources/samples/ContactManager/res/drawable-ldpi/icon.html
+http://developer.android.com/resources/samples/LunarLander/res/layout/lunar_layout.html
+http://developer.android.com/resources/samples/Home/res/values-es-rUS/strings.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/wiktionary/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/com/example/android/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/menu/lookup.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.html
+http://developer.android.com/reference/android/preference/package-descr.html
+http://developer.android.com/resources/samples/Snake/src/com/example/android/index.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable-land/earthrise.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_android.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_android_icon.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_sunrise.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_sunrise_icon.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_sunset.html
+http://developer.android.com/resources/samples/Home/res/drawable-port/bg_sunset_icon.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/softkeyboard/index.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/all_applications_label_background.9.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/application_background.9.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/focused_application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/hide_all_applications.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/ic_launcher_allhide.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/ic_launcher_allshow.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/ic_launcher_home.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/pressed_application_background_static.html
+http://developer.android.com/resources/samples/Home/res/drawable-mdpi/show_all_applications.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/ApiDemos.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.html
+http://developer.android.com/resources/samples/Home/res/layout-port/home.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/index.html
+http://developer.android.com/resources/samples/Home/src/com/index.html
+http://developer.android.com/resources/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html
+http://developer.android.com/reference/java/lang/annotation/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/StyledText.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_changes.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorFilters.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PurgeableBitmap.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PurgeableBitmapView.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/StaticTriangleRenderer.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html
+http://developer.android.com/resources/samples/Wiktionary/res/anim/slide_in.html
+http://developer.android.com/resources/samples/Wiktionary/res/anim/slide_out.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
+http://developer.android.com/resources/samples/Home/res/color/bright_text_dark_focused.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/drawable/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/layout/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/raw/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/values/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/xml/index.html
+http://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/index.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/com/example/android/lunarlander/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.html
+http://developer.android.com/resources/samples/ContactManager/res/values/strings.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/example/index.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_android.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_android_icon.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_sunrise.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_sunrise_icon.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_sunset.html
+http://developer.android.com/resources/samples/Home/res/drawable-land/bg_sunset_icon.html
+http://developer.android.com/reference/org/apache/http/entity/package-descr.html
+http://developer.android.com/resources/samples/ApiDemos/res/values-normal-long/strings.html
+http://developer.android.com/resources/samples/MultiResolution/src/com/example/android/multires/MultiRes.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/softkeyboard/CandidateView.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/softkeyboard/LatinKeyboard.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/softkeyboard/LatinKeyboardView.html
+http://developer.android.com/resources/samples/SoftKeyboard/src/com/example/android/softkeyboard/SoftKeyboard.html
+http://developer.android.com/resources/samples/Home/src/com/example/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi-v6/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi-v6/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi-v6/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/layout/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/layout-land/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/values/index.html
+http://developer.android.com/resources/samples/JetBoy/JETBOY_content/JETBOY_Music.logic/index.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_changes.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/Link.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/text/Marquee.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/values/strings.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi/android.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi/ic_launcher.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi/image_container.9.html
+http://developer.android.com/resources/samples/Snake/tests/src/com/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-mdpi-v6/ic_launcher.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/layout/main.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/layout/word.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi-v6/ic_launcher.html
+http://developer.android.com/resources/samples/Wiktionary/res/xml/searchable.html
+http://developer.android.com/resources/samples/Wiktionary/res/xml/widget_word.html
+http://developer.android.com/resources/samples/JetBoy/res/values/strings.html
+http://developer.android.com/resources/samples/JetBoy/res/values/styles.html
+http://developer.android.com/sdk/api_diff/3/changes/methods_index_removals.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_changes.html
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/AndroidManifest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List4.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.java
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.java
-http://developer.android.com/guide/samples/NotePad/res/drawable/app_notes.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReorderFour.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.java
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List6.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/advanced_preferences.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/appwidget_provider.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/default_values.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/preference_dependencies.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/preferences.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/searchable.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.java
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/index.html
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleBroadcastReceiver.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.java
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleBroadcastReceiver.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.java
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.java
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.java
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/wiktionary/ExtendedWikiHelper.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/wiktionary/LookupActivity.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/wiktionary/SimpleWikiHelper.html
+http://developer.android.com/resources/samples/Wiktionary/src/com/example/android/wiktionary/WordWidget.html
+http://developer.android.com/resources/samples/Home/res/values-land/strings.html
+http://developer.android.com/resources/samples/Snake/res/values/attrs.html
+http://developer.android.com/resources/samples/Snake/res/values/strings.html
+http://developer.android.com/resources/samples/Snake/src/com/example/android/snake/index.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/BluetoothChat.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/BluetoothChatService.html
+http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/DeviceListActivity.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi/android.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi/ic_launcher.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi/image_container.9.html
+http://developer.android.com/resources/samples/NotePad/tests/src/com/index.html
+http://developer.android.com/resources/samples/Wiktionary/res/values/strings.html
+http://developer.android.com/resources/samples/Wiktionary/res/values/styles.html
+http://developer.android.com/resources/samples/Wiktionary/res/values/themes.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/drawable/ic_dictionary.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/index.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable/app_lunar_lander.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable/lander_crashed.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable/lander_firing.html
+http://developer.android.com/resources/samples/LunarLander/res/drawable/lander_plain.html
+http://developer.android.com/resources/samples/NotePad/src/com/google/provider/index.html
+http://developer.android.com/resources/samples/JetBoy/JETBOY_content/JETBOY_Music.logic/LgDoc/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.html
+http://developer.android.com/resources/samples/SearchableDictionary/res/xml/searchable.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi/android.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi/ic_launcher.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-hdpi/image_container.9.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi-v6/ic_launcher.html
+http://developer.android.com/resources/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/example/android/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/background.9.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/icon.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_0.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_1.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_2.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_3.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_4.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_5.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_6.html
+http://developer.android.com/resources/samples/MultiResolution/res/drawable/sample_7.html
+http://developer.android.com/resources/samples/MultiResolution/res/layout/main.html
+http://developer.android.com/resources/samples/NotePad/res/values/strings.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.html
+http://developer.android.com/resources/samples/Home/res/values-nl-rNL/strings.html
+http://developer.android.com/resources/samples/Snake/src/com/example/android/snake/Snake.html
+http://developer.android.com/resources/samples/Snake/src/com/example/android/snake/SnakeView.html
+http://developer.android.com/resources/samples/Snake/src/com/example/android/snake/TileView.html
+http://developer.android.com/resources/samples/NotePad/tests/src/com/example/index.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/index.html
+http://developer.android.com/resources/samples/MultiResolution/res/values/strings.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleBroadcastReceiver.html
+http://developer.android.com/resources/samples/MultiResolution/res/layout-land/main.html
+http://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.html
+http://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/index.html
+http://developer.android.com/resources/samples/Snake/tests/src/com/example/index.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid01.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid02.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid03.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid04.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid05.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid06.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid07.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid08.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid09.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid10.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid11.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid12.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid_explode1.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid_explode2.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid_explode3.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/asteroid_explode4.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/background_a.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/background_b.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/icon.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/int_timer.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/intbeam_1.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/intbeam_2.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/intbeam_3.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/intbeam_4.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/laser.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_1.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_2.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_3.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_4.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_hit_1.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_hit_2.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_hit_3.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/ship2_hit_4.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/title_bg_hori.html
+http://developer.android.com/resources/samples/JetBoy/res/drawable/title_hori.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/example/android/simplewiktionary/index.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/jetboy/index.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/home/index.html
+http://developer.android.com/resources/samples/NotePad/tests/src/com/example/android/index.html
+http://developer.android.com/resources/samples/NotePad/src/com/google/provider/NotePad.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/Dictionary.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/DictionaryProvider.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/WordActivity.html
+http://developer.android.com/resources/samples/JetBoy/res/layout/main.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/home/ApplicationInfo.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/home/ApplicationsStackLayout.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/home/Home.html
+http://developer.android.com/resources/samples/Home/src/com/example/android/home/Wallpaper.html
+http://developer.android.com/resources/samples/ContactManager/src/com/example/android/index.html
+http://developer.android.com/resources/samples/Snake/tests/src/com/example/android/index.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/example/android/simplewiktionary/SimpleWikiHelper.html
+http://developer.android.com/resources/samples/WiktionarySimple/src/com/example/android/simplewiktionary/WordWidget.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ForegroundServiceController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Animation.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Intents.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ReorderFour.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ReorderOnLaunch.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ReorderThree.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ReorderTwo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SendResult.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SetWallpaperActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/TextToSpeechActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/WallpaperActivity.html
+http://developer.android.com/resources/samples/ContactManager/src/com/example/android/contactmanager/index.html
+http://developer.android.com/resources/samples/Snake/tests/src/com/example/android/snake/index.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/jetboy/Asteroid.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/jetboy/Explosion.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/jetboy/JetBoy.html
+http://developer.android.com/resources/samples/JetBoy/src/com/example/android/jetboy/JetBoyView.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePad.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotesList.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotesLiveFolder.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/TitleEditor.html
+http://developer.android.com/resources/samples/ContactManager/src/com/example/android/contactmanager/ContactAdder.html
+http://developer.android.com/resources/samples/ContactManager/src/com/example/android/contactmanager/ContactManager.html
+http://developer.android.com/resources/samples/NotePad/tests/src/com/example/android/notepad/index.html
+http://developer.android.com/resources/samples/Snake/tests/src/com/example/android/snake/SnakeTest.html
+http://developer.android.com/resources/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.html
\ No newline at end of file
diff --git a/graphics/java/android/renderscript/Program.java b/graphics/java/android/renderscript/Program.java
index 88b87b0..9d70cb2 100644
--- a/graphics/java/android/renderscript/Program.java
+++ b/graphics/java/android/renderscript/Program.java
@@ -46,6 +46,27 @@
mRS.nProgramBindConstants(mID, slot, a.mID);
}
+ public void bindTexture(Allocation va, int slot)
+ throws IllegalArgumentException {
+ mRS.validate();
+ if((slot < 0) || (slot >= mTextureCount)) {
+ throw new IllegalArgumentException("Slot ID out of range.");
+ }
+
+ mRS.nProgramBindTexture(mID, slot, va.mID);
+ }
+
+ public void bindSampler(Sampler vs, int slot)
+ throws IllegalArgumentException {
+ mRS.validate();
+ if((slot < 0) || (slot >= mTextureCount)) {
+ throw new IllegalArgumentException("Slot ID out of range.");
+ }
+
+ mRS.nProgramBindSampler(mID, slot, vs.mID);
+ }
+
+
public static class BaseProgramBuilder {
RenderScript mRS;
Element mInputs[];
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index f150043..5e04f0c 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -26,44 +26,10 @@
*
**/
public class ProgramFragment extends Program {
- public static final int MAX_SLOT = 2;
-
- public enum EnvMode {
- REPLACE (0),
- MODULATE (1),
- DECAL (2);
-
- int mID;
- EnvMode(int id) {
- mID = id;
- }
- }
-
-
ProgramFragment(int id, RenderScript rs) {
super(id, rs);
}
- public void bindTexture(Allocation va, int slot)
- throws IllegalArgumentException {
- mRS.validate();
- if((slot < 0) || (slot >= MAX_SLOT)) {
- throw new IllegalArgumentException("Slot ID out of range.");
- }
-
- mRS.nProgramFragmentBindTexture(mID, slot, va.mID);
- }
-
- public void bindSampler(Sampler vs, int slot)
- throws IllegalArgumentException {
- mRS.validate();
- if((slot < 0) || (slot >= MAX_SLOT)) {
- throw new IllegalArgumentException("Slot ID out of range.");
- }
-
- mRS.nProgramFragmentBindSampler(mID, slot, vs.mID);
- }
-
public static class ShaderBuilder extends BaseProgramBuilder {
public ShaderBuilder(RenderScript rs) {
super(rs);
@@ -97,101 +63,77 @@
}
public static class Builder {
+ public static final int MAX_TEXTURE = 2;
RenderScript mRS;
- Element mIn;
- Element mOut;
boolean mPointSpriteEnable;
- String mShader;
+
+ public enum EnvMode {
+ REPLACE (1),
+ MODULATE (2),
+ DECAL (3);
+
+ int mID;
+ EnvMode(int id) {
+ mID = id;
+ }
+ }
+
+ public enum Format {
+ ALPHA (1),
+ LUMINANCE_ALPHA (2),
+ RGB (3),
+ RGBA (4);
+
+ int mID;
+ Format(int id) {
+ mID = id;
+ }
+ }
private class Slot {
- Type mType;
- EnvMode mEnv;
- boolean mTexEnable;
-
- Slot() {
- mTexEnable = false;
+ EnvMode env;
+ Format format;
+ Slot(EnvMode _env, Format _fmt) {
+ env = _env;
+ format = _fmt;
}
}
Slot[] mSlots;
- public Builder(RenderScript rs, Element in, Element out) {
+ public Builder(RenderScript rs) {
mRS = rs;
- mIn = in;
- mOut = out;
- mSlots = new Slot[MAX_SLOT];
+ mSlots = new Slot[MAX_TEXTURE];
mPointSpriteEnable = false;
- for(int ct=0; ct < MAX_SLOT; ct++) {
- mSlots[ct] = new Slot();
- }
}
- public void setShader(String s) {
- mShader = s;
- }
-
- public void setType(int slot, Type t)
+ public void setTexture(EnvMode env, Format fmt, int slot)
throws IllegalArgumentException {
- if((slot < 0) || (slot >= MAX_SLOT)) {
- throw new IllegalArgumentException("Slot ID out of range.");
+ if((slot < 0) || (slot >= MAX_TEXTURE)) {
+ throw new IllegalArgumentException("MAX_TEXTURE exceeded.");
}
-
- mSlots[slot].mType = t;
- }
-
- public void setTexEnable(boolean enable, int slot)
- throws IllegalArgumentException {
- if((slot < 0) || (slot >= MAX_SLOT)) {
- throw new IllegalArgumentException("Slot ID out of range.");
- }
-
- mSlots[slot].mTexEnable = enable;
- }
-
- public void setTexEnvMode(EnvMode env, int slot)
- throws IllegalArgumentException {
- if((slot < 0) || (slot >= MAX_SLOT)) {
- throw new IllegalArgumentException("Slot ID out of range.");
- }
-
- mSlots[slot].mEnv = env;
+ mSlots[slot] = new Slot(env, fmt);
}
public void setPointSpriteTexCoordinateReplacement(boolean enable) {
mPointSpriteEnable = enable;
}
- static synchronized ProgramFragment internalCreate(RenderScript rs, Builder b) {
- int inID = 0;
- int outID = 0;
- if (b.mIn != null) {
- inID = b.mIn.mID;
- }
- if (b.mOut != null) {
- outID = b.mOut.mID;
- }
- rs.nProgramFragmentBegin(inID, outID, b.mPointSpriteEnable);
- for(int ct=0; ct < MAX_SLOT; ct++) {
- if(b.mSlots[ct].mTexEnable) {
- Slot s = b.mSlots[ct];
- int typeID = 0;
- if(s.mType != null) {
- typeID = s.mType.mID;
- }
- rs.nProgramFragmentSetSlot(ct, true, s.mEnv.mID, typeID);
- }
- }
-
- if (b.mShader != null) {
- rs.nProgramFragmentSetShader(b.mShader);
- }
-
- int id = rs.nProgramFragmentCreate();
- return new ProgramFragment(id, rs);
- }
-
public ProgramFragment create() {
mRS.validate();
- return internalCreate(mRS, this);
+ int[] tmp = new int[MAX_TEXTURE * 2 + 1];
+ if (mSlots[0] != null) {
+ tmp[0] = mSlots[0].env.mID;
+ tmp[1] = mSlots[0].format.mID;
+ }
+ if (mSlots[1] != null) {
+ tmp[2] = mSlots[1].env.mID;
+ tmp[3] = mSlots[1].format.mID;
+ }
+ tmp[4] = mPointSpriteEnable ? 1 : 0;
+ int id = mRS.nProgramFragmentCreate(tmp);
+ ProgramFragment pf = new ProgramFragment(id, mRS);
+ pf.mTextureCount = MAX_TEXTURE;
+ return pf;
}
}
}
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 0e4d5b0..6574219 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -168,13 +168,10 @@
native void nProgramRasterSetPointSize(int pr, float v);
native void nProgramBindConstants(int pv, int slot, int mID);
+ native void nProgramBindTexture(int vpf, int slot, int a);
+ native void nProgramBindSampler(int vpf, int slot, int s);
- native void nProgramFragmentBegin(int in, int out, boolean pointSpriteEnable);
- native void nProgramFragmentBindTexture(int vpf, int slot, int a);
- native void nProgramFragmentBindSampler(int vpf, int slot, int s);
- native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt);
- native void nProgramFragmentSetShader(String txt);
- native int nProgramFragmentCreate();
+ native int nProgramFragmentCreate(int[] params);
native int nProgramFragmentCreate2(String shader, int[] params);
native int nProgramVertexCreate(boolean texMat);
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 8bacefc..6ae93a7 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -1063,56 +1063,36 @@
rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
}
+static void
+nProgramBindTexture(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
+ rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
+}
+
+static void
+nProgramBindSampler(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
+ rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
+}
+
// ---------------------------------------------------------------------------
-static void
-nProgramFragmentSetShader(JNIEnv *_env, jobject _this, jstring name)
-{
- RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- const char* n = _env->GetStringUTFChars(name, NULL);
- LOG_API("nProgramFragmentSetShader, con(%p)", con);
- rsProgramFragmentSetShader(con, n, _env->GetStringUTFLength(name));
- _env->ReleaseStringUTFChars(name, n);
-}
-
-static void
-nProgramFragmentBegin(JNIEnv *_env, jobject _this, jint in, jint out, jboolean pointSpriteEnable)
-{
- RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- LOG_API("nProgramFragmentBegin, con(%p), in(%p), out(%p) PointSprite(%i)", con, (RsElement)in, (RsElement)out, pointSpriteEnable);
- rsProgramFragmentBegin(con, (RsElement)in, (RsElement)out, pointSpriteEnable);
-}
-
-static void
-nProgramFragmentBindTexture(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
-{
- RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- LOG_API("nProgramFragmentBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
- rsProgramFragmentBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
-}
-
-static void
-nProgramFragmentBindSampler(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
-{
- RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- LOG_API("nProgramFragmentBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
- rsProgramFragmentBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
-}
-
-static void
-nProgramFragmentSetSlot(JNIEnv *_env, jobject _this, jint slot, jboolean enable, jint env, jint vt)
-{
- RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- LOG_API("nProgramFragmentSetType, con(%p), slot(%i), enable(%i), env(%i), vt(%p)", con, slot, enable, env, (RsType)vt);
- rsProgramFragmentSetSlot(con, slot, enable, (RsTexEnvMode)env, (RsType)vt);
-}
-
static jint
-nProgramFragmentCreate(JNIEnv *_env, jobject _this, jint slot, jboolean enable)
+nProgramFragmentCreate(JNIEnv *_env, jobject _this, jintArray params)
{
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
- LOG_API("nProgramFragmentCreate, con(%p)", con);
- return (jint)rsProgramFragmentCreate(con);
+ jint *paramPtr = _env->GetIntArrayElements(params, NULL);
+ jint paramLen = _env->GetArrayLength(params);
+
+ LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, shaderLen, paramLen);
+
+ jint ret = (jint)rsProgramFragmentCreate(con, (uint32_t *)paramPtr, paramLen);
+ _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
+ return ret;
}
static jint
@@ -1455,13 +1435,10 @@
{"nProgramFragmentStoreCreate", "()I", (void*)nProgramFragmentStoreCreate },
{"nProgramBindConstants", "(III)V", (void*)nProgramBindConstants },
+{"nProgramBindTexture", "(III)V", (void*)nProgramBindTexture },
+{"nProgramBindSampler", "(III)V", (void*)nProgramBindSampler },
-{"nProgramFragmentBegin", "(IIZ)V", (void*)nProgramFragmentBegin },
-{"nProgramFragmentBindTexture", "(III)V", (void*)nProgramFragmentBindTexture },
-{"nProgramFragmentBindSampler", "(III)V", (void*)nProgramFragmentBindSampler },
-{"nProgramFragmentSetSlot", "(IZII)V", (void*)nProgramFragmentSetSlot },
-{"nProgramFragmentSetShader", "(Ljava/lang/String;)V", (void*)nProgramFragmentSetShader },
-{"nProgramFragmentCreate", "()I", (void*)nProgramFragmentCreate },
+{"nProgramFragmentCreate", "([I)I", (void*)nProgramFragmentCreate },
{"nProgramFragmentCreate2", "(Ljava/lang/String;[I)I", (void*)nProgramFragmentCreate2 },
{"nProgramRasterCreate", "(IIZZZ)I", (void*)nProgramRasterCreate },
diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h
index 44ff901..d10eeda 100644
--- a/libs/rs/RenderScript.h
+++ b/libs/rs/RenderScript.h
@@ -158,6 +158,7 @@
};
enum RsTexEnvMode {
+ RS_TEX_ENV_MODE_NONE,
RS_TEX_ENV_MODE_REPLACE,
RS_TEX_ENV_MODE_MODULATE,
RS_TEX_ENV_MODE_DECAL
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index 3b93c18..dccc1d2 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -121,13 +121,13 @@
bs.setWrapT(Sampler.Value.WRAP);
mSampler = bs.create();
- ProgramFragment.Builder b = new ProgramFragment.Builder(mRS, null, null);
-
+ ProgramFragment.Builder b = new ProgramFragment.Builder(mRS);
mPFBackground = b.create();
mPFBackground.setName("PFBackground");
- b.setTexEnable(true, 0);
- b.setTexEnvMode(ProgramFragment.EnvMode.REPLACE, 0);
+ b = new ProgramFragment.Builder(mRS);
+ b.setTexture(ProgramFragment.Builder.EnvMode.REPLACE,
+ ProgramFragment.Builder.Format.RGBA, 0);
mPFImages = b.create();
mPFImages.bindSampler(mSampler, 0);
mPFImages.setName("PFImages");
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 5de76b25..df415685 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -372,37 +372,22 @@
param RsAllocation constants
}
-ProgramFragmentBegin {
- param RsElement in
- param RsElement out
- param bool pointSpriteEnable
- }
-ProgramFragmentSetShader {
- param const char * text
- param uint32_t length
- }
-
-ProgramFragmentBindTexture {
+ProgramBindTexture {
param RsProgramFragment pf
param uint32_t slot
param RsAllocation a
}
-ProgramFragmentBindSampler {
+ProgramBindSampler {
param RsProgramFragment pf
param uint32_t slot
param RsSampler s
}
-ProgramFragmentSetSlot {
- param uint32_t slot
- param bool enable
- param RsTexEnvMode env
- param RsType t
- }
-
ProgramFragmentCreate {
+ param const uint32_t * params
+ param uint32_t paramLength
ret RsProgramFragment
}
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp
index e6d1e36..ede8c86 100644
--- a/libs/rs/rsProgram.cpp
+++ b/libs/rs/rsProgram.cpp
@@ -121,6 +121,30 @@
mDirty = true;
}
+void Program::bindTexture(uint32_t slot, Allocation *a)
+{
+ if (slot >= MAX_TEXTURE) {
+ LOGE("Attempt to bind a texture to a slot > MAX_TEXTURE");
+ return;
+ }
+
+ //LOGE("bindtex %i %p", slot, a);
+ mTextures[slot].set(a);
+ mDirty = true;
+}
+
+void Program::bindSampler(uint32_t slot, Sampler *s)
+{
+ if (slot >= MAX_TEXTURE) {
+ LOGE("Attempt to bind a Sampler to a slot > MAX_TEXTURE");
+ return;
+ }
+
+ mSamplers[slot].set(s);
+ mDirty = true;
+}
+
+
void Program::createShader()
{
}
@@ -182,6 +206,17 @@
p->bindAllocation(static_cast<Allocation *>(constants));
}
+void rsi_ProgramBindTexture(Context *rsc, RsProgram vpf, uint32_t slot, RsAllocation a)
+{
+ Program *p = static_cast<Program *>(vpf);
+ p->bindTexture(slot, static_cast<Allocation *>(a));
+}
+
+void rsi_ProgramBindSampler(Context *rsc, RsProgram vpf, uint32_t slot, RsSampler s)
+{
+ Program *p = static_cast<Program *>(vpf);
+ p->bindSampler(slot, static_cast<Sampler *>(s));
+}
}
}
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h
index 003498e..25a5434 100644
--- a/libs/rs/rsProgram.h
+++ b/libs/rs/rsProgram.h
@@ -32,6 +32,7 @@
public:
const static uint32_t MAX_ATTRIBS = 8;
const static uint32_t MAX_UNIFORMS = 16;
+ const static uint32_t MAX_TEXTURE = 2;
Program(Context *);
Program(Context *, const char * shaderText, uint32_t shaderLength,
@@ -41,6 +42,9 @@
void bindAllocation(Allocation *);
virtual void createShader();
+ void bindTexture(uint32_t slot, Allocation *);
+ void bindSampler(uint32_t slot, Sampler *);
+
uint32_t getShaderID() const {return mShaderID;}
void setShader(const char *, uint32_t len);
@@ -72,6 +76,15 @@
String8 mAttribNames[MAX_ATTRIBS];
String8 mUniformNames[MAX_UNIFORMS];
+ // The difference between Textures and Constants is how they are accessed
+ // Texture lookups go though a sampler which in effect converts normalized
+ // coordinates into type specific. Multiple samples may also be taken
+ // and filtered.
+ //
+ // Constants are strictly accessed by programetic loads.
+ ObjectBaseRef<Allocation> mTextures[MAX_TEXTURE];
+ ObjectBaseRef<Sampler> mSamplers[MAX_TEXTURE];
+
bool loadShader(Context *, uint32_t type);
public:
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index c353301..05672e5c 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -26,18 +26,28 @@
using namespace android::renderscript;
-ProgramFragment::ProgramFragment(Context *rsc, Element *in, Element *out, bool pointSpriteEnable) :
+ProgramFragment::ProgramFragment(Context *rsc, const uint32_t * params,
+ uint32_t paramLength) :
Program(rsc)
{
mAllocFile = __FILE__;
mAllocLine = __LINE__;
- for (uint32_t ct=0; ct < MAX_TEXTURE; ct++) {
- mEnvModes[ct] = RS_TEX_ENV_MODE_REPLACE;
- mTextureDimensions[ct] = 2;
- }
+ rsAssert(paramLength = 5);
+
+ mEnvModes[0] = (RsTexEnvMode)params[0];
+ mTextureFormats[0] = params[1];
+ mEnvModes[1] = (RsTexEnvMode)params[2];
+ mTextureFormats[1] = params[3];
+ mPointSpriteEnable = params[4] != 0;
+
mTextureEnableMask = 0;
- mPointSpriteEnable = pointSpriteEnable;
- mEnvModes[1] = RS_TEX_ENV_MODE_DECAL;
+ if (mEnvModes[0]) {
+ mTextureEnableMask |= 1;
+ }
+ if (mEnvModes[1]) {
+ mTextureEnableMask |= 2;
+ }
+ init(rsc);
}
ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText,
@@ -84,6 +94,9 @@
glBindTexture(GL_TEXTURE_2D, mTextures[ct]->getTextureID());
switch(mEnvModes[ct]) {
+ case RS_TEX_ENV_MODE_NONE:
+ rsAssert(0);
+ break;
case RS_TEX_ENV_MODE_REPLACE:
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
break;
@@ -211,6 +224,9 @@
while (mask) {
if (mask & 1) {
switch(mEnvModes[texNum]) {
+ case RS_TEX_ENV_MODE_NONE:
+ rsAssert(0);
+ break;
case RS_TEX_ENV_MODE_REPLACE:
mShader.append(" col = texture2D(uni_Tex0, tex0);\n");
break;
@@ -235,69 +251,6 @@
}
}
-void ProgramFragment::bindTexture(uint32_t slot, Allocation *a)
-{
- if (slot >= MAX_TEXTURE) {
- LOGE("Attempt to bind a texture to a slot > MAX_TEXTURE");
- return;
- }
-
- //LOGE("bindtex %i %p", slot, a);
- mTextures[slot].set(a);
- mDirty = true;
-}
-
-void ProgramFragment::bindSampler(uint32_t slot, Sampler *s)
-{
- if (slot >= MAX_TEXTURE) {
- LOGE("Attempt to bind a Sampler to a slot > MAX_TEXTURE");
- return;
- }
-
- mSamplers[slot].set(s);
- mDirty = true;
-}
-
-void ProgramFragment::setType(uint32_t slot, const Element *e, uint32_t dim)
-{
- if (slot >= MAX_TEXTURE) {
- LOGE("Attempt to setType to a slot > MAX_TEXTURE");
- return;
- }
-
- if (dim >= 4) {
- LOGE("Attempt to setType to a dimension > 3");
- return;
- }
-
- mTextureFormats[slot].set(e);
- mTextureDimensions[slot] = dim;
-}
-
-void ProgramFragment::setEnvMode(uint32_t slot, RsTexEnvMode env)
-{
- if (slot >= MAX_TEXTURE) {
- LOGE("Attempt to setEnvMode to a slot > MAX_TEXTURE");
- return;
- }
-
- mEnvModes[slot] = env;
-}
-
-void ProgramFragment::setTexEnable(uint32_t slot, bool enable)
-{
- if (slot >= MAX_TEXTURE) {
- LOGE("Attempt to setEnvMode to a slot > MAX_TEXTURE");
- return;
- }
-
- uint32_t bit = 1 << slot;
- mTextureEnableMask &= ~bit;
- if (enable) {
- mTextureEnableMask |= bit;
- }
-}
-
void ProgramFragment::init(Context *rsc)
{
mUniformCount = 2;
@@ -320,7 +273,12 @@
void ProgramFragmentState::init(Context *rsc, int32_t w, int32_t h)
{
- ProgramFragment *pf = new ProgramFragment(rsc, NULL, NULL, false);
+ uint32_t tmp[5] = {
+ RS_TEX_ENV_MODE_NONE, 0,
+ RS_TEX_ENV_MODE_NONE, 0,
+ 0
+ };
+ ProgramFragment *pf = new ProgramFragment(rsc, tmp, 5);
mDefault.set(pf);
pf->init(rsc);
}
@@ -335,52 +293,12 @@
namespace android {
namespace renderscript {
-void rsi_ProgramFragmentBegin(Context * rsc, RsElement in, RsElement out, bool pointSpriteEnable)
+RsProgramFragment rsi_ProgramFragmentCreate(Context *rsc,
+ const uint32_t * params,
+ uint32_t paramLength)
{
- delete rsc->mStateFragment.mPF;
- rsc->mStateFragment.mPF = new ProgramFragment(rsc, (Element *)in, (Element *)out, pointSpriteEnable);
-}
-
-void rsi_ProgramFragmentBindTexture(Context *rsc, RsProgramFragment vpf, uint32_t slot, RsAllocation a)
-{
- ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
- pf->bindTexture(slot, static_cast<Allocation *>(a));
-}
-
-void rsi_ProgramFragmentBindSampler(Context *rsc, RsProgramFragment vpf, uint32_t slot, RsSampler s)
-{
- ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
- pf->bindSampler(slot, static_cast<Sampler *>(s));
-}
-
-void rsi_ProgramFragmentSetSlot(Context *rsc, uint32_t slot, bool enable, RsTexEnvMode env, RsType vt)
-{
- const Type *t = static_cast<const Type *>(vt);
- if (t) {
- uint32_t dim = 1;
- if (t->getDimY()) {
- dim ++;
- if (t->getDimZ()) {
- dim ++;
- }
- }
- rsc->mStateFragment.mPF->setType(slot, t->getElement(), dim);
- }
- rsc->mStateFragment.mPF->setEnvMode(slot, env);
- rsc->mStateFragment.mPF->setTexEnable(slot, enable);
-}
-
-void rsi_ProgramFragmentSetShader(Context *rsc, const char *txt, uint32_t len)
-{
- rsc->mStateFragment.mPF->setShader(txt, len);
-}
-
-RsProgramFragment rsi_ProgramFragmentCreate(Context *rsc)
-{
- ProgramFragment *pf = rsc->mStateFragment.mPF;
+ ProgramFragment *pf = new ProgramFragment(rsc, params, paramLength);
pf->incUserRef();
- pf->init(rsc);
- rsc->mStateFragment.mPF = 0;
return pf;
}
diff --git a/libs/rs/rsProgramFragment.h b/libs/rs/rsProgramFragment.h
index 14b4ec3..9fa565d 100644
--- a/libs/rs/rsProgramFragment.h
+++ b/libs/rs/rsProgramFragment.h
@@ -28,11 +28,7 @@
class ProgramFragment : public Program
{
public:
- const static uint32_t MAX_TEXTURE = 2;
-
-
-
- ProgramFragment(Context *, Element *in, Element *out, bool pointSpriteEnable);
+ ProgramFragment(Context *, const uint32_t * params, uint32_t paramLength);
ProgramFragment(Context *rsc, const char * shaderText,
uint32_t shaderLength, const uint32_t * params,
uint32_t paramLength);
@@ -41,33 +37,14 @@
virtual void setupGL(const Context *, ProgramFragmentState *);
virtual void setupGL2(const Context *, ProgramFragmentState *, ShaderCache *sc);
-
- void bindTexture(uint32_t slot, Allocation *);
- void bindSampler(uint32_t slot, Sampler *);
- void setType(uint32_t slot, const Element *, uint32_t dim);
-
- void setEnvMode(uint32_t slot, RsTexEnvMode);
- void setTexEnable(uint32_t slot, bool);
-
virtual void createShader();
virtual void loadShader(Context *rsc);
virtual void init(Context *rsc);
-
protected:
- // The difference between Textures and Constants is how they are accessed
- // Texture lookups go though a sampler which in effect converts normalized
- // coordinates into type specific. Multiple samples may also be taken
- // and filtered.
- //
- // Constants are strictly accessed by programetic loads.
- ObjectBaseRef<Allocation> mTextures[MAX_TEXTURE];
- ObjectBaseRef<Sampler> mSamplers[MAX_TEXTURE];
- ObjectBaseRef<const Element> mTextureFormats[MAX_TEXTURE];
- uint32_t mTextureDimensions[MAX_TEXTURE];
-
-
// Hacks to create a program for now
+ uint32_t mTextureFormats[MAX_TEXTURE];
+ uint32_t mTextureDimensions[MAX_TEXTURE];
RsTexEnvMode mEnvModes[MAX_TEXTURE];
uint32_t mTextureEnableMask;
bool mPointSpriteEnable;
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index ade136c..e9f47d6 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -619,20 +619,20 @@
static void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va)
{
GET_TLS();
- rsi_ProgramFragmentBindTexture(rsc,
- static_cast<ProgramFragment *>(vpf),
- slot,
- static_cast<Allocation *>(va));
+ rsi_ProgramBindTexture(rsc,
+ static_cast<ProgramFragment *>(vpf),
+ slot,
+ static_cast<Allocation *>(va));
}
static void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs)
{
GET_TLS();
- rsi_ProgramFragmentBindSampler(rsc,
- static_cast<ProgramFragment *>(vpf),
- slot,
- static_cast<Sampler *>(vs));
+ rsi_ProgramBindSampler(rsc,
+ static_cast<ProgramFragment *>(vpf),
+ slot,
+ static_cast<Sampler *>(vs));
}
@@ -846,9 +846,7 @@
rsc->mStateVertex.color[1] = g;
rsc->mStateVertex.color[2] = b;
rsc->mStateVertex.color[3] = a;
- if (rsc->checkVersion2_0()) {
- glVertexAttrib4f(1, r, g, b, a);
- } else {
+ if (!rsc->checkVersion2_0()) {
glColor4f(r, g, b, a);
}
}
diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk
index fb75aef..f7df69c 100644
--- a/media/libstagefright/Android.mk
+++ b/media/libstagefright/Android.mk
@@ -59,6 +59,7 @@
libstagefright_amrnbenc \
libstagefright_amrwbdec \
libstagefright_avcdec \
+ libstagefright_m4vh263dec \
libstagefright_mp3dec
LOCAL_SHARED_LIBRARIES += \
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index 39d4c0b..14e6177 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -173,6 +173,133 @@
return true;
}
+static bool parse_xing_header(
+ const sp<DataSource> &source, off_t first_frame_pos,
+ int32_t *frame_number = NULL, int32_t *byte_number = NULL,
+ char *table_of_contents = NULL, int32_t *quality_indicator = NULL,
+ int64_t *duration = NULL) {
+
+ if (frame_number) {
+ *frame_number = 0;
+ }
+ if (byte_number) {
+ *byte_number = 0;
+ }
+ if (table_of_contents) {
+ table_of_contents[0] = 0;
+ }
+ if (quality_indicator) {
+ *quality_indicator = 0;
+ }
+ if (duration) {
+ *duration = 0;
+ }
+
+ uint8_t buffer[4];
+ int offset = first_frame_pos;
+ if (source->readAt(offset, &buffer, 4) < 4) { // get header
+ return false;
+ }
+ offset += 4;
+
+ uint8_t id, layer, sr_index, mode;
+ layer = (buffer[1] >> 1) & 3;
+ id = (buffer[1] >> 3) & 3;
+ sr_index = (buffer[2] >> 2) & 3;
+ mode = (buffer[3] >> 6) & 3;
+ if (layer == 0) {
+ return false;
+ }
+ if (id == 1) {
+ return false;
+ }
+ if (sr_index == 3) {
+ return false;
+ }
+ // determine offset of XING header
+ if(id&1) { // mpeg1
+ if (mode != 3) offset += 32;
+ else offset += 17;
+ } else { // mpeg2
+ if (mode != 3) offset += 17;
+ else offset += 9;
+ }
+
+ if (source->readAt(offset, &buffer, 4) < 4) { // XING header ID
+ return false;
+ }
+ offset += 4;
+ // Check XING ID
+ if ((buffer[0] != 'X') || (buffer[1] != 'i')
+ || (buffer[2] != 'n') || (buffer[3] != 'g')) {
+ if ((buffer[0] != 'I') || (buffer[1] != 'n')
+ || (buffer[2] != 'f') || (buffer[3] != 'o')) {
+ return false;
+ }
+ }
+
+ if (source->readAt(offset, &buffer, 4) < 4) { // flags
+ return false;
+ }
+ offset += 4;
+ uint32_t flags = U32_AT(buffer);
+
+ if (flags & 0x0001) { // Frames field is present
+ if (source->readAt(offset, buffer, 4) < 4) {
+ return false;
+ }
+ if (frame_number) {
+ *frame_number = U32_AT(buffer);
+ }
+ int32_t frame = U32_AT(buffer);
+ // Samples per Frame: 1. index = MPEG Version ID, 2. index = Layer
+ const int samplesPerFrames[2][3] =
+ {
+ { 384, 1152, 576 }, // MPEG 2, 2.5: layer1, layer2, layer3
+ { 384, 1152, 1152 }, // MPEG 1: layer1, layer2, layer3
+ };
+ // sampling rates in hertz: 1. index = MPEG Version ID, 2. index = sampling rate index
+ const int samplingRates[4][3] =
+ {
+ { 11025, 12000, 8000, }, // MPEG 2.5
+ { 0, 0, 0, }, // reserved
+ { 22050, 24000, 16000, }, // MPEG 2
+ { 44100, 48000, 32000, } // MPEG 1
+ };
+ if (duration) {
+ *duration = (int64_t)frame * samplesPerFrames[id&1][3-layer] * 1000000LL
+ / samplingRates[id][sr_index];
+ }
+ offset += 4;
+ }
+ if (flags & 0x0002) { // Bytes field is present
+ if (byte_number) {
+ if (source->readAt(offset, buffer, 4) < 4) {
+ return false;
+ }
+ *byte_number = U32_AT(buffer);
+ }
+ offset += 4;
+ }
+ if (flags & 0x0004) { // TOC field is present
+ if (table_of_contents) {
+ if (source->readAt(offset + 1, table_of_contents, 99) < 99) {
+ return false;
+ }
+ }
+ offset += 100;
+ }
+ if (flags & 0x0008) { // Quality indicator field is present
+ if (quality_indicator) {
+ if (source->readAt(offset, buffer, 4) < 4) {
+ return false;
+ }
+ *quality_indicator = U32_AT(buffer);
+ }
+ }
+ return true;
+}
+
static bool Resync(
const sp<DataSource> &source, uint32_t match_header,
off_t *inout_pos, uint32_t *out_header) {
@@ -314,7 +441,8 @@
public:
MP3Source(
const sp<MetaData> &meta, const sp<DataSource> &source,
- off_t first_frame_pos, uint32_t fixed_header);
+ off_t first_frame_pos, uint32_t fixed_header,
+ int32_t byte_number, const char *table_of_contents);
virtual status_t start(MetaData *params = NULL);
virtual status_t stop();
@@ -335,7 +463,9 @@
off_t mCurrentPos;
int64_t mCurrentTimeUs;
bool mStarted;
-
+ int32_t mByteNumber; // total number of bytes in this MP3
+ // TOC entries in XING header. Skip the first one since it's always 0.
+ char mTableOfContents[99];
MediaBufferGroup *mGroup;
MP3Source(const MP3Source &);
@@ -345,7 +475,8 @@
MP3Extractor::MP3Extractor(const sp<DataSource> &source)
: mDataSource(source),
mFirstFramePos(-1),
- mFixedHeader(0) {
+ mFixedHeader(0),
+ mByteNumber(0) {
off_t pos = 0;
uint32_t header;
bool success = Resync(mDataSource, 0, &pos, &header);
@@ -369,11 +500,19 @@
mMeta->setInt32(kKeyBitRate, bitrate * 1000);
mMeta->setInt32(kKeyChannelCount, num_channels);
- off_t fileSize;
- if (mDataSource->getSize(&fileSize) == OK) {
- mMeta->setInt64(
- kKeyDuration,
- 8000LL * (fileSize - mFirstFramePos) / bitrate);
+ int64_t duration;
+ parse_xing_header(
+ mDataSource, mFirstFramePos, NULL, &mByteNumber,
+ mTableOfContents, NULL, &duration);
+ if (duration > 0) {
+ mMeta->setInt64(kKeyDuration, duration);
+ } else {
+ off_t fileSize;
+ if (mDataSource->getSize(&fileSize) == OK) {
+ mMeta->setInt64(
+ kKeyDuration,
+ 8000LL * (fileSize - mFirstFramePos) / bitrate);
+ }
}
}
}
@@ -391,7 +530,8 @@
}
return new MP3Source(
- mMeta, mDataSource, mFirstFramePos, mFixedHeader);
+ mMeta, mDataSource, mFirstFramePos, mFixedHeader,
+ mByteNumber, mTableOfContents);
}
sp<MetaData> MP3Extractor::getTrackMetaData(size_t index, uint32_t flags) {
@@ -406,7 +546,8 @@
MP3Source::MP3Source(
const sp<MetaData> &meta, const sp<DataSource> &source,
- off_t first_frame_pos, uint32_t fixed_header)
+ off_t first_frame_pos, uint32_t fixed_header,
+ int32_t byte_number, const char *table_of_contents)
: mMeta(meta),
mDataSource(source),
mFirstFramePos(first_frame_pos),
@@ -414,7 +555,9 @@
mCurrentPos(0),
mCurrentTimeUs(0),
mStarted(false),
+ mByteNumber(byte_number),
mGroup(NULL) {
+ memcpy (mTableOfContents, table_of_contents, strlen(table_of_contents));
}
MP3Source::~MP3Source() {
@@ -469,7 +612,35 @@
}
mCurrentTimeUs = seekTimeUs;
- mCurrentPos = mFirstFramePos + seekTimeUs * bitrate / 8000000;
+ // interpolate in TOC to get file seek point in bytes
+ int64_t duration;
+ if ((mByteNumber > 0) && (mTableOfContents[0] > 0)
+ && mMeta->findInt64(kKeyDuration, &duration)) {
+ float percent = (float)seekTimeUs * 100 / duration;
+ float fx;
+ if( percent <= 0.0f ) {
+ fx = 0.0f;
+ } else if( percent >= 100.0f ) {
+ fx = 256.0f;
+ } else {
+ int a = (int)percent;
+ float fa, fb;
+ if ( a == 0 ) {
+ fa = 0.0f;
+ } else {
+ fa = (float)mTableOfContents[a-1];
+ }
+ if ( a < 99 ) {
+ fb = (float)mTableOfContents[a];
+ } else {
+ fb = 256.0f;
+ }
+ fx = fa + (fb-fa)*(percent-a);
+ }
+ mCurrentPos = mFirstFramePos + (int)((1.0f/256.0f)*fx*mByteNumber);
+ } else {
+ mCurrentPos = mFirstFramePos + seekTimeUs * bitrate / 8000000;
+ }
}
MediaBuffer *buffer;
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 47bbda3..d8bd25d 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -24,6 +24,7 @@
#include "include/AMRNBEncoder.h"
#include "include/AMRWBDecoder.h"
#include "include/AVCDecoder.h"
+#include "include/M4vH263Decoder.h"
#include "include/MP3Decoder.h"
#endif
@@ -70,6 +71,7 @@
FACTORY_CREATE(AMRWBDecoder)
FACTORY_CREATE(AACDecoder)
FACTORY_CREATE(AVCDecoder)
+FACTORY_CREATE(M4vH263Decoder)
FACTORY_CREATE(AMRNBEncoder)
static sp<MediaSource> InstantiateSoftwareCodec(
@@ -85,6 +87,7 @@
FACTORY_REF(AMRWBDecoder)
FACTORY_REF(AACDecoder)
FACTORY_REF(AVCDecoder)
+ FACTORY_REF(M4vH263Decoder)
FACTORY_REF(AMRNBEncoder)
};
for (size_t i = 0;
@@ -120,9 +123,11 @@
{ MEDIA_MIMETYPE_AUDIO_AAC, "OMX.PV.aacdec" },
{ MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.qcom.video.decoder.mpeg4" },
{ MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.TI.Video.Decoder" },
+ OPTIONAL(MEDIA_MIMETYPE_VIDEO_MPEG4, "M4vH263Decoder")
{ MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.PV.mpeg4dec" },
{ MEDIA_MIMETYPE_VIDEO_H263, "OMX.qcom.video.decoder.h263" },
{ MEDIA_MIMETYPE_VIDEO_H263, "OMX.TI.Video.Decoder" },
+ OPTIONAL(MEDIA_MIMETYPE_VIDEO_H263, "M4vH263Decoder")
{ MEDIA_MIMETYPE_VIDEO_H263, "OMX.PV.h263dec" },
{ MEDIA_MIMETYPE_VIDEO_AVC, "OMX.qcom.video.decoder.avc" },
{ MEDIA_MIMETYPE_VIDEO_AVC, "OMX.TI.Video.Decoder" },
diff --git a/media/libstagefright/codecs/m4v_h263/Android.mk b/media/libstagefright/codecs/m4v_h263/Android.mk
new file mode 100644
index 0000000..2e431205
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/Android.mk
@@ -0,0 +1,4 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/media/libstagefright/codecs/m4v_h263/dec/Android.mk b/media/libstagefright/codecs/m4v_h263/dec/Android.mk
new file mode 100644
index 0000000..403da58
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/Android.mk
@@ -0,0 +1,50 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+ M4vH263Decoder.cpp \
+ src/adaptive_smooth_no_mmx.cpp \
+ src/bitstream.cpp \
+ src/block_idct.cpp \
+ src/cal_dc_scaler.cpp \
+ src/chvr_filter.cpp \
+ src/chv_filter.cpp \
+ src/combined_decode.cpp \
+ src/conceal.cpp \
+ src/datapart_decode.cpp \
+ src/dcac_prediction.cpp \
+ src/dec_pred_intra_dc.cpp \
+ src/deringing_chroma.cpp \
+ src/deringing_luma.cpp \
+ src/find_min_max.cpp \
+ src/get_pred_adv_b_add.cpp \
+ src/get_pred_outside.cpp \
+ src/idct.cpp \
+ src/idct_vca.cpp \
+ src/mb_motion_comp.cpp \
+ src/mb_utils.cpp \
+ src/packet_util.cpp \
+ src/post_filter.cpp \
+ src/post_proc_semaphore.cpp \
+ src/pp_semaphore_chroma_inter.cpp \
+ src/pp_semaphore_luma.cpp \
+ src/pvdec_api.cpp \
+ src/scaling_tab.cpp \
+ src/vlc_decode.cpp \
+ src/vlc_dequant.cpp \
+ src/vlc_tab.cpp \
+ src/vop.cpp \
+ src/zigzag_tab.cpp
+
+
+LOCAL_MODULE := libstagefright_m4vh263dec
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/src \
+ $(LOCAL_PATH)/include \
+ $(TOP)/frameworks/base/media/libstagefright/include \
+ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+
+LOCAL_CFLAGS := -DOSCL_EXPORT_REF= -DOSCL_IMPORT_REF=
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp b/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp
new file mode 100644
index 0000000..c3ef0d2
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//#define LOG_NDEBUG 0
+#define LOG_TAG "M4vH263Decoder"
+#include <utils/Log.h>
+#include <stdlib.h> // for free
+#include "ESDS.h"
+#include "M4vH263Decoder.h"
+
+#include "mp4dec_api.h"
+
+#include <OMX_Component.h>
+#include <media/stagefright/MediaBufferGroup.h>
+#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MetaData.h>
+#include <media/stagefright/Utils.h>
+
+namespace android {
+
+M4vH263Decoder::M4vH263Decoder(const sp<MediaSource> &source)
+ : mSource(source),
+ mStarted(false),
+ mHandle(new tagvideoDecControls),
+ mInputBuffer(NULL),
+ mNumSamplesOutput(0) {
+
+ LOGV("M4vH263Decoder");
+ memset(mHandle, 0, sizeof(tagvideoDecControls));
+ mFormat = new MetaData;
+ mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_RAW);
+ CHECK(mSource->getFormat()->findInt32(kKeyWidth, &mWidth));
+ CHECK(mSource->getFormat()->findInt32(kKeyHeight, &mHeight));
+ mFormat->setInt32(kKeyWidth, mWidth);
+ mFormat->setInt32(kKeyHeight, mHeight);
+ mFormat->setInt32(kKeyColorFormat, OMX_COLOR_FormatYUV420Planar);
+ mFormat->setCString(kKeyDecoderComponent, "M4vH263Decoder");
+}
+
+M4vH263Decoder::~M4vH263Decoder() {
+ if (mStarted) {
+ stop();
+ }
+
+ delete mHandle;
+ mHandle = NULL;
+}
+
+status_t M4vH263Decoder::start(MetaData *) {
+ CHECK(!mStarted);
+
+ const char *mime = NULL;
+ CHECK(mSource->getFormat()->findCString(kKeyMIMEType, &mime));
+
+ MP4DecodingMode mode;
+ if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG4, mime)) {
+ mode = MPEG4_MODE;
+ } else {
+ CHECK(!strcasecmp(MEDIA_MIMETYPE_VIDEO_H263, mime));
+ mode = H263_MODE;
+ }
+
+ uint32_t type;
+ const void *data = NULL;
+ size_t size = 0;
+ uint8_t *vol_data[1] = {0};
+ int32_t vol_size = 0;
+ if (mSource->getFormat()->findData(kKeyESDS, &type, &data, &size)) {
+ ESDS esds((const uint8_t *)data, size);
+ CHECK_EQ(esds.InitCheck(), OK);
+
+ const void *codec_specific_data;
+ size_t codec_specific_data_size;
+ esds.getCodecSpecificInfo(&codec_specific_data, &codec_specific_data_size);
+
+ vol_data[0] = (uint8_t *) malloc(codec_specific_data_size);
+ memcpy(vol_data[0], codec_specific_data, codec_specific_data_size);
+ vol_size = codec_specific_data_size;
+ } else {
+ vol_data[0] = NULL;
+ vol_size = 0;
+
+ }
+ CHECK_EQ(PV_TRUE, PVInitVideoDecoder(
+ mHandle, vol_data, &vol_size, 1, mWidth, mHeight, mode));
+ if (vol_data[0]) free(vol_data[0]);
+ MP4DecodingMode actualMode = PVGetDecBitstreamMode(mHandle);
+ CHECK_EQ(mode, actualMode);
+
+ PVSetPostProcType((VideoDecControls *) mHandle, 0);
+ size_t frameSize = (((mWidth + 15) & - 16) * ((mHeight + 15) & - 16) * 3) / 2;
+ for (uint32_t i = 0; i < 2; ++i) {
+ mFrames[i] = new MediaBuffer(frameSize);
+ mFrames[i]->setObserver(this);
+ }
+ PVSetReferenceYUV(mHandle, (uint8_t *)mFrames[1]->data());
+
+ mSource->start();
+
+ mNumSamplesOutput = 0;
+ mStarted = true;
+
+ return OK;
+}
+
+status_t M4vH263Decoder::stop() {
+ CHECK(mStarted);
+
+ if (mInputBuffer) {
+ mInputBuffer->release();
+ mInputBuffer = NULL;
+ }
+
+ mSource->stop();
+
+ releaseFrames();
+
+ mStarted = false;
+ return (PVCleanUpVideoDecoder(mHandle) == PV_TRUE)? OK: UNKNOWN_ERROR;
+}
+
+sp<MetaData> M4vH263Decoder::getFormat() {
+ return mFormat;
+}
+
+status_t M4vH263Decoder::read(
+ MediaBuffer **out, const ReadOptions *options) {
+ *out = NULL;
+
+ int64_t seekTimeUs;
+ if (options && options->getSeekTo(&seekTimeUs)) {
+ CHECK_EQ(PVResetVideoDecoder(mHandle), PV_TRUE);
+ }
+
+ MediaBuffer *inputBuffer = NULL;
+ status_t err = mSource->read(&inputBuffer, options);
+ if (err != OK) {
+ return err;
+ }
+
+ uint8_t *bitstream = (uint8_t *) inputBuffer->data() + inputBuffer->range_offset();
+ uint32_t timestamp = 0xFFFFFFFF;
+ int32_t bufferSize = inputBuffer->range_length();
+ uint32_t useExtTimestamp = 0;
+ CHECK_EQ(PV_TRUE, PVDecodeVideoFrame(mHandle, &bitstream, ×tamp, &bufferSize,
+ &useExtTimestamp, (uint8_t *)mFrames[mNumSamplesOutput & 0x01]->data()));
+
+ // Check whether video dimension is changed.
+ // If so, notify the client about the change.
+ int32_t width, height;
+ PVGetVideoDimensions(mHandle, &width, &height);
+ if (mWidth != width || mHeight != height) {
+ mFormat->setInt32(kKeyWidth, width);
+ mFormat->setInt32(kKeyHeight, height);
+ return INFO_FORMAT_CHANGED;
+ }
+
+ PVSetReferenceYUV(mHandle, (uint8_t *)mFrames[mNumSamplesOutput & 0x01]->data());
+ *out = mFrames[mNumSamplesOutput & 0x01];
+ (*out)->add_ref();
+
+ int64_t timeUs;
+ CHECK(inputBuffer->meta_data()->findInt64(kKeyTime, &timeUs));
+ (*out)->meta_data()->setInt64(kKeyTime, timeUs);
+
+ ++mNumSamplesOutput;
+ inputBuffer->release();
+
+ return OK;
+}
+
+void M4vH263Decoder::releaseFrames() {
+ for (size_t i = 0; i < sizeof(mFrames) / sizeof(mFrames[0]); ++i) {
+ MediaBuffer *buffer = mFrames[i];
+
+ buffer->setObserver(NULL);
+ buffer->release();
+
+ mFrames[i] = NULL;
+ }
+}
+
+void M4vH263Decoder::signalBufferReturned(MediaBuffer *buffer) {
+ LOGV("signalBufferReturned");
+}
+
+
+} // namespace android
diff --git a/media/libstagefright/codecs/m4v_h263/dec/include/m4vh263_decoder_pv_types.h b/media/libstagefright/codecs/m4v_h263/dec/include/m4vh263_decoder_pv_types.h
new file mode 100644
index 0000000..ec6871f
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/include/m4vh263_decoder_pv_types.h
@@ -0,0 +1,67 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------$
+ */
+
+#ifndef M4V_H263_DECODER_PV_TYPES_H_
+#define M4V_H263_DECODER_PV_TYPES_H_
+
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h> // for free, malloc, etc
+
+// Redefine the int types
+typedef uint8_t uint8;
+typedef uint16_t uint16;
+typedef int16_t int16;
+typedef uint32_t uint32;
+typedef int32_t int32;
+typedef unsigned int uint;
+
+// Redefine the oscl memory management routines
+#define oscl_memcpy memcpy
+#define oscl_memset memset
+#define oscl_malloc malloc
+#define oscl_free free
+#define oscl_memcmp memcmp
+#define OSCL_DELETE(ptr) { delete(ptr); }
+
+// Request status values. These are negative so that
+// they won't conflict with system error codes.
+const int32 OSCL_REQUEST_ERR_NONE = 0;
+const int32 OSCL_REQUEST_PENDING = (-0x7fffffff);
+const int32 OSCL_REQUEST_ERR_CANCEL = (-1);
+const int32 OSCL_REQUEST_ERR_GENERAL = (-2);
+
+// Request status type
+class OsclAOStatus
+{
+ public:
+ OsclAOStatus();
+ OsclAOStatus(int32 aStatus);
+ int32 operator=(int32 aStatus);
+ int32 operator==(int32 aStatus) const;
+ int32 operator!=(int32 aStatus) const;
+ int32 operator>=(int32 aStatus) const;
+ int32 operator<=(int32 aStatus) const;
+ int32 operator>(int32 aStatus) const;
+ int32 operator<(int32 aStatus) const;
+ int32 Value() const;
+ private:
+ int32 iStatus;
+};
+
+#endif // M4V_H263_DECODER_PV_TYPES_H_
diff --git a/media/libstagefright/codecs/m4v_h263/dec/include/mp4dec_api.h b/media/libstagefright/codecs/m4v_h263/dec/include/mp4dec_api.h
new file mode 100644
index 0000000..ef09900
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/include/mp4dec_api.h
@@ -0,0 +1,180 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef _MP4DEC_API_H_
+#define _MP4DEC_API_H_
+
+#include "m4vh263_decoder_pv_types.h"
+
+#define PV_TOLERATE_VOL_ERRORS
+#define PV_MEMORY_POOL
+
+#ifndef _PV_TYPES_
+#define _PV_TYPES_
+
+typedef uint Bool;
+
+#define PV_CODEC_INIT 0
+#define PV_CODEC_STOP 1
+#endif
+
+#define PV_TRUE 1
+#define PV_FALSE 0
+
+/* flag for post-processing 4/25/00 */
+
+#ifdef DEC_NOPOSTPROC
+#undef PV_POSTPROC_ON /* enable compilation of post-processing code */
+#else
+#define PV_POSTPROC_ON
+#endif
+
+#define PV_NO_POST_PROC 0
+#define PV_DEBLOCK 1
+#define PV_DERING 2
+
+
+
+#include "visual_header.h" // struct VolInfo is defined
+
+
+/**@name Structure and Data Types
+ * These type definitions specify the input / output from the PVMessage
+ * library.
+ */
+
+/*@{*/
+/* The application has to allocate space for this structure */
+typedef struct tagOutputFrame
+{
+ uint8 *data; /* pointer to output YUV buffer */
+ uint32 timeStamp; /* time stamp */
+} OutputFrame;
+
+typedef struct tagApplicationData
+{
+ int layer; /* current video layer */
+ void *object; /* some optional data field */
+} applicationData;
+
+/* Application controls, this structed shall be allocated */
+/* and initialized in the application. */
+typedef struct tagvideoDecControls
+{
+ /* The following fucntion pointer is copied to BitstreamDecVideo structure */
+ /* upon initialization and never used again. */
+ int (*readBitstreamData)(uint8 *buf, int nbytes_required, void *appData);
+ applicationData appData;
+
+ uint8 *outputFrame;
+ void *videoDecoderData; /* this is an internal pointer that is only used */
+ /* in the decoder library. */
+#ifdef PV_MEMORY_POOL
+ int32 size;
+#endif
+ int nLayers;
+ /* pointers to VOL data for frame-based decoding. */
+ uint8 *volbuf[2]; /* maximum of 2 layers for now */
+ int32 volbuf_size[2];
+
+} VideoDecControls;
+
+typedef enum
+{
+ H263_MODE = 0, MPEG4_MODE, UNKNOWN_MODE
+} MP4DecodingMode;
+
+typedef enum
+{
+ MP4_I_FRAME, MP4_P_FRAME, MP4_B_FRAME, MP4_BAD_FRAME
+} MP4FrameType;
+
+typedef struct tagVopHeaderInfo
+{
+ int currLayer;
+ uint32 timestamp;
+ MP4FrameType frameType;
+ int refSelCode;
+ int16 quantizer;
+} VopHeaderInfo;
+
+/*--------------------------------------------------------------------------*
+ * VideoRefCopyInfo:
+ * OMAP DSP specific typedef structure, to support the user (ARM) copying
+ * of a Reference Frame into the Video Decoder.
+ *--------------------------------------------------------------------------*/
+typedef struct tagVideoRefCopyInfoPtr
+{
+ uint8 *yChan; /* The Y component frame the user can copy a new reference to */
+ uint8 *uChan; /* The U component frame the user can copy a new reference to */
+ uint8 *vChan; /* The V component frame the user can copy a new reference to */
+ uint8 *currentVop; /* The Vop for video the user can copy a new reference to */
+} VideoRefCopyInfoPtr;
+
+typedef struct tagVideoRefCopyInfoData
+{
+ int16 width; /* Width */
+ int16 height; /* Height */
+ int16 realWidth; /* Non-padded width, not a multiple of 16. */
+ int16 realHeight; /* Non-padded height, not a multiple of 16. */
+} VideoRefCopyInfoData;
+
+typedef struct tagVideoRefCopyInfo
+{
+ VideoRefCopyInfoData data;
+ VideoRefCopyInfoPtr ptrs;
+} VideoRefCopyInfo;
+
+/*@}*/
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+ OSCL_IMPORT_REF Bool PVInitVideoDecoder(VideoDecControls *decCtrl, uint8 *volbuf[], int32 *volbuf_size, int nLayers, int width, int height, MP4DecodingMode mode);
+ Bool PVAllocVideoData(VideoDecControls *decCtrl, int width, int height, int nLayers);
+ OSCL_IMPORT_REF Bool PVCleanUpVideoDecoder(VideoDecControls *decCtrl);
+ Bool PVResetVideoDecoder(VideoDecControls *decCtrl);
+ OSCL_IMPORT_REF void PVSetReferenceYUV(VideoDecControls *decCtrl, uint8 *refYUV);
+ Bool PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp);
+ Bool PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp);
+ OSCL_IMPORT_REF Bool PVDecodeVideoFrame(VideoDecControls *decCtrl, uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint use_ext_timestamp[], uint8* currYUV);
+ Bool PVDecodeVopHeader(VideoDecControls *decCtrl, uint8 *buffer[], uint32 timestamp[], int32 buffer_size[], VopHeaderInfo *header_info, uint use_ext_timestamp[], uint8 *currYUV);
+ Bool PVDecodeVopBody(VideoDecControls *decCtrl, int32 buffer_size[]);
+ void PVDecPostProcess(VideoDecControls *decCtrl, uint8 *outputYUV);
+ OSCL_IMPORT_REF void PVGetVideoDimensions(VideoDecControls *decCtrl, int32 *display_width, int32 *display_height);
+ OSCL_IMPORT_REF void PVSetPostProcType(VideoDecControls *decCtrl, int mode);
+ uint32 PVGetVideoTimeStamp(VideoDecControls *decoderControl);
+ int PVGetDecBitrate(VideoDecControls *decCtrl);
+ int PVGetDecFramerate(VideoDecControls *decCtrl);
+ uint8 *PVGetDecOutputFrame(VideoDecControls *decCtrl);
+ int PVGetLayerID(VideoDecControls *decCtrl);
+ int32 PVGetDecMemoryUsage(VideoDecControls *decCtrl);
+ OSCL_IMPORT_REF MP4DecodingMode PVGetDecBitstreamMode(VideoDecControls *decCtrl);
+ Bool PVExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size);
+ int32 PVLocateFrameHeader(uint8 *video_buffer, int32 vop_size);
+ int32 PVLocateH263FrameHeader(uint8 *video_buffer, int32 vop_size);
+ Bool PVGetVolInfo(VideoDecControls *decCtrl, VolInfo *pVolInfo); // BX 6/24/04
+ Bool IsIntraFrame(VideoDecControls *decoderControl);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _MP4DEC_API_H_ */
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/include/visual_header.h b/media/libstagefright/codecs/m4v_h263/dec/include/visual_header.h
new file mode 100644
index 0000000..48da0dc
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/include/visual_header.h
@@ -0,0 +1,51 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef _VISUAL_HEADER_H
+#define _VISUAL_HEADER_H
+
+#ifndef _PV_TYPES_ // In order to compile in MDF wrapper
+#define _PV_TYPES_
+
+#include "m4vh263_decoder_pv_types.h"
+
+typedef uint Bool;
+
+#endif // #ifndef _PV_TYPES_
+
+
+typedef struct tagVolInfo
+{
+ int32 shortVideoHeader; /* shortVideoHeader mode */
+
+ /* Error Resilience Flags */
+ int32 errorResDisable; /* VOL disable error resilence mode(Use Resynch markers) */
+ int32 useReverseVLC; /* VOL reversible VLCs */
+ int32 dataPartitioning; /* VOL data partitioning */
+
+ /* Parameters used for scalability */
+ int32 scalability; /* VOL scalability (flag) */
+
+ int32 nbitsTimeIncRes; /* number of bits for time increment () */
+
+ int32 profile_level_id; /* profile and level */
+
+
+} VolInfo;
+
+#endif // #ifndef _VISUAL_HEADER_H
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/adaptive_smooth_no_mmx.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/adaptive_smooth_no_mmx.cpp
new file mode 100644
index 0000000..e2761eb
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/adaptive_smooth_no_mmx.cpp
@@ -0,0 +1,421 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+
+ Description: Separated modules into one function per file and put into
+ new template.
+
+ Description: Optimizing C code and adding comments. Also changing variable
+ names to make them more meaningful.
+
+ Who: Date:
+ Description:
+
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+
+ Rec_Y = pointer to 0th position in buffer containing luminance values
+ of type uint8.
+ y_start = value of y coordinate of type int that specifies the first
+ row of pixels to be used in the filter algorithm.
+ x_start = value of x coordinate of type int that specifies the first
+ column of pixels to be used in the filter algorithm.
+ y_blk_start = value of the y coordinate of type int that specifies the
+ row of pixels which contains the start of a block. The row
+ specified by y_blk_start+BLK_SIZE is the last row of pixels
+ that are used in the filter algorithm.
+ x_blk_start = value of the x coordinate of type int that specifies the
+ column of pixels which contains the start of a block. The
+ column specified by x_blk_start+BLK_SIZE is the last column of
+ pixels that are used in the filter algorithm.
+ thr = value of type int that is compared to the elements in Rec_Y to
+ determine if a particular value in Rec_Y will be modified by
+ the filter or not
+ width = value of type int that specifies the width of the display
+ in pixels (or pels, equivalently).
+ max_diff = value of type int that specifies the value that may be added
+ or subtracted from the pixel in Rec_Y that is being filtered
+ if the filter algorithm decides to change that particular
+ pixel's luminance value.
+
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ None
+
+ Pointers and Buffers Modified:
+ Buffer pointed to by Rec_Y is modified with the filtered
+ luminance values.
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This function implements a motion compensated noise filter using adaptive
+ weighted averaging of luminance values. *Rec_Y contains the luminance values
+ that are being filtered.
+
+ The picture below depicts a 3x3 group of pixel luminance values. The "u", "c",
+ and "l" stand for "upper", "center" and "lower", respectively. The location
+ of pelc0 is specified by x_start and y_start in the 1-D array "Rec_Y" as
+ follows (assuming x_start=0):
+
+ location of pelc0 = [(y_start+1) * width] + x_start
+
+ Moving up or down 1 row (moving from pelu2 to pelc2, for example) is done by
+ incrementing or decrementing "width" elements within Rec_Y.
+
+ The coordinates of the upper left hand corner of a block (not the group of
+ 9 pixels depicted in the figure below) is specified by
+ (y_blk_start, x_blk_start). The width and height of the block is BLKSIZE.
+ (y_start,x_start) may be specified independently of (y_blk_start, x_blk_start).
+
+ (y_start,x_start)
+ -----------|--------------------------
+ | | | | |
+ | X | pelu1 | pelu2 |
+ | pelu0 | | |
+ | | | |
+ --------------------------------------
+ | | | |
+ | pelc0 | pelc1 | pelc2 |
+ | | | |
+ | | | |
+ --------------------------------------
+ | | | |
+ | pell0 | pell1 | pell2 |
+ | | | |
+ | | | |
+ --------------------------------------
+
+ The filtering of the luminance values is achieved by comparing the 9
+ luminance values to a threshold value ("thr") and then changing the
+ luminance value of pelc1 if all of the values are above or all of the values
+ are below the threshold. The amount that the luminance value is changed
+ depends on a weighted sum of the 9 luminance values. The position of Pelc1
+ is then advanced to the right by one (as well as all of the surrounding pixels)
+ and the same calculation is performed again for the luminance value of the new
+ Pelc1. This continues row-wise until pixels in the last row of the block are
+ filtered.
+
+
+------------------------------------------------------------------------------
+ REQUIREMENTS
+
+ None.
+
+------------------------------------------------------------------------------
+ REFERENCES
+
+ ..\corelibs\decoder\common\src\post_proc.c
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE
+
+------------------------------------------------------------------------------
+ RESOURCES USED
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+#include "mp4def.h"
+
+#define OSCL_DISABLE_WARNING_CONV_POSSIBLE_LOSS_OF_DATA
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef PV_POSTPROC_ON
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+void AdaptiveSmooth_NoMMX(
+ uint8 *Rec_Y, /* i/o */
+ int y_start, /* i */
+ int x_start, /* i */
+ int y_blk_start, /* i */
+ int x_blk_start, /* i */
+ int thr, /* i */
+ int width, /* i */
+ int max_diff /* i */
+)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int sign_v[15];
+ int sum_v[15];
+ int *sum_V_ptr;
+ int *sign_V_ptr;
+ uint8 pelu;
+ uint8 pelc;
+ uint8 pell;
+ uint8 *pelp;
+ uint8 oldrow[15];
+ int sum;
+ int sum1;
+ uint8 *Rec_Y_ptr;
+ int32 addr_v;
+ int row_cntr;
+ int col_cntr;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* first row
+ */
+ addr_v = (int32)(y_start + 1) * width; /* y coord of 1st element in the row /
+ /containing pelc pixel / */
+ Rec_Y_ptr = &Rec_Y[addr_v + x_start]; /* initializing pointer to
+ / pelc0 position */
+ sum_V_ptr = &sum_v[0]; /* initializing pointer to 0th element of array
+ / that will contain weighted sums of pixel
+ / luminance values */
+ sign_V_ptr = &sign_v[0]; /* initializing pointer to 0th element of
+ / array that will contain sums that indicate
+ / how many of the 9 pixels are above or below
+ / the threshold value (thr) */
+ pelp = &oldrow[0]; /* initializing pointer to the 0th element of array
+ / that will contain current values of pelc that
+ / are saved and used as values of pelu when the
+ / next row of pixels are filtered */
+
+ pelu = *(Rec_Y_ptr - width); /* assigning value of pelu0 to pelu */
+ *pelp++ = pelc = *Rec_Y_ptr; /* assigning value of pelc0 to pelc and
+ / storing this value in pelp which
+ / will be used as value of pelu0 when
+ / next row is filtered */
+ pell = *(Rec_Y_ptr + width); /* assigning value of pell0 to pell */
+ Rec_Y_ptr++; /* advancing pointer from pelc0 to pelc1 */
+ *sum_V_ptr++ = pelu + (pelc << 1) + pell; /* weighted sum of pelu0,
+ / pelc0 and pell0 */
+ /* sum of 0's and 1's (0 if pixel value is below thr, 1 if value
+ /is above thr) */
+ *sign_V_ptr++ = INDEX(pelu, thr) + INDEX(pelc, thr) + INDEX(pell, thr);
+
+
+ pelu = *(Rec_Y_ptr - width); /* assigning value of pelu1 to pelu */
+ *pelp++ = pelc = *Rec_Y_ptr; /* assigning value of pelc1 to pelc and
+ / storing this value in pelp which
+ / will be used as the value of pelu1 when
+ / next row is filtered */
+ pell = *(Rec_Y_ptr + width); /* assigning value of pell1 to pell */
+ Rec_Y_ptr++; /* advancing pointer from pelc1 to pelc2 */
+ *sum_V_ptr++ = pelu + (pelc << 1) + pell; /* weighted sum of pelu1,
+ / pelc1 and pell1 */
+ /* sum of 0's and 1's (0 if pixel value is below thr, 1 if value
+ /is above thr) */
+ *sign_V_ptr++ = INDEX(pelu, thr) + INDEX(pelc, thr) + INDEX(pell, thr);
+
+ /* The loop below performs the filtering for the first row of
+ / pixels in the region. It steps across the remaining pixels in
+ / the row and alters the luminance value of pelc1 if necessary,
+ / depending on the luminance values of the adjacent pixels*/
+
+ for (col_cntr = (x_blk_start + BLKSIZE - 1) - x_start; col_cntr > 0; col_cntr--)
+ {
+ pelu = *(Rec_Y_ptr - width); /* assigning value of pelu2 to
+ / pelu */
+ *pelp++ = pelc = *Rec_Y_ptr; /* assigning value of pelc2 to pelc
+ / and storing this value in pelp
+ / which will be used as value of pelu2
+ / when next row is filtered */
+ pell = *(Rec_Y_ptr + width); /* assigning value of pell2 to pell */
+
+ /* weighted sum of pelu1, pelc1 and pell1 */
+ *sum_V_ptr = pelu + (pelc << 1) + pell;
+ /* sum of 0's and 1's (0 if pixel value is below thr,
+ /1 if value is above thr) */
+ *sign_V_ptr = INDEX(pelu, thr) + INDEX(pelc, thr) +
+ INDEX(pell, thr);
+ /* the value of sum1 indicates how many of the 9 pixels'
+ /luminance values are above or equal to thr */
+ sum1 = *(sign_V_ptr - 2) + *(sign_V_ptr - 1) + *sign_V_ptr;
+
+ /* alter the luminance value of pelc1 if all 9 luminance values
+ /are above or equal to thr or if all 9 values are below thr */
+ if (sum1 == 0 || sum1 == 9)
+ {
+ /* sum is a weighted average of the 9 pixel luminance
+ /values */
+ sum = (*(sum_V_ptr - 2) + (*(sum_V_ptr - 1) << 1) +
+ *sum_V_ptr + 8) >> 4;
+
+ Rec_Y_ptr--; /* move pointer back to pelc1 */
+ /* If luminance value of pelc1 is larger than
+ / sum by more than max_diff, then subract max_diff
+ / from luminance value of pelc1*/
+ if ((int)(*Rec_Y_ptr - sum) > max_diff)
+ {
+ sum = *Rec_Y_ptr - max_diff;
+ }
+ /* If luminance value of pelc1 is smaller than
+ / sum by more than max_diff, then add max_diff
+ / to luminance value of pelc1*/
+ else if ((int)(*Rec_Y_ptr - sum) < -max_diff)
+ {
+ sum = *Rec_Y_ptr + max_diff;
+ }
+ *Rec_Y_ptr++ = sum; /* assign value of sum to pelc1
+ and advance pointer to pelc2 */
+ }
+ Rec_Y_ptr++; /* advance pointer to new value of pelc2
+ / old pelc2 is now treated as pelc1*/
+ sum_V_ptr++; /* pointer is advanced so next weighted sum may
+ / be saved */
+ sign_V_ptr++; /* pointer is advanced so next sum of 0's and
+ / 1's may be saved */
+ }
+
+ /* The nested loops below perform the filtering for the remaining rows */
+
+ addr_v = (y_start + 2) * width; /* advance addr_v to the next row
+ / (corresponding to pell0)*/
+ /* The outer loop steps throught the rows. */
+ for (row_cntr = (y_blk_start + BLKSIZE) - (y_start + 2); row_cntr > 0; row_cntr--)
+ {
+ Rec_Y_ptr = &Rec_Y[addr_v + x_start]; /* advance pointer to
+ /the old pell0, which has become the new pelc0 */
+ addr_v += width; /* move addr_v down 1 row */
+ sum_V_ptr = &sum_v[0]; /* re-initializing pointer */
+ sign_V_ptr = &sign_v[0]; /* re-initilaizing pointer */
+ pelp = &oldrow[0]; /* re-initializing pointer */
+
+ pelu = *pelp; /* setting pelu0 to old value of pelc0 */
+ *pelp++ = pelc = *Rec_Y_ptr;
+ pell = *(Rec_Y_ptr + width);
+ Rec_Y_ptr++;
+ *sum_V_ptr++ = pelu + (pelc << 1) + pell;
+ *sign_V_ptr++ = INDEX(pelu, thr) + INDEX(pelc, thr) +
+ INDEX(pell, thr);
+
+ pelu = *pelp; /* setting pelu1 to old value of pelc1 */
+ *pelp++ = pelc = *Rec_Y_ptr;
+ pell = *(Rec_Y_ptr + width);
+ Rec_Y_ptr++;
+ *sum_V_ptr++ = pelu + (pelc << 1) + pell;
+ *sign_V_ptr++ = INDEX(pelu, thr) + INDEX(pelc, thr) +
+ INDEX(pell, thr);
+ /* The inner loop steps through the columns */
+ for (col_cntr = (x_blk_start + BLKSIZE - 1) - x_start; col_cntr > 0; col_cntr--)
+ {
+ pelu = *pelp; /* setting pelu2 to old value of pelc2 */
+ *pelp++ = pelc = *Rec_Y_ptr;
+ pell = *(Rec_Y_ptr + width);
+
+ *sum_V_ptr = pelu + (pelc << 1) + pell;
+ *sign_V_ptr = INDEX(pelu, thr) + INDEX(pelc, thr) +
+ INDEX(pell, thr);
+
+ sum1 = *(sign_V_ptr - 2) + *(sign_V_ptr - 1) + *sign_V_ptr;
+ /* the "if" statement below is the same as the one in
+ / the first loop */
+ if (sum1 == 0 || sum1 == 9)
+ {
+ sum = (*(sum_V_ptr - 2) + (*(sum_V_ptr - 1) << 1) +
+ *sum_V_ptr + 8) >> 4;
+
+ Rec_Y_ptr--;
+ if ((int)(*Rec_Y_ptr - sum) > max_diff)
+ {
+ sum = *Rec_Y_ptr - max_diff;
+ }
+ else if ((int)(*Rec_Y_ptr - sum) < -max_diff)
+ {
+ sum = *Rec_Y_ptr + max_diff;
+ }
+ *Rec_Y_ptr++ = (uint8) sum;
+ }
+ Rec_Y_ptr++;
+ sum_V_ptr++;
+ sign_V_ptr++;
+ }
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.cpp
new file mode 100644
index 0000000..37250f3
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.cpp
@@ -0,0 +1,1001 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "bitstream.h"
+#include "mp4dec_lib.h"
+
+
+#define OSCL_DISABLE_WARNING_CONDITIONAL_IS_CONSTANT
+/* to mask the n least significant bits of an integer */
+static const uint32 msk[33] =
+{
+ 0x00000000, 0x00000001, 0x00000003, 0x00000007,
+ 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
+ 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
+ 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
+ 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
+ 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
+ 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
+ 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
+ 0xffffffff
+};
+
+
+/* ======================================================================== */
+/* Function : BitstreamFillCache() */
+/* Date : 08/29/2000 */
+/* Purpose : Read more bitstream data into buffer & the 24-byte cache. */
+/* This function is different from BitstreamFillBuffer in */
+/* that the buffer is the frame-based buffer provided by */
+/* the application. */
+/* In/out : */
+/* Return : PV_SUCCESS if successed, PV_FAIL if failed. */
+/* Modified : 4/16/01 : removed return of PV_END_OF_BUFFER */
+/* ======================================================================== */
+PV_STATUS BitstreamFillCache(BitstreamDecVideo *stream)
+{
+ uint8 *bitstreamBuffer = stream->bitstreamBuffer;
+ uint8 *v;
+ int num_bits, i;
+
+ stream->curr_word |= (stream->next_word >> stream->incnt); // stream->incnt cannot be 32
+ stream->next_word <<= (31 - stream->incnt);
+ stream->next_word <<= 1;
+ num_bits = stream->incnt_next + stream->incnt;
+ if (num_bits >= 32)
+ {
+ stream->incnt_next -= (32 - stream->incnt);
+ stream->incnt = 32;
+ return PV_SUCCESS;
+ }
+ /* this check can be removed if there is additional extra 4 bytes at the end of the bitstream */
+ v = bitstreamBuffer + stream->read_point;
+
+ if (stream->read_point > stream->data_end_pos - 4)
+ {
+ if (stream->data_end_pos <= stream->read_point)
+ {
+ stream->incnt = num_bits;
+ stream->incnt_next = 0;
+ return PV_SUCCESS;
+ }
+
+ stream->next_word = 0;
+
+ for (i = 0; i < stream->data_end_pos - stream->read_point; i++)
+ {
+ stream->next_word |= (v[i] << ((3 - i) << 3));
+ }
+
+ stream->read_point = stream->data_end_pos;
+ stream->curr_word |= (stream->next_word >> num_bits); // this is safe
+
+ stream->next_word <<= (31 - num_bits);
+ stream->next_word <<= 1;
+ num_bits = i << 3;
+ stream->incnt += stream->incnt_next;
+ stream->incnt_next = num_bits - (32 - stream->incnt);
+ if (stream->incnt_next < 0)
+ {
+ stream->incnt += num_bits;
+ stream->incnt_next = 0;
+ }
+ else
+ {
+ stream->incnt = 32;
+ }
+ return PV_SUCCESS;
+ }
+
+ stream->next_word = ((uint32)v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3];
+ stream->read_point += 4;
+
+ stream->curr_word |= (stream->next_word >> num_bits); // this is safe
+ stream->next_word <<= (31 - num_bits);
+ stream->next_word <<= 1;
+ stream->incnt_next += stream->incnt;
+ stream->incnt = 32;
+ return PV_SUCCESS;
+}
+
+
+/* ======================================================================== */
+/* Function : BitstreamReset() */
+/* Date : 08/29/2000 */
+/* Purpose : Initialize the bitstream buffer for frame-based decoding. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* ======================================================================== */
+void BitstreamReset(BitstreamDecVideo *stream, uint8 *buffer, int32 buffer_size)
+{
+ /* set up frame-based bitstream buffer */
+ oscl_memset(stream, 0, sizeof(BitstreamDecVideo));
+ stream->data_end_pos = buffer_size;
+ stream->bitstreamBuffer = buffer;
+}
+
+
+/* ======================================================================== */
+/* Function : BitstreamOpen() */
+/* Purpose : Initialize the bitstream data structure. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* ======================================================================== */
+int BitstreamOpen(BitstreamDecVideo *stream, int)
+{
+ int buffer_size = 0;
+ /* set up linear bitstream buffer */
+// stream->currentBytePos = 0;
+ stream->data_end_pos = 0;
+
+ stream->incnt = 0;
+ stream->incnt_next = 0;
+ stream->bitcnt = 0;
+ stream->curr_word = stream->next_word = 0;
+ stream->read_point = stream->data_end_pos;
+ return buffer_size;
+}
+
+
+/* ======================================================================== */
+/* Function : BitstreamClose() */
+/* Purpose : Cleanup the bitstream data structure. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* ======================================================================== */
+void BitstreamClose(BitstreamDecVideo *)
+{
+ return;
+}
+
+
+/***********************************************************CommentBegin******
+*
+* -- BitstreamShowBits32HC
+* Shows 32 bits
+***********************************************************CommentEnd********/
+
+PV_STATUS BitstreamShowBits32HC(BitstreamDecVideo *stream, uint32 *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < 32)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word;
+ return status;
+}
+
+/***********************************************************CommentBegin******
+*
+* -- BitstreamShowBits32
+* Shows upto and including 31 bits
+***********************************************************CommentEnd********/
+PV_STATUS BitstreamShowBits32(BitstreamDecVideo *stream, int nbits, uint32 *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word >> (32 - nbits);
+ return status;
+}
+
+
+#ifndef PV_BS_INLINE
+/*========================================================================= */
+/* Function: BitstreamShowBits16() */
+/* Date: 12/18/2000 */
+/* Purpose: To see the next "nbits"(nbits<=16) bitstream bits */
+/* without advancing the read pointer */
+/* */
+/* =========================================================================*/
+PV_STATUS BitstreamShowBits16(BitstreamDecVideo *stream, int nbits, uint *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+
+ *code = stream->curr_word >> (32 - nbits);
+ return status;
+}
+
+
+/*========================================================================= */
+/* Function: BitstreamShow15Bits() */
+/* Date: 01/23/2001 */
+/* Purpose: To see the next 15 bitstream bits */
+/* without advancing the read pointer */
+/* */
+/* =========================================================================*/
+PV_STATUS BitstreamShow15Bits(BitstreamDecVideo *stream, uint *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < 15)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word >> 17;
+ return status;
+}
+/*========================================================================= */
+/* Function: BitstreamShow13Bits */
+/* Date: 050923 */
+/* Purpose: Faciliate and speed up showing 13 bit from bitstream */
+/* used in VlcTCOEFF decoding */
+/* Modified: */
+/* =========================================================================*/
+PV_STATUS BitstreamShow13Bits(BitstreamDecVideo *stream, uint *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < 13)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word >> 19;
+ return status;
+}
+
+uint BitstreamReadBits16_INLINE(BitstreamDecVideo *stream, int nbits)
+{
+ uint code;
+ PV_STATUS status;
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> (32 - nbits);
+ PV_BitstreamFlushBits(stream, nbits);
+ return code;
+}
+
+
+uint BitstreamRead1Bits_INLINE(BitstreamDecVideo *stream)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint code;
+
+
+ if (stream->incnt < 1)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> 31;
+ PV_BitstreamFlushBits(stream, 1);
+
+ return code;
+}
+
+#endif
+
+/* ======================================================================== */
+/* Function : BitstreamReadBits16() */
+/* Purpose : Read bits (nbits <=16) from bitstream buffer. */
+/* In/out : */
+/* Return : */
+/* ======================================================================== */
+uint BitstreamReadBits16(BitstreamDecVideo *stream, int nbits)
+{
+ uint code;
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> (32 - nbits);
+ PV_BitstreamFlushBits(stream, nbits);
+ return code;
+}
+
+/* ======================================================================== */
+/* Function : BitstreamRead1Bits() */
+/* Date : 10/23/2000 */
+/* Purpose : Faciliate and speed up reading 1 bit from bitstream. */
+/* In/out : */
+/* Return : */
+/* ======================================================================== */
+
+uint BitstreamRead1Bits(BitstreamDecVideo *stream)
+{
+ uint code;
+
+ if (stream->incnt < 1)
+ {
+ /* frame-based decoding */
+ BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> 31;
+ PV_BitstreamFlushBits(stream, 1);
+
+ return code;
+}
+
+/* ======================================================================== */
+/* Function : PV_BitstreamFlushBitsCheck() */
+/* Purpose : Flush nbits bits from bitstream buffer. Check for cache */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* ======================================================================== */
+PV_STATUS PV_BitstreamFlushBitsCheck(BitstreamDecVideo *stream, int nbits)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ stream->bitcnt += nbits;
+ stream->incnt -= nbits;
+ if (stream->incnt < 0)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+
+ if (stream->incnt < 0)
+ {
+ stream->bitcnt += stream->incnt;
+ stream->incnt = 0;
+ }
+ }
+ stream->curr_word <<= nbits;
+ return status;
+}
+
+/* ======================================================================== */
+/* Function : BitstreamReadBits32() */
+/* Purpose : Read bits from bitstream buffer. */
+/* In/out : */
+/* Return : */
+/* ======================================================================== */
+uint32 BitstreamReadBits32(BitstreamDecVideo *stream, int nbits)
+{
+ uint32 code;
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> (32 - nbits);
+ PV_BitstreamFlushBits(stream, nbits);
+ return code;
+}
+
+uint32 BitstreamReadBits32HC(BitstreamDecVideo *stream)
+{
+ uint32 code;
+
+ BitstreamShowBits32HC(stream, &code);
+ stream->bitcnt += 32;
+ stream->incnt = 0;
+ stream->curr_word = 0;
+ return code;
+}
+
+/* ======================================================================== */
+/* Function : BitstreamCheckEndBuffer() */
+/* Date : 03/30/2001 */
+/* Purpose : Check to see if we are at the end of buffer */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* ======================================================================== */
+PV_STATUS BitstreamCheckEndBuffer(BitstreamDecVideo *stream)
+{
+ if (stream->read_point >= stream->data_end_pos && stream->incnt <= 0) return PV_END_OF_VOP;
+ return PV_SUCCESS;
+}
+
+
+PV_STATUS PV_BitstreamShowBitsByteAlign(BitstreamDecVideo *stream, int nbits, uint32 *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ int n_stuffed;
+
+ n_stuffed = 8 - (stream->bitcnt & 0x7); /* 07/05/01 */
+
+ if (stream->incnt < (nbits + n_stuffed))
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+
+ *code = (stream->curr_word << n_stuffed) >> (32 - nbits);
+ return status;
+}
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+PV_STATUS PV_BitstreamShowBitsByteAlignNoForceStuffing(BitstreamDecVideo *stream, int nbits, uint32 *code)
+{
+ PV_STATUS status = PV_SUCCESS;
+
+ int n_stuffed;
+
+ n_stuffed = (8 - (stream->bitcnt & 0x7)) & 7;
+
+ if (stream->incnt < (nbits + n_stuffed))
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+
+ *code = (stream->curr_word << n_stuffed) >> (32 - nbits);
+ return status;
+}
+#endif
+
+PV_STATUS PV_BitstreamByteAlign(BitstreamDecVideo *stream)
+{
+ PV_STATUS status = PV_SUCCESS;
+ int n_stuffed;
+
+ n_stuffed = 8 - (stream->bitcnt & 0x7); /* 07/05/01 */
+
+ /* We have to make sure we have enough bits in the cache. 08/15/2000 */
+ if (stream->incnt < n_stuffed)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+
+
+ stream->bitcnt += n_stuffed;
+ stream->incnt -= n_stuffed;
+ stream->curr_word <<= n_stuffed;
+ if (stream->incnt < 0)
+ {
+ stream->bitcnt += stream->incnt;
+ stream->incnt = 0;
+ }
+ return status;
+}
+
+
+PV_STATUS BitstreamByteAlignNoForceStuffing(BitstreamDecVideo *stream)
+{
+ uint n_stuffed;
+
+ n_stuffed = (8 - (stream->bitcnt & 0x7)) & 0x7; /* 07/05/01 */
+
+ stream->bitcnt += n_stuffed;
+ stream->incnt -= n_stuffed;
+
+ if (stream->incnt < 0)
+ {
+ stream->bitcnt += stream->incnt;
+ stream->incnt = 0;
+ }
+ stream->curr_word <<= n_stuffed;
+ return PV_SUCCESS;
+}
+
+
+/* ==================================================================== */
+/* Function : getPointer() */
+/* Date : 10/98 */
+/* Purpose : get current position of file pointer */
+/* In/out : */
+/* Return : */
+/* ==================================================================== */
+int32 getPointer(BitstreamDecVideo *stream)
+{
+ return stream->bitcnt;
+}
+
+
+
+
+/* ====================================================================== /
+Function : movePointerTo()
+Date : 05/14/2004
+Purpose : move bitstream pointer to a desired position
+In/out :
+Return :
+Modified :
+/ ====================================================================== */
+PV_STATUS movePointerTo(BitstreamDecVideo *stream, int32 pos)
+{
+ int32 byte_pos;
+ if (pos < 0)
+ {
+ pos = 0;
+ }
+
+ byte_pos = pos >> 3;
+
+ if (byte_pos > stream->data_end_pos)
+ {
+ byte_pos = stream->data_end_pos;
+ }
+
+ stream->read_point = byte_pos & -4;
+ stream->bitcnt = stream->read_point << 3;;
+ stream->curr_word = 0;
+ stream->next_word = 0;
+ stream->incnt = 0;
+ stream->incnt_next = 0;
+ BitstreamFillCache(stream);
+ PV_BitstreamFlushBits(stream, ((pos & 0x7) + ((byte_pos & 0x3) << 3)));
+ return PV_SUCCESS;
+}
+
+
+/* ======================================================================== */
+/* Function : validStuffing() */
+/* Date : 04/11/2000 */
+/* Purpose : Check whether we have valid stuffing at current position. */
+/* In/out : */
+/* Return : PV_TRUE if successed, PV_FALSE if failed. */
+/* Modified : 12/18/2000 : changed the pattern type to uint */
+/* 04/01/2001 : removed PV_END_OF_BUFFER */
+/* ======================================================================== */
+Bool validStuffing(BitstreamDecVideo *stream)
+{
+ uint n_stuffed;
+ uint pattern;
+
+
+ n_stuffed = 8 - (stream->bitcnt & 0x7);
+ BitstreamShowBits16(stream, n_stuffed, &pattern);
+ if (pattern == msk[n_stuffed-1]) return PV_TRUE;
+ return PV_FALSE;
+}
+#ifdef PV_ANNEX_IJKT_SUPPORT
+Bool validStuffing_h263(BitstreamDecVideo *stream)
+{
+ uint n_stuffed;
+ uint pattern;
+
+
+ n_stuffed = (8 - (stream->bitcnt & 0x7)) & 7; // stream->incnt % 8
+ if (n_stuffed == 0)
+ {
+ return PV_TRUE;
+ }
+ BitstreamShowBits16(stream, n_stuffed, &pattern);
+ if (pattern == 0) return PV_TRUE;
+ return PV_FALSE;
+}
+#endif
+
+
+/* ======================================================================== */
+/* Function : PVSearchNextH263Frame() */
+/* Date : 04/08/2005 */
+/* Purpose : search for 0x00 0x00 0x80 */
+/* In/out : */
+/* Return : PV_SUCCESS if succeeded or PV_END_OF_VOP if failed */
+/* Modified : */
+/* ======================================================================== */
+PV_STATUS PVSearchNextH263Frame(BitstreamDecVideo *stream)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint8 *ptr;
+ int32 i;
+ int32 initial_byte_aligned_position = (stream->bitcnt + 7) >> 3;
+
+ ptr = stream->bitstreamBuffer + initial_byte_aligned_position;
+
+ i = PVLocateH263FrameHeader(ptr, stream->data_end_pos - initial_byte_aligned_position);
+ if (stream->data_end_pos <= initial_byte_aligned_position + i)
+ {
+ status = PV_END_OF_VOP;
+ }
+ (void)movePointerTo(stream, ((i + initial_byte_aligned_position) << 3)); /* ptr + i */
+ return status;
+}
+
+
+/* ======================================================================== */
+/* Function : PVSearchNextM4VFrame() */
+/* Date : 04/08/2005 */
+/* Purpose : search for 0x00 0x00 0x01 and move the pointer to the */
+/* beginning of the start code */
+/* In/out : */
+/* Return : PV_SUCCESS if succeeded or PV_END_OF_VOP if failed */
+/* Modified : */
+/* ======================================================================== */
+
+PV_STATUS PVSearchNextM4VFrame(BitstreamDecVideo *stream)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint8 *ptr;
+ int32 i;
+ int32 initial_byte_aligned_position = (stream->bitcnt + 7) >> 3;
+
+ ptr = stream->bitstreamBuffer + initial_byte_aligned_position;
+
+ i = PVLocateFrameHeader(ptr, stream->data_end_pos - initial_byte_aligned_position);
+ if (stream->data_end_pos <= initial_byte_aligned_position + i)
+ {
+ status = PV_END_OF_VOP;
+ }
+ (void)movePointerTo(stream, ((i + initial_byte_aligned_position) << 3)); /* ptr + i */
+ return status;
+}
+
+
+
+void PVLocateM4VFrameBoundary(BitstreamDecVideo *stream)
+{
+ uint8 *ptr;
+ int32 byte_pos = (stream->bitcnt >> 3);
+
+ stream->searched_frame_boundary = 1;
+ ptr = stream->bitstreamBuffer + byte_pos;
+
+ stream->data_end_pos = PVLocateFrameHeader(ptr, (int32)stream->data_end_pos - byte_pos) + byte_pos;
+}
+
+void PVLocateH263FrameBoundary(BitstreamDecVideo *stream)
+{
+ uint8 *ptr;
+ int32 byte_pos = (stream->bitcnt >> 3);
+
+ stream->searched_frame_boundary = 1;
+ ptr = stream->bitstreamBuffer + byte_pos;
+
+ stream->data_end_pos = PVLocateH263FrameHeader(ptr, (int32)stream->data_end_pos - byte_pos) + byte_pos;
+}
+
+/* ======================================================================== */
+/* Function : quickSearchVideoPacketHeader() */
+/* Date : 05/08/2000 */
+/* Purpose : Quick search for the next video packet header */
+/* In/out : */
+/* Return : PV_TRUE if successed, PV_FALSE if failed. */
+/* Modified : */
+/* ======================================================================== */
+PV_STATUS quickSearchVideoPacketHeader(BitstreamDecVideo *stream, int marker_length)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint32 tmpvar;
+
+
+ if (stream->searched_frame_boundary == 0)
+ {
+ PVLocateM4VFrameBoundary(stream);
+ }
+
+ do
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) break;
+ PV_BitstreamShowBitsByteAlign(stream, marker_length, &tmpvar);
+ if (tmpvar == RESYNC_MARKER) break;
+ PV_BitstreamFlushBits(stream, 8);
+ }
+ while (status == PV_SUCCESS);
+
+ return status;
+}
+#ifdef PV_ANNEX_IJKT_SUPPORT
+PV_STATUS quickSearchH263SliceHeader(BitstreamDecVideo *stream)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint32 tmpvar;
+
+
+ if (stream->searched_frame_boundary == 0)
+ {
+ PVLocateH263FrameBoundary(stream);
+ }
+
+ do
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) break;
+ PV_BitstreamShowBitsByteAlignNoForceStuffing(stream, 17, &tmpvar);
+ if (tmpvar == RESYNC_MARKER) break;
+ PV_BitstreamFlushBits(stream, 8);
+ }
+ while (status == PV_SUCCESS);
+
+ return status;
+}
+#endif
+/* ======================================================================== */
+/* The following functions are for Error Concealment. */
+/* ======================================================================== */
+
+/****************************************************/
+// 01/22/99 Quick search of Resync Marker
+// (actually the first part of it, i.e. 16 0's and a 1.
+
+/* We are not using the fastest algorithm possible. What this function does is
+to locate 11 consecutive 0's and then check if the 5 bits before them and
+the 1 bit after them are all 1's.
+*/
+
+// Table used for quick search of markers. Gives the last `1' in
+// 4 bits. The MSB is bit #1, the LSB is bit #4.
+const int lastOne[] =
+{
+ 0, 4, 3, 4, 2, 4, 3, 4,
+ 1, 4, 3, 4, 2, 4, 3, 4
+};
+
+// Table used for quick search of markers. Gives the last `0' in
+// 4 bits. The MSB is bit #1, the LSB is bit #4.
+/*const int lastZero[]=
+{
+ 4, 3, 4, 2, 4, 3, 4, 1,
+ 4, 3, 4, 2, 4, 3, 4, 0
+};
+*/
+// Table used for quick search of markers. Gives the first `0' in
+// 4 bits. The MSB is bit #1, the LSB is bit #4.
+const int firstZero[] =
+{
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 3, 3, 4, 0
+};
+
+// Table used for quick search of markers. Gives the first `1' in
+// 4 bits. The MSB is bit #1, the LSB is bit #4.
+const int firstOne[] =
+{
+ 0, 4, 3, 3, 2, 2, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+
+/* ======================================================================== */
+/* Function : quickSearchMarkers() */
+/* Date : 01/25/99 */
+/* Purpose : Quick search for Motion marker */
+/* In/out : */
+/* Return : Boolean true of false */
+/* Modified : 12/18/2000 : 32-bit version */
+/* ======================================================================== */
+PV_STATUS quickSearchMotionMarker(BitstreamDecVideo *stream)
+// MM: (11111000000000001)
+{
+ PV_STATUS status;
+ uint32 tmpvar, tmpvar2;
+
+ if (stream->searched_frame_boundary == 0)
+ {
+ PVLocateM4VFrameBoundary(stream);
+ }
+
+ while (TRUE)
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) return PV_END_OF_VOP;
+
+ BitstreamShowBits32(stream, 17, &tmpvar);
+ if (!tmpvar) return PV_FAIL;
+
+ if (tmpvar & 1) // Check if the 17th bit from the curr bit pos is a '1'
+ {
+ if (tmpvar == MOTION_MARKER_COMB)
+ {
+ return PV_SUCCESS; // Found
+ }
+ else
+ {
+ tmpvar >>= 1;
+ tmpvar &= 0xF;
+ PV_BitstreamFlushBits(stream, (int)(12 + firstZero[tmpvar]));
+ }
+ }
+ else
+ {
+ // 01/25/99 Get the first 16 bits
+ tmpvar >>= 1;
+ tmpvar2 = tmpvar & 0xF;
+
+ // 01/26/99 Check bits #13 ~ #16
+ if (tmpvar2)
+ {
+ PV_BitstreamFlushBits(stream, (int)(7 + lastOne[tmpvar2]));
+ }
+ else
+ {
+ tmpvar >>= 4;
+ tmpvar2 = tmpvar & 0xF;
+
+ // 01/26/99 Check bits #9 ~ #12
+ if (tmpvar2)
+ {
+ PV_BitstreamFlushBits(stream, (int)(3 + lastOne[tmpvar2]));
+ }
+ else
+ {
+ tmpvar >>= 4;
+ tmpvar2 = tmpvar & 0xF;
+
+ // 01/26/99 Check bits #5 ~ #8
+ // We don't need to check further
+ // for the first 5 bits should be all 1's
+ if (lastOne[tmpvar2] < 2)
+ {
+ /* we already have too many consecutive 0's. */
+ /* Go directly pass the last of the 17 bits. */
+ PV_BitstreamFlushBits(stream, 17);
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, (int)(lastOne[tmpvar2] - 1));
+ }
+ }
+ }
+ }
+
+ }
+}
+
+/* ======================================================================== */
+/* Function : quickSearchDCM() */
+/* Date : 01/22/99 */
+/* Purpose : Quick search for DC Marker */
+/* We are not using the fastest algorithm possible. What this */
+/* function does is to locate 11 consecutive 0's and then */
+/* check if the 7 bits before them and the 1 bit after them */
+/* are correct. (actually the first part of it, i.e. 16 0's */
+/* and a 1. */
+/* In/out : */
+/* Return : Boolean true of false */
+/* Modified : 12/18/2000 : 32-bit version */
+/* ======================================================================== */
+PV_STATUS quickSearchDCM(BitstreamDecVideo *stream)
+// DCM: (110 1011 0000 0000 0001)
+{
+ PV_STATUS status;
+ uint32 tmpvar, tmpvar2;
+
+ if (stream->searched_frame_boundary == 0)
+ {
+ PVLocateM4VFrameBoundary(stream);
+ }
+
+ while (TRUE)
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) return PV_END_OF_VOP;
+ BitstreamShowBits32(stream, 19, &tmpvar);
+
+ if (tmpvar & 1) // Check if the 17th bit from the curr bit pos is a '1'
+ {
+ if (tmpvar == DC_MARKER)
+ {
+ return PV_SUCCESS; // Found
+ }
+ else
+ {
+ // 01/25/99 We treat the last of the 19 bits as its 7th bit (which is
+ // also a `1'
+ PV_BitstreamFlushBits(stream, 12);
+ }
+ }
+ else
+ {
+ tmpvar >>= 1;
+ tmpvar2 = tmpvar & 0xF;
+
+ if (tmpvar2)
+ {
+ PV_BitstreamFlushBits(stream, (int)(7 + lastOne[tmpvar2]));
+ }
+ else
+ {
+ tmpvar >>= 4;
+ tmpvar2 = tmpvar & 0xF;
+ if (tmpvar2)
+ {
+ PV_BitstreamFlushBits(stream, (int)(3 + lastOne[tmpvar2]));
+ }
+ else
+ {
+ tmpvar >>= 4;
+ tmpvar2 = tmpvar & 0xF;
+ if (lastOne[tmpvar2] < 2)
+ {
+ /* we already have too many consecutive 0's. */
+ /* Go directly pass the last of the 17 bits. */
+ PV_BitstreamFlushBits(stream, 19);
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, (int)(lastOne[tmpvar2] - 1));
+ }
+ }
+ }
+ }
+ }
+}
+
+/* ======================================================================== */
+/* Function : quickSearchGOBHeader() 0000 0000 0000 0000 1 */
+/* Date : 07/06/01 */
+/* Purpose : Quick search of GOBHeader (not byte aligned) */
+/* In/out : */
+/* Return : Integer value indicates type of marker found */
+/* Modified : */
+/* ======================================================================== */
+PV_STATUS quickSearchGOBHeader(BitstreamDecVideo *stream)
+{
+ PV_STATUS status;
+ int byte0, byte1, byte2, shift, tmpvar;
+
+ BitstreamByteAlignNoForceStuffing(stream);
+
+ if (stream->searched_frame_boundary == 0)
+ {
+ PVLocateH263FrameBoundary(stream);
+ }
+
+ while (TRUE)
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) return PV_END_OF_VOP;
+
+ if (stream->incnt < 24)
+ {
+ status = BitstreamFillCache(stream);
+ }
+
+
+ byte1 = (stream->curr_word << 8) >> 24;
+ if (byte1 == 0)
+ {
+ byte2 = (stream->curr_word << 16) >> 24;
+ if (byte2)
+ {
+ tmpvar = byte2 >> 4;
+
+ if (tmpvar)
+ {
+ shift = 9 - firstOne[tmpvar];
+ }
+ else
+ {
+ shift = 5 - firstOne[byte2];
+ }
+ byte0 = stream->curr_word >> 24;
+ if ((byte0 & msk[shift]) == 0)
+ {
+ PV_BitstreamFlushBits(stream, 8 - shift);
+ return PV_SUCCESS;
+ }
+ PV_BitstreamFlushBits(stream, 8); /* third_byte is not zero */
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, 8);
+ }
+}
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.h b/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.h
new file mode 100644
index 0000000..d52fa873
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/bitstream.h
@@ -0,0 +1,174 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef _BITSTREAM_D_H_
+#define _BITSTREAM_D_H_
+
+#include "mp4dec_lib.h" /* video decoder function prototypes */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#define PV_BS_INLINE /* support inline bitstream functions */
+
+#define PV_BitstreamFlushBits(A,B) {(A)->bitcnt += (B); (A)->incnt -= (B); (A)->curr_word <<= (B);}
+
+ PV_STATUS BitstreamFillBuffer(BitstreamDecVideo *stream);
+ PV_STATUS BitstreamFillCache(BitstreamDecVideo *stream);
+ void BitstreamReset(BitstreamDecVideo *stream, uint8 *buffer, int32 buffer_size);
+ int BitstreamOpen(BitstreamDecVideo *stream, int layer);
+ void BitstreamClose(BitstreamDecVideo *stream);
+
+ PV_STATUS BitstreamShowBits32(BitstreamDecVideo *stream, int nbits, uint32 *code);
+ uint32 BitstreamReadBits32(BitstreamDecVideo *stream, int nbits);
+
+ uint BitstreamReadBits16(BitstreamDecVideo *stream, int nbits);
+ uint BitstreamRead1Bits(BitstreamDecVideo *stream);
+#ifndef PV_BS_INLINE
+ PV_STATUS BitstreamShowBits16(BitstreamDecVideo *stream, int nbits, uint *code);
+ PV_STATUS BitstreamShow15Bits(BitstreamDecVideo *stream, uint *code);
+ PV_STATUS BitstreamShow13Bits(BitstreamDecVideo *stream, uint *code);
+ uint BitstreamReadBits16_INLINE(BitstreamDecVideo *stream, int nbits);
+ uint BitstreamRead1Bits_INLINE(BitstreamDecVideo *stream);
+#else
+ __inline PV_STATUS BitstreamShowBits16(BitstreamDecVideo *stream, int nbits, uint *code)
+ {
+ PV_STATUS status = PV_SUCCESS;
+
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+
+ *code = stream->curr_word >> (32 - nbits);
+ return status;
+ }
+
+
+
+ /* =========================================================================*/
+ __inline PV_STATUS BitstreamShow15Bits(BitstreamDecVideo *stream, uint *code)
+ {
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < 15)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word >> 17;
+ return status;
+ }
+
+
+ __inline PV_STATUS BitstreamShow13Bits(BitstreamDecVideo *stream, uint *code)
+ {
+ PV_STATUS status = PV_SUCCESS;
+
+ if (stream->incnt < 13)
+ {
+ /* frame-based decoding */
+ status = BitstreamFillCache(stream);
+ }
+ *code = stream->curr_word >> 19;
+ return status;
+ }
+ __inline uint BitstreamReadBits16_INLINE(BitstreamDecVideo *stream, int nbits)
+ {
+ uint code;
+
+ if (stream->incnt < nbits)
+ {
+ /* frame-based decoding */
+ BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> (32 - nbits);
+ PV_BitstreamFlushBits(stream, nbits);
+ return code;
+ }
+
+
+ __inline uint BitstreamRead1Bits_INLINE(BitstreamDecVideo *stream)
+ {
+ uint code;
+
+ if (stream->incnt < 1)
+ {
+ /* frame-based decoding */
+ BitstreamFillCache(stream);
+ }
+ code = stream->curr_word >> 31;
+ PV_BitstreamFlushBits(stream, 1);
+
+ return code;
+ }
+
+#endif
+
+
+
+
+
+
+
+ PV_STATUS PV_BitstreamFlushBitsCheck(BitstreamDecVideo *stream, int nbits);
+
+ uint32 BitstreamReadBits32HC(BitstreamDecVideo *stream);
+ PV_STATUS BitstreamShowBits32HC(BitstreamDecVideo *stream, uint32 *code);
+
+
+
+ PV_STATUS BitstreamCheckEndBuffer(BitstreamDecVideo *stream);
+
+ PV_STATUS PV_BitstreamShowBitsByteAlign(BitstreamDecVideo *stream, int nbits, uint32 *code);
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ PV_STATUS PV_BitstreamShowBitsByteAlignNoForceStuffing(BitstreamDecVideo *stream, int nbits, uint32 *code);
+ Bool validStuffing_h263(BitstreamDecVideo *stream);
+ PV_STATUS quickSearchH263SliceHeader(BitstreamDecVideo *stream);
+#endif
+ PV_STATUS PV_BitstreamByteAlign(BitstreamDecVideo *stream);
+ PV_STATUS BitstreamByteAlignNoForceStuffing(BitstreamDecVideo *stream);
+ Bool validStuffing(BitstreamDecVideo *stream);
+
+ PV_STATUS movePointerTo(BitstreamDecVideo *stream, int32 pos);
+ PV_STATUS PVSearchNextM4VFrame(BitstreamDecVideo *stream);
+ PV_STATUS PVSearchNextH263Frame(BitstreamDecVideo *stream);
+ PV_STATUS quickSearchVideoPacketHeader(BitstreamDecVideo *stream, int marker_length);
+
+
+ /* for error concealment & soft-decoding */
+ void PVLocateM4VFrameBoundary(BitstreamDecVideo *stream);
+ void PVSearchH263FrameBoundary(BitstreamDecVideo *stream);
+
+ PV_STATUS quickSearchMotionMarker(BitstreamDecVideo *stream);
+ PV_STATUS quickSearchDCM(BitstreamDecVideo *stream);
+ PV_STATUS quickSearchGOBHeader(BitstreamDecVideo *stream);
+ void BitstreamShowBuffer(BitstreamDecVideo *stream, int32 startbit, int32 endbit, uint8 *bitBfr);
+
+ /* 10/8/98 New prototyps. */
+ int32 getPointer(BitstreamDecVideo *stream);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _BITSTREAM_D_H_ */
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/block_idct.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/block_idct.cpp
new file mode 100644
index 0000000..a75483a
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/block_idct.cpp
@@ -0,0 +1,911 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ [input_variable_name] = [description of the input to module, its type
+ definition, and length (when applicable)]
+
+ Local Stores/Buffers/Pointers Needed:
+ [local_store_name] = [description of the local store, its type
+ definition, and length (when applicable)]
+ [local_buffer_name] = [description of the local buffer, its type
+ definition, and length (when applicable)]
+ [local_ptr_name] = [description of the local pointer, its type
+ definition, and length (when applicable)]
+
+ Global Stores/Buffers/Pointers Needed:
+ [global_store_name] = [description of the global store, its type
+ definition, and length (when applicable)]
+ [global_buffer_name] = [description of the global buffer, its type
+ definition, and length (when applicable)]
+ [global_ptr_name] = [description of the global pointer, its type
+ definition, and length (when applicable)]
+
+ Outputs:
+ [return_variable_name] = [description of data/pointer returned
+ by module, its type definition, and length
+ (when applicable)]
+
+ Pointers and Buffers Modified:
+ [variable_bfr_ptr] points to the [describe where the
+ variable_bfr_ptr points to, its type definition, and length
+ (when applicable)]
+ [variable_bfr] contents are [describe the new contents of
+ variable_bfr]
+
+ Local Stores Modified:
+ [local_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+ Global Stores Modified:
+ [global_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+------------------------------------------------------------------------------
+ REQUIREMENTS
+
+------------------------------------------------------------------------------
+ REFERENCES
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE
+
+------------------------------------------------------------------------------
+ RESOURCES USED
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "idct.h"
+#include "motion_comp.h"
+
+#define OSCL_DISABLE_WARNING_CONV_POSSIBLE_LOSS_OF_DATA
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+/* private prototypes */
+static void idctrow(int16 *blk, uint8 *pred, uint8 *dst, int width);
+static void idctrow_intra(int16 *blk, PIXEL *, int width);
+static void idctcol(int16 *blk);
+
+#ifdef FAST_IDCT
+// mapping from nz_coefs to functions to be used
+
+
+// ARM4 does not allow global data when they are not constant hence
+// an array of function pointers cannot be considered as array of constants
+// (actual addresses are only known when the dll is loaded).
+// So instead of arrays of function pointers, we'll store here
+// arrays of rows or columns and then call the idct function
+// corresponding to such the row/column number:
+
+
+static void (*const idctcolVCA[10][4])(int16*) =
+{
+ {&idctcol1, &idctcol0, &idctcol0, &idctcol0},
+ {&idctcol1, &idctcol1, &idctcol0, &idctcol0},
+ {&idctcol2, &idctcol1, &idctcol0, &idctcol0},
+ {&idctcol3, &idctcol1, &idctcol0, &idctcol0},
+ {&idctcol3, &idctcol2, &idctcol0, &idctcol0},
+ {&idctcol3, &idctcol2, &idctcol1, &idctcol0},
+ {&idctcol3, &idctcol2, &idctcol1, &idctcol1},
+ {&idctcol3, &idctcol2, &idctcol2, &idctcol1},
+ {&idctcol3, &idctcol3, &idctcol2, &idctcol1},
+ {&idctcol4, &idctcol3, &idctcol2, &idctcol1}
+};
+
+
+static void (*const idctrowVCA[10])(int16*, uint8*, uint8*, int) =
+{
+ &idctrow1,
+ &idctrow2,
+ &idctrow2,
+ &idctrow2,
+ &idctrow2,
+ &idctrow3,
+ &idctrow4,
+ &idctrow4,
+ &idctrow4,
+ &idctrow4
+};
+
+
+static void (*const idctcolVCA2[16])(int16*) =
+{
+ &idctcol0, &idctcol4, &idctcol3, &idctcol4,
+ &idctcol2, &idctcol4, &idctcol3, &idctcol4,
+ &idctcol1, &idctcol4, &idctcol3, &idctcol4,
+ &idctcol2, &idctcol4, &idctcol3, &idctcol4
+};
+
+static void (*const idctrowVCA2[8])(int16*, uint8*, uint8*, int) =
+{
+ &idctrow1, &idctrow4, &idctrow3, &idctrow4,
+ &idctrow2, &idctrow4, &idctrow3, &idctrow4
+};
+
+static void (*const idctrowVCA_intra[10])(int16*, PIXEL *, int) =
+{
+ &idctrow1_intra,
+ &idctrow2_intra,
+ &idctrow2_intra,
+ &idctrow2_intra,
+ &idctrow2_intra,
+ &idctrow3_intra,
+ &idctrow4_intra,
+ &idctrow4_intra,
+ &idctrow4_intra,
+ &idctrow4_intra
+};
+
+static void (*const idctrowVCA2_intra[8])(int16*, PIXEL *, int) =
+{
+ &idctrow1_intra, &idctrow4_intra, &idctrow3_intra, &idctrow4_intra,
+ &idctrow2_intra, &idctrow4_intra, &idctrow3_intra, &idctrow4_intra
+};
+#endif
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+void MBlockIDCT(VideoDecData *video)
+{
+ Vop *currVop = video->currVop;
+ MacroBlock *mblock = video->mblock;
+ PIXEL *c_comp;
+ PIXEL *cu_comp;
+ PIXEL *cv_comp;
+ int x_pos = video->mbnum_col;
+ int y_pos = video->mbnum_row;
+ int width, width_uv;
+ int32 offset;
+ width = video->width;
+ width_uv = width >> 1;
+ offset = (int32)(y_pos << 4) * width + (x_pos << 4);
+
+ c_comp = currVop->yChan + offset;
+ cu_comp = currVop->uChan + (offset >> 2) + (x_pos << 2);
+ cv_comp = currVop->vChan + (offset >> 2) + (x_pos << 2);
+
+ BlockIDCT_intra(mblock, c_comp, 0, width);
+ BlockIDCT_intra(mblock, c_comp + 8, 1, width);
+ BlockIDCT_intra(mblock, c_comp + (width << 3), 2, width);
+ BlockIDCT_intra(mblock, c_comp + (width << 3) + 8, 3, width);
+ BlockIDCT_intra(mblock, cu_comp, 4, width_uv);
+ BlockIDCT_intra(mblock, cv_comp, 5, width_uv);
+}
+
+
+void BlockIDCT_intra(
+ MacroBlock *mblock, PIXEL *c_comp, int comp, int width)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int16 *coeff_in = mblock->block[comp];
+#ifdef INTEGER_IDCT
+#ifdef FAST_IDCT /* VCA IDCT using nzcoefs and bitmaps*/
+ int i, bmapr;
+ int nz_coefs = mblock->no_coeff[comp];
+ uint8 *bitmapcol = mblock->bitmapcol[comp];
+ uint8 bitmaprow = mblock->bitmaprow[comp];
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ if (nz_coefs <= 10)
+ {
+ bmapr = (nz_coefs - 1);
+
+ (*(idctcolVCA[bmapr]))(coeff_in);
+ (*(idctcolVCA[bmapr][1]))(coeff_in + 1);
+ (*(idctcolVCA[bmapr][2]))(coeff_in + 2);
+ (*(idctcolVCA[bmapr][3]))(coeff_in + 3);
+
+ (*idctrowVCA_intra[nz_coefs-1])(coeff_in, c_comp, width);
+ }
+ else
+ {
+ i = 8;
+ while (i--)
+ {
+ bmapr = (int)bitmapcol[i];
+ if (bmapr)
+ {
+ if ((bmapr&0xf) == 0) /* 07/18/01 */
+ {
+ (*(idctcolVCA2[bmapr>>4]))(coeff_in + i);
+ }
+ else
+ {
+ idctcol(coeff_in + i);
+ }
+ }
+ }
+ if ((bitmapcol[4] | bitmapcol[5] | bitmapcol[6] | bitmapcol[7]) == 0)
+ {
+ bitmaprow >>= 4;
+ (*(idctrowVCA2_intra[(int)bitmaprow]))(coeff_in, c_comp, width);
+ }
+ else
+ {
+ idctrow_intra(coeff_in, c_comp, width);
+ }
+ }
+#else
+ void idct_intra(int *block, uint8 *comp, int width);
+ idct_intra(coeff_in, c_comp, width);
+#endif
+#else
+ void idctref_intra(int *block, uint8 *comp, int width);
+ idctref_intra(coeff_in, c_comp, width);
+#endif
+
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+/* 08/04/05, no residue, just copy from pred to output */
+void Copy_Blk_to_Vop(uint8 *dst, uint8 *pred, int width)
+{
+ /* copy 4 bytes at a time */
+ width -= 4;
+ *((uint32*)dst) = *((uint32*)pred);
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+ *((uint32*)(dst += width)) = *((uint32*)(pred += 12));
+ *((uint32*)(dst += 4)) = *((uint32*)(pred += 4));
+
+ return ;
+}
+
+/* 08/04/05 compute IDCT and add prediction at the end */
+void BlockIDCT(
+ uint8 *dst, /* destination */
+ uint8 *pred, /* prediction block, pitch 16 */
+ int16 *coeff_in, /* DCT data, size 64 */
+ int width, /* width of dst */
+ int nz_coefs,
+ uint8 *bitmapcol,
+ uint8 bitmaprow
+)
+{
+#ifdef INTEGER_IDCT
+#ifdef FAST_IDCT /* VCA IDCT using nzcoefs and bitmaps*/
+ int i, bmapr;
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ if (nz_coefs <= 10)
+ {
+ bmapr = (nz_coefs - 1);
+ (*(idctcolVCA[bmapr]))(coeff_in);
+ (*(idctcolVCA[bmapr][1]))(coeff_in + 1);
+ (*(idctcolVCA[bmapr][2]))(coeff_in + 2);
+ (*(idctcolVCA[bmapr][3]))(coeff_in + 3);
+
+ (*idctrowVCA[nz_coefs-1])(coeff_in, pred, dst, width);
+ return ;
+ }
+ else
+ {
+ i = 8;
+
+ while (i--)
+ {
+ bmapr = (int)bitmapcol[i];
+ if (bmapr)
+ {
+ if ((bmapr&0xf) == 0) /* 07/18/01 */
+ {
+ (*(idctcolVCA2[bmapr>>4]))(coeff_in + i);
+ }
+ else
+ {
+ idctcol(coeff_in + i);
+ }
+ }
+ }
+ if ((bitmapcol[4] | bitmapcol[5] | bitmapcol[6] | bitmapcol[7]) == 0)
+ {
+ (*(idctrowVCA2[bitmaprow>>4]))(coeff_in, pred, dst, width);
+ }
+ else
+ {
+ idctrow(coeff_in, pred, dst, width);
+ }
+ return ;
+ }
+#else // FAST_IDCT
+ void idct(int *block, uint8 *pred, uint8 *dst, int width);
+ idct(coeff_in, pred, dst, width);
+ return;
+#endif // FAST_IDCT
+#else // INTEGER_IDCT
+ void idctref(int *block, uint8 *pred, uint8 *dst, int width);
+ idctref(coeff_in, pred, dst, width);
+ return;
+#endif // INTEGER_IDCT
+
+}
+/*----------------------------------------------------------------------------
+; End Function: block_idct
+----------------------------------------------------------------------------*/
+
+
+/****************************************************************************/
+
+/*
+------------------------------------------------------------------------------
+ FUNCTION NAME: idctrow
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS FOR idctrow
+
+ Inputs:
+ [input_variable_name] = [description of the input to module, its type
+ definition, and length (when applicable)]
+
+ Local Stores/Buffers/Pointers Needed:
+ [local_store_name] = [description of the local store, its type
+ definition, and length (when applicable)]
+ [local_buffer_name] = [description of the local buffer, its type
+ definition, and length (when applicable)]
+ [local_ptr_name] = [description of the local pointer, its type
+ definition, and length (when applicable)]
+
+ Global Stores/Buffers/Pointers Needed:
+ [global_store_name] = [description of the global store, its type
+ definition, and length (when applicable)]
+ [global_buffer_name] = [description of the global buffer, its type
+ definition, and length (when applicable)]
+ [global_ptr_name] = [description of the global pointer, its type
+ definition, and length (when applicable)]
+
+ Outputs:
+ [return_variable_name] = [description of data/pointer returned
+ by module, its type definition, and length
+ (when applicable)]
+
+ Pointers and Buffers Modified:
+ [variable_bfr_ptr] points to the [describe where the
+ variable_bfr_ptr points to, its type definition, and length
+ (when applicable)]
+ [variable_bfr] contents are [describe the new contents of
+ variable_bfr]
+
+ Local Stores Modified:
+ [local_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+ Global Stores Modified:
+ [global_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION FOR idctrow
+
+------------------------------------------------------------------------------
+ REQUIREMENTS FOR idctrow
+
+------------------------------------------------------------------------------
+ REFERENCES FOR idctrow
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE FOR idctrow
+
+------------------------------------------------------------------------------
+ RESOURCES USED FOR idctrow
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; Function Code FOR idctrow
+----------------------------------------------------------------------------*/
+void idctrow(
+ int16 *blk, uint8 *pred, uint8 *dst, int width
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+ int i = 8;
+ uint32 pred_word, dst_word;
+ int res, res2;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* row (horizontal) IDCT
+ *
+ * 7 pi 1 dst[k] = sum c[l] * src[l] * cos( -- *
+ * ( k + - ) * l ) l=0 8 2
+ *
+ * where: c[0] = 128 c[1..7] = 128*sqrt(2) */
+
+ /* preset the offset, such that we can take advantage pre-offset addressing mode */
+ width -= 4;
+ dst -= width;
+ pred -= 12;
+ blk -= 8;
+
+ while (i--)
+ {
+ x1 = (int32)blk[12] << 8;
+ blk[12] = 0;
+ x2 = blk[14];
+ blk[14] = 0;
+ x3 = blk[10];
+ blk[10] = 0;
+ x4 = blk[9];
+ blk[9] = 0;
+ x5 = blk[15];
+ blk[15] = 0;
+ x6 = blk[13];
+ blk[13] = 0;
+ x7 = blk[11];
+ blk[11] = 0;
+ x0 = ((*(blk += 8)) << 8) + 8192;
+ blk[0] = 0; /* for proper rounding in the fourth stage */
+
+ /* first stage */
+ x8 = W7 * (x4 + x5) + 4;
+ x4 = (x8 + (W1 - W7) * x4) >> 3;
+ x5 = (x8 - (W1 + W7) * x5) >> 3;
+ x8 = W3 * (x6 + x7) + 4;
+ x6 = (x8 - (W3 - W5) * x6) >> 3;
+ x7 = (x8 - (W3 + W5) * x7) >> 3;
+
+ /* second stage */
+ x8 = x0 + x1;
+ x0 -= x1;
+ x1 = W6 * (x3 + x2) + 4;
+ x2 = (x1 - (W2 + W6) * x2) >> 3;
+ x3 = (x1 + (W2 - W6) * x3) >> 3;
+ x1 = x4 + x6;
+ x4 -= x6;
+ x6 = x5 + x7;
+ x5 -= x7;
+
+ /* third stage */
+ x7 = x8 + x3;
+ x8 -= x3;
+ x3 = x0 + x2;
+ x0 -= x2;
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x4 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ pred_word = *((uint32*)(pred += 12)); /* read 4 bytes from pred */
+
+ res = (x7 + x1) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x3 + x2) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x0 + x4) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x8 + x6) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += width)) = dst_word; /* save 4 bytes to dst */
+
+ pred_word = *((uint32*)(pred += 4)); /* read 4 bytes from pred */
+
+ res = (x8 - x6) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x0 - x4) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x3 - x2) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x7 - x1) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += 4)) = dst_word; /* save 4 bytes to dst */
+ }
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+void idctrow_intra(
+ int16 *blk, PIXEL *comp, int width
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8, temp;
+ int i = 8;
+ int offset = width;
+ int32 word;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* row (horizontal) IDCT
+ *
+ * 7 pi 1 dst[k] = sum c[l] * src[l] * cos( -- *
+ * ( k + - ) * l ) l=0 8 2
+ *
+ * where: c[0] = 128 c[1..7] = 128*sqrt(2) */
+ while (i--)
+ {
+ x1 = (int32)blk[4] << 8;
+ blk[4] = 0;
+ x2 = blk[6];
+ blk[6] = 0;
+ x3 = blk[2];
+ blk[2] = 0;
+ x4 = blk[1];
+ blk[1] = 0;
+ x5 = blk[7];
+ blk[7] = 0;
+ x6 = blk[5];
+ blk[5] = 0;
+ x7 = blk[3];
+ blk[3] = 0;
+#ifndef FAST_IDCT
+ /* shortcut */ /* covered by idctrow1 01/9/2001 */
+ if (!(x1 | x2 | x3 | x4 | x5 | x6 | x7))
+ {
+ blk[0] = blk[1] = blk[2] = blk[3] = blk[4] = blk[5] = blk[6] = blk[7] = (blk[0] + 32) >> 6;
+ return;
+ }
+#endif
+ x0 = ((int32)blk[0] << 8) + 8192;
+ blk[0] = 0; /* for proper rounding in the fourth stage */
+
+ /* first stage */
+ x8 = W7 * (x4 + x5) + 4;
+ x4 = (x8 + (W1 - W7) * x4) >> 3;
+ x5 = (x8 - (W1 + W7) * x5) >> 3;
+ x8 = W3 * (x6 + x7) + 4;
+ x6 = (x8 - (W3 - W5) * x6) >> 3;
+ x7 = (x8 - (W3 + W5) * x7) >> 3;
+
+ /* second stage */
+ x8 = x0 + x1;
+ x0 -= x1;
+ x1 = W6 * (x3 + x2) + 4;
+ x2 = (x1 - (W2 + W6) * x2) >> 3;
+ x3 = (x1 + (W2 - W6) * x3) >> 3;
+ x1 = x4 + x6;
+ x4 -= x6;
+ x6 = x5 + x7;
+ x5 -= x7;
+
+ /* third stage */
+ x7 = x8 + x3;
+ x8 -= x3;
+ x3 = x0 + x2;
+ x0 -= x2;
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x4 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ word = ((x7 + x1) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x3 + x2) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+ temp = ((x0 + x4) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x8 + x6) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp)) = word;
+
+ word = ((x8 - x6) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x0 - x4) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+ temp = ((x3 - x2) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x7 - x1) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp + 4)) = word;
+ comp += offset;
+
+ blk += B_SIZE;
+ }
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+/*----------------------------------------------------------------------------
+; End Function: idctrow
+----------------------------------------------------------------------------*/
+
+
+/****************************************************************************/
+
+/*
+------------------------------------------------------------------------------
+ FUNCTION NAME: idctcol
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS FOR idctcol
+
+ Inputs:
+ [input_variable_name] = [description of the input to module, its type
+ definition, and length (when applicable)]
+
+ Local Stores/Buffers/Pointers Needed:
+ [local_store_name] = [description of the local store, its type
+ definition, and length (when applicable)]
+ [local_buffer_name] = [description of the local buffer, its type
+ definition, and length (when applicable)]
+ [local_ptr_name] = [description of the local pointer, its type
+ definition, and length (when applicable)]
+
+ Global Stores/Buffers/Pointers Needed:
+ [global_store_name] = [description of the global store, its type
+ definition, and length (when applicable)]
+ [global_buffer_name] = [description of the global buffer, its type
+ definition, and length (when applicable)]
+ [global_ptr_name] = [description of the global pointer, its type
+ definition, and length (when applicable)]
+
+ Outputs:
+ [return_variable_name] = [description of data/pointer returned
+ by module, its type definition, and length
+ (when applicable)]
+
+ Pointers and Buffers Modified:
+ [variable_bfr_ptr] points to the [describe where the
+ variable_bfr_ptr points to, its type definition, and length
+ (when applicable)]
+ [variable_bfr] contents are [describe the new contents of
+ variable_bfr]
+
+ Local Stores Modified:
+ [local_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+ Global Stores Modified:
+ [global_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION FOR idctcol
+
+------------------------------------------------------------------------------
+ REQUIREMENTS FOR idctcol
+
+------------------------------------------------------------------------------
+ REFERENCES FOR idctcol
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE FOR idctcol
+
+------------------------------------------------------------------------------
+ RESOURCES USED FOR idctcol
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; Function Code FOR idctcol
+----------------------------------------------------------------------------*/
+void idctcol(
+ int16 *blk
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* column (vertical) IDCT
+ *
+ * 7 pi 1 dst[8*k] = sum c[l] * src[8*l] *
+ * cos( -- * ( k + - ) * l ) l=0 8 2
+ *
+ * where: c[0] = 1/1024 c[1..7] = (1/1024)*sqrt(2) */
+ x1 = (int32)blk[32] << 11;
+ x2 = blk[48];
+ x3 = blk[16];
+ x4 = blk[8];
+ x5 = blk[56];
+ x6 = blk[40];
+ x7 = blk[24];
+#ifndef FAST_IDCT
+ /* shortcut */ /* covered by idctcolumn1 01/9/2001 */
+ if (!(x1 | x2 | x3 | x4 | x5 | x6 | x7))
+ {
+ blk[0] = blk[8] = blk[16] = blk[24] = blk[32] = blk[40] = blk[48] = blk[56]
+ = blk[0] << 3;
+ return;
+ }
+#endif
+
+ x0 = ((int32)blk[0] << 11) + 128;
+
+ /* first stage */
+ x8 = W7 * (x4 + x5);
+ x4 = x8 + (W1 - W7) * x4;
+ x5 = x8 - (W1 + W7) * x5;
+ x8 = W3 * (x6 + x7);
+ x6 = x8 - (W3 - W5) * x6;
+ x7 = x8 - (W3 + W5) * x7;
+
+ /* second stage */
+ x8 = x0 + x1;
+ x0 -= x1;
+ x1 = W6 * (x3 + x2);
+ x2 = x1 - (W2 + W6) * x2;
+ x3 = x1 + (W2 - W6) * x3;
+ x1 = x4 + x6;
+ x4 -= x6;
+ x6 = x5 + x7;
+ x5 -= x7;
+
+ /* third stage */
+ x7 = x8 + x3;
+ x8 -= x3;
+ x3 = x0 + x2;
+ x0 -= x2;
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x4 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ blk[0] = (x7 + x1) >> 8;
+ blk[8] = (x3 + x2) >> 8;
+ blk[16] = (x0 + x4) >> 8;
+ blk[24] = (x8 + x6) >> 8;
+ blk[32] = (x8 - x6) >> 8;
+ blk[40] = (x0 - x4) >> 8;
+ blk[48] = (x3 - x2) >> 8;
+ blk[56] = (x7 - x1) >> 8;
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+/*----------------------------------------------------------------------------
+; End Function: idctcol
+----------------------------------------------------------------------------*/
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/cal_dc_scaler.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/cal_dc_scaler.cpp
new file mode 100644
index 0000000..85889d3
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/cal_dc_scaler.cpp
@@ -0,0 +1,182 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ [input_variable_name] = [description of the input to module, its type
+ definition, and length (when applicable)]
+
+ Local Stores/Buffers/Pointers Needed:
+ [local_store_name] = [description of the local store, its type
+ definition, and length (when applicable)]
+ [local_buffer_name] = [description of the local buffer, its type
+ definition, and length (when applicable)]
+ [local_ptr_name] = [description of the local pointer, its type
+ definition, and length (when applicable)]
+
+ Global Stores/Buffers/Pointers Needed:
+ [global_store_name] = [description of the global store, its type
+ definition, and length (when applicable)]
+ [global_buffer_name] = [description of the global buffer, its type
+ definition, and length (when applicable)]
+ [global_ptr_name] = [description of the global pointer, its type
+ definition, and length (when applicable)]
+
+ Outputs:
+ [return_variable_name] = [description of data/pointer returned
+ by module, its type definition, and length
+ (when applicable)]
+
+ Pointers and Buffers Modified:
+ [variable_bfr_ptr] points to the [describe where the
+ variable_bfr_ptr points to, its type definition, and length
+ (when applicable)]
+ [variable_bfr] contents are [describe the new contents of
+ variable_bfr]
+
+ Local Stores Modified:
+ [local_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+ Global Stores Modified:
+ [global_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This module calculates the DC quantization scale according
+ to the incoming Q and type.
+
+------------------------------------------------------------------------------
+ REQUIREMENTS
+
+ [List requirements to be satisfied by this module.]
+
+------------------------------------------------------------------------------
+ REFERENCES
+
+ [List all references used in designing this module.]
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE
+
+------------------------------------------------------------------------------
+ RESOURCES USED
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "zigzag.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+int cal_dc_scaler(
+ int QP,
+ int type)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int dc_scaler;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ if (type == LUMINANCE_DC_TYPE)
+ {
+ if (QP > 0 && QP < 5) dc_scaler = 8;
+ else if (QP > 4 && QP < 9) dc_scaler = 2 * QP;
+ else if (QP > 8 && QP < 25) dc_scaler = QP + 8;
+ else dc_scaler = 2 * QP - 16;
+ }
+ else /* if (type == CHROMINANCE_DC_TYPE), there is no other types. */
+ {
+ if (QP > 0 && QP < 5) dc_scaler = 8;
+ else if (QP > 4 && QP < 25) dc_scaler = (QP + 13) >> 1;
+ else dc_scaler = QP - 6;
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return dc_scaler;
+}
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/chv_filter.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/chv_filter.cpp
new file mode 100644
index 0000000..6593b48
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/chv_filter.cpp
@@ -0,0 +1,654 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ [input_variable_name] = [description of the input to module, its type
+ definition, and length (when applicable)]
+
+ Local Stores/Buffers/Pointers Needed:
+ [local_store_name] = [description of the local store, its type
+ definition, and length (when applicable)]
+ [local_buffer_name] = [description of the local buffer, its type
+ definition, and length (when applicable)]
+ [local_ptr_name] = [description of the local pointer, its type
+ definition, and length (when applicable)]
+
+ Global Stores/Buffers/Pointers Needed:
+ [global_store_name] = [description of the global store, its type
+ definition, and length (when applicable)]
+ [global_buffer_name] = [description of the global buffer, its type
+ definition, and length (when applicable)]
+ [global_ptr_name] = [description of the global pointer, its type
+ definition, and length (when applicable)]
+
+ Outputs:
+ [return_variable_name] = [description of data/pointer returned
+ by module, its type definition, and length
+ (when applicable)]
+
+ Pointers and Buffers Modified:
+ [variable_bfr_ptr] points to the [describe where the
+ variable_bfr_ptr points to, its type definition, and length
+ (when applicable)]
+ [variable_bfr] contents are [describe the new contents of
+ variable_bfr]
+
+ Local Stores Modified:
+ [local_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+ Global Stores Modified:
+ [global_store_name] = [describe new contents, its type
+ definition, and length (when applicable)]
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ For fast Deblock filtering
+ Newer version (macroblock based processing)
+
+------------------------------------------------------------------------------
+ REQUIREMENTS
+
+ [List requirements to be satisfied by this module.]
+
+------------------------------------------------------------------------------
+ REFERENCES
+
+ [List all references used in designing this module.]
+
+------------------------------------------------------------------------------
+ PSEUDO-CODE
+
+------------------------------------------------------------------------------
+ RESOURCES USED
+ When the code is written for a specific target processor the
+ the resources used should be documented below.
+
+ STACK USAGE: [stack count for this module] + [variable to represent
+ stack usage for each subroutine called]
+
+ where: [stack usage variable] = stack usage for [subroutine
+ name] (see [filename].ext)
+
+ DATA MEMORY USED: x words
+
+ PROGRAM MEMORY USED: x words
+
+ CLOCK CYCLES: [cycle count equation for this module] + [variable
+ used to represent cycle count for each subroutine
+ called]
+
+ where: [cycle count variable] = cycle count for [subroutine
+ name] (see [filename].ext)
+
+------------------------------------------------------------------------------
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+
+#define OSCL_DISABLE_WARNING_CONV_POSSIBLE_LOSS_OF_DATA
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+//#define FILTER_LEN_8
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+
+----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef PV_POSTPROC_ON
+
+/*************************************************************************
+ Function prototype : void CombinedHorzVertFilter( uint8 *rec,
+ int width,
+ int height,
+ int *QP_store,
+ int chr,
+ uint8 *pp_mod)
+ Parameters :
+ rec : pointer to the decoded frame buffer.
+ width : width of decoded frame.
+ height : height of decoded frame
+ QP_store: pointer to the array of QP corresponding to the decoded frame.
+ It had only one value for each MB.
+ chr : luma or color indication
+ == 0 luma
+ == 1 color
+ pp_mod : The semphore used for deblocking
+
+ Remark : The function do the deblocking on decoded frames.
+ First based on the semaphore info., it is divided into hard and soft filtering.
+ To differentiate real and fake edge, it then check the difference with QP to
+ decide whether to do the filtering or not.
+
+*************************************************************************/
+
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+void CombinedHorzVertFilter(
+ uint8 *rec,
+ int width,
+ int height,
+ int16 *QP_store,
+ int chr,
+ uint8 *pp_mod)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int br, bc, mbr, mbc;
+ int QP = 1;
+ uint8 *ptr, *ptr_e;
+ int pp_w, pp_h;
+ int brwidth;
+
+ int jVal0, jVal1, jVal2;
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ pp_w = (width >> 3);
+ pp_h = (height >> 3);
+
+ for (mbr = 0; mbr < pp_h; mbr += 2) /* row of blocks */
+ {
+ brwidth = mbr * pp_w; /* number of blocks above current block row */
+ for (mbc = 0; mbc < pp_w; mbc += 2) /* col of blocks */
+ {
+ if (!chr)
+ QP = QP_store[(brwidth>>2) + (mbc>>1)]; /* QP is per MB based value */
+
+ /********* for each block **************/
+ /****************** Horiz. Filtering ********************/
+ for (br = mbr + 1; br < mbr + 3; br++) /* 2x2 blocks */
+ {
+ brwidth += pp_w; /* number of blocks above & left current block row */
+ /* the profile on ARM920T shows separate these two boundary check is faster than combine them */
+ if (br < pp_h) /* boundary : don't do it on the lowest row block */
+ for (bc = mbc; bc < mbc + 2; bc++)
+ {
+ /****** check boundary for deblocking ************/
+ if (bc < pp_w) /* boundary : don't do it on the most right col block */
+ {
+ ptr = rec + (brwidth << 6) + (bc << 3);
+ jVal0 = brwidth + bc;
+ if (chr) QP = QP_store[jVal0];
+
+ ptr_e = ptr + 8; /* pointer to where the loop ends */
+
+ if (((pp_mod[jVal0]&0x02)) && ((pp_mod[jVal0-pp_w]&0x02)))
+ {
+ /* Horiz Hard filter */
+ do
+ {
+ jVal0 = *(ptr - width); /* C */
+ jVal1 = *ptr; /* D */
+ jVal2 = jVal1 - jVal0;
+
+ if (((jVal2 > 0) && (jVal2 < (QP << 1)))
+ || ((jVal2 < 0) && (jVal2 > -(QP << 1)))) /* (D-C) compared with 2QP */
+ {
+ /* differentiate between real and fake edge */
+ jVal0 = ((jVal0 + jVal1) >> 1); /* (D+C)/2 */
+ *(ptr - width) = (uint8)(jVal0); /* C */
+ *ptr = (uint8)(jVal0); /* D */
+
+ jVal0 = *(ptr - (width << 1)); /* B */
+ jVal1 = *(ptr + width); /* E */
+ jVal2 = jVal1 - jVal0; /* E-B */
+
+ if (jVal2 > 0)
+ {
+ jVal0 += ((jVal2 + 3) >> 2);
+ jVal1 -= ((jVal2 + 3) >> 2);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* store B */
+ *(ptr + width) = (uint8)jVal1; /* store E */
+ }
+ else if (jVal2)
+ {
+ jVal0 -= ((3 - jVal2) >> 2);
+ jVal1 += ((3 - jVal2) >> 2);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* store B */
+ *(ptr + width) = (uint8)jVal1; /* store E */
+ }
+
+ jVal0 = *(ptr - (width << 1) - width); /* A */
+ jVal1 = *(ptr + (width << 1)); /* F */
+ jVal2 = jVal1 - jVal0; /* (F-A) */
+
+ if (jVal2 > 0)
+ {
+ jVal0 += ((jVal2 + 7) >> 3);
+ jVal1 -= ((jVal2 + 7) >> 3);
+ *(ptr - (width << 1) - width) = (uint8)(jVal0);
+ *(ptr + (width << 1)) = (uint8)(jVal1);
+ }
+ else if (jVal2)
+ {
+ jVal0 -= ((7 - jVal2) >> 3);
+ jVal1 += ((7 - jVal2) >> 3);
+ *(ptr - (width << 1) - width) = (uint8)(jVal0);
+ *(ptr + (width << 1)) = (uint8)(jVal1);
+ }
+ }/* a3_0 > 2QP */
+ }
+ while (++ptr < ptr_e);
+ }
+ else /* Horiz soft filter*/
+ {
+ do
+ {
+ jVal0 = *(ptr - width); /* B */
+ jVal1 = *ptr; /* C */
+ jVal2 = jVal1 - jVal0; /* C-B */
+
+ if (((jVal2 > 0) && (jVal2 < (QP)))
+ || ((jVal2 < 0) && (jVal2 > -(QP)))) /* (C-B) compared with QP */
+ {
+
+ jVal0 = ((jVal0 + jVal1) >> 1); /* (B+C)/2 cannot overflow; ceil() */
+ *(ptr - width) = (uint8)(jVal0); /* B = (B+C)/2 */
+ *ptr = (uint8)jVal0; /* C = (B+C)/2 */
+
+ jVal0 = *(ptr - (width << 1)); /* A */
+ jVal1 = *(ptr + width); /* D */
+ jVal2 = jVal1 - jVal0; /* D-A */
+
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= ((jVal2 + 7) >> 3);
+ jVal0 += ((jVal2 + 7) >> 3);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* A */
+ *(ptr + width) = (uint8)jVal1; /* D */
+ }
+ else if (jVal2)
+ {
+ jVal1 += ((7 - jVal2) >> 3);
+ jVal0 -= ((7 - jVal2) >> 3);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* A */
+ *(ptr + width) = (uint8)jVal1; /* D */
+ }
+ }
+ }
+ while (++ptr < ptr_e);
+ } /* Soft filter*/
+ }/* boundary checking*/
+ }/*bc*/
+ }/*br*/
+ brwidth -= (pp_w << 1);
+ /****************** Vert. Filtering ********************/
+ for (br = mbr; br < mbr + 2; br++)
+ {
+ if (br < pp_h)
+ for (bc = mbc + 1; bc < mbc + 3; bc++)
+ {
+ /****** check boundary for deblocking ************/
+ if (bc < pp_w)
+ {
+ ptr = rec + (brwidth << 6) + (bc << 3);
+ jVal0 = brwidth + bc;
+ if (chr) QP = QP_store[jVal0];
+
+ ptr_e = ptr + (width << 3);
+
+ if (((pp_mod[jVal0-1]&0x01)) && ((pp_mod[jVal0]&0x01)))
+ {
+ /* Vert Hard filter */
+ do
+ {
+ jVal1 = *ptr; /* D */
+ jVal0 = *(ptr - 1); /* C */
+ jVal2 = jVal1 - jVal0; /* D-C */
+
+ if (((jVal2 > 0) && (jVal2 < (QP << 1)))
+ || ((jVal2 < 0) && (jVal2 > -(QP << 1))))
+ {
+ jVal1 = (jVal0 + jVal1) >> 1; /* (C+D)/2 */
+ *ptr = jVal1;
+ *(ptr - 1) = jVal1;
+
+ jVal1 = *(ptr + 1); /* E */
+ jVal0 = *(ptr - 2); /* B */
+ jVal2 = jVal1 - jVal0; /* E-B */
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= ((jVal2 + 3) >> 2); /* E = E -(E-B)/4 */
+ jVal0 += ((jVal2 + 3) >> 2); /* B = B +(E-B)/4 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+ }
+ else if (jVal2)
+ {
+ jVal1 += ((3 - jVal2) >> 2); /* E = E -(E-B)/4 */
+ jVal0 -= ((3 - jVal2) >> 2); /* B = B +(E-B)/4 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+ }
+
+ jVal1 = *(ptr + 2); /* F */
+ jVal0 = *(ptr - 3); /* A */
+
+ jVal2 = jVal1 - jVal0; /* (F-A) */
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= ((jVal2 + 7) >> 3); /* F -= (F-A)/8 */
+ jVal0 += ((jVal2 + 7) >> 3); /* A += (F-A)/8 */
+ *(ptr + 2) = jVal1;
+ *(ptr - 3) = jVal0;
+ }
+ else if (jVal2)
+ {
+ jVal1 -= ((jVal2 - 7) >> 3); /* F -= (F-A)/8 */
+ jVal0 += ((jVal2 - 7) >> 3); /* A += (F-A)/8 */
+ *(ptr + 2) = jVal1;
+ *(ptr - 3) = jVal0;
+ }
+ } /* end of ver hard filetering */
+ }
+ while ((ptr += width) < ptr_e);
+ }
+ else /* Vert soft filter*/
+ {
+ do
+ {
+ jVal1 = *ptr; /* C */
+ jVal0 = *(ptr - 1); /* B */
+ jVal2 = jVal1 - jVal0;
+
+ if (((jVal2 > 0) && (jVal2 < (QP)))
+ || ((jVal2 < 0) && (jVal2 > -(QP))))
+ {
+
+ jVal1 = (jVal0 + jVal1 + 1) >> 1;
+ *ptr = jVal1; /* C */
+ *(ptr - 1) = jVal1; /* B */
+
+ jVal1 = *(ptr + 1); /* D */
+ jVal0 = *(ptr - 2); /* A */
+ jVal2 = (jVal1 - jVal0); /* D- A */
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= (((jVal2) + 7) >> 3); /* D -= (D-A)/8 */
+ jVal0 += (((jVal2) + 7) >> 3); /* A += (D-A)/8 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+
+ }
+ else if (jVal2)
+ {
+ jVal1 += ((7 - (jVal2)) >> 3); /* D -= (D-A)/8 */
+ jVal0 -= ((7 - (jVal2)) >> 3); /* A += (D-A)/8 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+ }
+ }
+ }
+ while ((ptr += width) < ptr_e);
+ } /* Soft filter*/
+ } /* boundary*/
+ } /*bc*/
+ brwidth += pp_w;
+ }/*br*/
+ brwidth -= (pp_w << 1);
+ }/*mbc*/
+ brwidth += (pp_w << 1);
+ }/*mbr*/
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+void CombinedHorzVertFilter_NoSoftDeblocking(
+ uint8 *rec,
+ int width,
+ int height,
+ int16 *QP_store,
+ int chr,
+ uint8 *pp_mod)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int br, bc, mbr, mbc;
+ int QP = 1;
+ uint8 *ptr, *ptr_e;
+ int pp_w, pp_h;
+ int brwidth;
+
+ int jVal0, jVal1, jVal2;
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ pp_w = (width >> 3);
+ pp_h = (height >> 3);
+
+ for (mbr = 0; mbr < pp_h; mbr += 2) /* row of blocks */
+ {
+ brwidth = mbr * pp_w; /* number of blocks above current block row */
+ for (mbc = 0; mbc < pp_w; mbc += 2) /* col of blocks */
+ {
+ if (!chr)
+ QP = QP_store[(brwidth>>2) + (mbc>>1)]; /* QP is per MB based value */
+
+ /********* for each block **************/
+ /****************** Horiz. Filtering ********************/
+ for (br = mbr + 1; br < mbr + 3; br++) /* 2x2 blocks */
+ {
+ brwidth += pp_w; /* number of blocks above & left current block row */
+ /* the profile on ARM920T shows separate these two boundary check is faster than combine them */
+ if (br < pp_h) /* boundary : don't do it on the lowest row block */
+ for (bc = mbc; bc < mbc + 2; bc++)
+ {
+ /****** check boundary for deblocking ************/
+ if (bc < pp_w) /* boundary : don't do it on the most right col block */
+ {
+ ptr = rec + (brwidth << 6) + (bc << 3);
+ jVal0 = brwidth + bc;
+ if (chr) QP = QP_store[jVal0];
+
+ ptr_e = ptr + 8; /* pointer to where the loop ends */
+
+ if (((pp_mod[jVal0]&0x02)) && ((pp_mod[jVal0-pp_w]&0x02)))
+ {
+ /* Horiz Hard filter */
+ do
+ {
+ jVal0 = *(ptr - width); /* C */
+ jVal1 = *ptr; /* D */
+ jVal2 = jVal1 - jVal0;
+
+ if (((jVal2 > 0) && (jVal2 < (QP << 1)))
+ || ((jVal2 < 0) && (jVal2 > -(QP << 1)))) /* (D-C) compared with 2QP */
+ {
+ /* differentiate between real and fake edge */
+ jVal0 = ((jVal0 + jVal1) >> 1); /* (D+C)/2 */
+ *(ptr - width) = (uint8)(jVal0); /* C */
+ *ptr = (uint8)(jVal0); /* D */
+
+ jVal0 = *(ptr - (width << 1)); /* B */
+ jVal1 = *(ptr + width); /* E */
+ jVal2 = jVal1 - jVal0; /* E-B */
+
+ if (jVal2 > 0)
+ {
+ jVal0 += ((jVal2 + 3) >> 2);
+ jVal1 -= ((jVal2 + 3) >> 2);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* store B */
+ *(ptr + width) = (uint8)jVal1; /* store E */
+ }
+ else if (jVal2)
+ {
+ jVal0 -= ((3 - jVal2) >> 2);
+ jVal1 += ((3 - jVal2) >> 2);
+ *(ptr - (width << 1)) = (uint8)jVal0; /* store B */
+ *(ptr + width) = (uint8)jVal1; /* store E */
+ }
+
+ jVal0 = *(ptr - (width << 1) - width); /* A */
+ jVal1 = *(ptr + (width << 1)); /* F */
+ jVal2 = jVal1 - jVal0; /* (F-A) */
+
+ if (jVal2 > 0)
+ {
+ jVal0 += ((jVal2 + 7) >> 3);
+ jVal1 -= ((jVal2 + 7) >> 3);
+ *(ptr - (width << 1) - width) = (uint8)(jVal0);
+ *(ptr + (width << 1)) = (uint8)(jVal1);
+ }
+ else if (jVal2)
+ {
+ jVal0 -= ((7 - jVal2) >> 3);
+ jVal1 += ((7 - jVal2) >> 3);
+ *(ptr - (width << 1) - width) = (uint8)(jVal0);
+ *(ptr + (width << 1)) = (uint8)(jVal1);
+ }
+ }/* a3_0 > 2QP */
+ }
+ while (++ptr < ptr_e);
+ }
+
+ }/* boundary checking*/
+ }/*bc*/
+ }/*br*/
+ brwidth -= (pp_w << 1);
+ /****************** Vert. Filtering ********************/
+ for (br = mbr; br < mbr + 2; br++)
+ {
+ if (br < pp_h)
+ for (bc = mbc + 1; bc < mbc + 3; bc++)
+ {
+ /****** check boundary for deblocking ************/
+ if (bc < pp_w)
+ {
+ ptr = rec + (brwidth << 6) + (bc << 3);
+ jVal0 = brwidth + bc;
+ if (chr) QP = QP_store[jVal0];
+
+ ptr_e = ptr + (width << 3);
+
+ if (((pp_mod[jVal0-1]&0x01)) && ((pp_mod[jVal0]&0x01)))
+ {
+ /* Vert Hard filter */
+ do
+ {
+ jVal1 = *ptr; /* D */
+ jVal0 = *(ptr - 1); /* C */
+ jVal2 = jVal1 - jVal0; /* D-C */
+
+ if (((jVal2 > 0) && (jVal2 < (QP << 1)))
+ || ((jVal2 < 0) && (jVal2 > -(QP << 1))))
+ {
+ jVal1 = (jVal0 + jVal1) >> 1; /* (C+D)/2 */
+ *ptr = jVal1;
+ *(ptr - 1) = jVal1;
+
+ jVal1 = *(ptr + 1); /* E */
+ jVal0 = *(ptr - 2); /* B */
+ jVal2 = jVal1 - jVal0; /* E-B */
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= ((jVal2 + 3) >> 2); /* E = E -(E-B)/4 */
+ jVal0 += ((jVal2 + 3) >> 2); /* B = B +(E-B)/4 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+ }
+ else if (jVal2)
+ {
+ jVal1 += ((3 - jVal2) >> 2); /* E = E -(E-B)/4 */
+ jVal0 -= ((3 - jVal2) >> 2); /* B = B +(E-B)/4 */
+ *(ptr + 1) = jVal1;
+ *(ptr - 2) = jVal0;
+ }
+
+ jVal1 = *(ptr + 2); /* F */
+ jVal0 = *(ptr - 3); /* A */
+
+ jVal2 = jVal1 - jVal0; /* (F-A) */
+
+ if (jVal2 > 0)
+ {
+ jVal1 -= ((jVal2 + 7) >> 3); /* F -= (F-A)/8 */
+ jVal0 += ((jVal2 + 7) >> 3); /* A += (F-A)/8 */
+ *(ptr + 2) = jVal1;
+ *(ptr - 3) = jVal0;
+ }
+ else if (jVal2)
+ {
+ jVal1 -= ((jVal2 - 7) >> 3); /* F -= (F-A)/8 */
+ jVal0 += ((jVal2 - 7) >> 3); /* A += (F-A)/8 */
+ *(ptr + 2) = jVal1;
+ *(ptr - 3) = jVal0;
+ }
+ } /* end of ver hard filetering */
+ }
+ while ((ptr += width) < ptr_e);
+ }
+
+ } /* boundary*/
+ } /*bc*/
+ brwidth += pp_w;
+ }/*br*/
+ brwidth -= (pp_w << 1);
+ }/*mbc*/
+ brwidth += (pp_w << 1);
+ }/*mbr*/
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/chvr_filter.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/chvr_filter.cpp
new file mode 100644
index 0000000..795cf71
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/chvr_filter.cpp
@@ -0,0 +1,565 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+
+#ifdef PV_POSTPROC_ON
+
+void CombinedHorzVertRingFilter(
+ uint8 *rec,
+ int width,
+ int height,
+ int16 *QP_store,
+ int chr,
+ uint8 *pp_mod)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int index, counter;
+ int br, bc, incr, mbr, mbc;
+ int QP = 1;
+ int v[5];
+ uint8 *ptr, *ptr_c, *ptr_n;
+ int w1, w2, w3, w4;
+ int pp_w, pp_h, brwidth;
+ int sum, delta;
+ int a3_0, a3_1, a3_2, A3_0;
+ /* for Deringing Threshold approach (MPEG4)*/
+ int max_diff, thres, v0, h0, min_blk, max_blk;
+ int cnthflag;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Calculate the width and height of the area in blocks (divide by 8) */
+ pp_w = (width >> 3);
+ pp_h = (height >> 3);
+
+ /* Set up various values needed for updating pointers into rec */
+ w1 = width; /* Offset to next row in pixels */
+ w2 = width << 1; /* Offset to two rows in pixels */
+ w3 = w1 + w2; /* Offset to three rows in pixels */
+ w4 = w2 << 1; /* Offset to four rows in pixels */
+ incr = width - BLKSIZE; /* Offset to next row after processing block */
+
+ /* Work through the area hortizontally by two rows per step */
+ for (mbr = 0; mbr < pp_h; mbr += 2)
+ {
+ /* brwidth contains the block number of the leftmost block
+ * of the current row */
+ brwidth = mbr * pp_w;
+
+ /* Work through the area vertically by two columns per step */
+ for (mbc = 0; mbc < pp_w; mbc += 2)
+ {
+ /* if the data is luminance info, get the correct
+ * quantization paramenter. One parameter per macroblock */
+ if (!chr)
+ {
+ /* brwidth/4 is the macroblock number and mbc/2 is the macroblock col number*/
+ QP = QP_store[(brwidth>>2) + (mbc>>1)];
+ }
+
+ /****************** Horiz. Filtering ********************/
+ /* Process four blocks for the filtering */
+ /********************************************************/
+ /* Loop over two rows of blocks */
+ for (br = mbr + 1; br < mbr + 3; br++) /* br is the row counter in blocks */
+ {
+ /* Set brwidth to the first (leftmost) block number of the next row */
+ /* brwidth is used as an index when counting blocks */
+ brwidth += pp_w;
+
+ /* Loop over two columns of blocks in the row */
+ for (bc = mbc; bc < mbc + 2; bc++) /* bc is the column counter in blocks */
+ {
+ /****** check boundary for deblocking ************/
+ /* Execute if the row and column counters are within the area */
+ if (br < pp_h && bc < pp_w)
+ {
+ /* Set the ptr to the first pixel of the first block of the second row
+ * brwidth * 64 is the pixel row offset
+ * bc * 8 is the pixel column offset */
+ ptr = rec + (brwidth << 6) + (bc << 3);
+
+ /* Set the index to the current block of the second row counting in blocks */
+ index = brwidth + bc;
+
+ /* if the data is chrominance info, get the correct
+ * quantization paramenter. One parameter per block. */
+ if (chr)
+ {
+ QP = QP_store[index];
+ }
+
+ /* Execute hard horizontal filter if semaphore for horizontal deblocking
+ * is set for the current block and block immediately above it */
+ if (((pp_mod[index]&0x02) != 0) && ((pp_mod[index-pp_w]&0x02) != 0))
+ { /* Hard filter */
+
+ /* Set HorzHflag (bit 4) in the pp_mod location */
+ pp_mod[index-pp_w] |= 0x10; /* 4/26/00 reuse pp_mod for HorzHflag*/
+
+ /* Filter across the 8 pixels of the block */
+ for (index = BLKSIZE; index > 0; index--)
+ {
+ /* Difference between the current pixel and the pixel above it */
+ a3_0 = *ptr - *(ptr - w1);
+
+ /* if the magnitude of the difference is greater than the KThH threshold
+ * and within the quantization parameter, apply hard filter */
+ if ((a3_0 > KThH || a3_0 < -KThH) && a3_0<QP && a3_0> -QP)
+ {
+ ptr_c = ptr - w3; /* Points to pixel three rows above */
+ ptr_n = ptr + w1; /* Points to pixel one row below */
+ v[0] = (int)(*(ptr_c - w3));
+ v[1] = (int)(*(ptr_c - w2));
+ v[2] = (int)(*(ptr_c - w1));
+ v[3] = (int)(*ptr_c);
+ v[4] = (int)(*(ptr_c + w1));
+
+ sum = v[0]
+ + v[1]
+ + v[2]
+ + *ptr_c
+ + v[4]
+ + (*(ptr_c + w2))
+ + (*(ptr_c + w3)); /* Current pixel */
+
+ delta = (sum + *ptr_c + 4) >> 3; /* Average pixel values with rounding */
+ *(ptr_c) = (uint8) delta;
+
+ /* Move pointer down one row of pixels (points to pixel two rows
+ * above current pixel) */
+ ptr_c += w1;
+
+ for (counter = 0; counter < 5; counter++)
+ {
+ /* Subtract off highest pixel and add in pixel below */
+ sum = sum - v[counter] + *ptr_n;
+ /* Average the pixel values with rounding */
+ delta = (sum + *ptr_c + 4) >> 3;
+ *ptr_c = (uint8)(delta);
+
+ /* Increment pointers to next pixel row */
+ ptr_c += w1;
+ ptr_n += w1;
+ }
+ }
+ /* Increment pointer to next pixel */
+ ++ptr;
+ } /* index*/
+ }
+ else
+ { /* soft filter*/
+
+ /* Clear HorzHflag (bit 4) in the pp_mod location */
+ pp_mod[index-pp_w] &= 0xef; /* reset 1110,1111 */
+
+ for (index = BLKSIZE; index > 0; index--)
+ {
+ /* Difference between the current pixel and the pixel above it */
+ a3_0 = *(ptr) - *(ptr - w1);
+
+ /* if the magnitude of the difference is greater than the KTh threshold,
+ * apply soft filter */
+ if ((a3_0 > KTh || a3_0 < -KTh))
+ {
+
+ /* Sum of weighted differences */
+ a3_0 += ((*(ptr - w2) - *(ptr + w1)) << 1) + (a3_0 << 2);
+
+ /* Check if sum is less than the quantization parameter */
+ if (PV_ABS(a3_0) < (QP << 3))
+ {
+ a3_1 = *(ptr - w2) - *(ptr - w3);
+ a3_1 += ((*(ptr - w4) - *(ptr - w1)) << 1) + (a3_1 << 2);
+
+ a3_2 = *(ptr + w2) - *(ptr + w1);
+ a3_2 += ((*(ptr) - *(ptr + w3)) << 1) + (a3_2 << 2);
+
+ A3_0 = PV_ABS(a3_0) - PV_MIN(PV_ABS(a3_1), PV_ABS(a3_2));
+
+ if (A3_0 > 0)
+ {
+ A3_0 += A3_0 << 2;
+ A3_0 = (A3_0 + 32) >> 6;
+ if (a3_0 > 0)
+ {
+ A3_0 = -A3_0;
+ }
+
+ delta = (*(ptr - w1) - *(ptr)) >> 1;
+ if (delta >= 0)
+ {
+ if (delta >= A3_0)
+ {
+ delta = PV_MAX(A3_0, 0);
+ }
+ }
+ else
+ {
+ if (A3_0 > 0)
+ {
+ delta = 0;
+ }
+ else
+ {
+ delta = PV_MAX(A3_0, delta);
+ }
+ }
+
+ *(ptr - w1) = (uint8)(*(ptr - w1) - delta);
+ *(ptr) = (uint8)(*(ptr) + delta);
+ }
+ } /*threshold*/
+ }
+ /* Increment pointer to next pixel */
+ ++ptr;
+ } /*index*/
+ } /* Soft filter*/
+ }/* boundary checking*/
+ }/*bc*/
+ }/*br*/
+ brwidth -= (pp_w << 1);
+
+
+ /****************** Vert. Filtering *********************/
+ /* Process four blocks for the filtering */
+ /********************************************************/
+ /* Loop over two rows of blocks */
+ for (br = mbr; br < mbr + 2; br++) /* br is the row counter in blocks */
+ {
+ for (bc = mbc + 1; bc < mbc + 3; bc++) /* bc is the column counter in blocks */
+ {
+ /****** check boundary for deblocking ************/
+ /* Execute if the row and column counters are within the area */
+ if (br < pp_h && bc < pp_w)
+ {
+ /* Set the ptr to the first pixel of the first block of the second row
+ * brwidth * 64 is the pixel row offset
+ * bc * 8 is the pixel column offset */
+ ptr = rec + (brwidth << 6) + (bc << 3);
+
+ /* Set the index to the current block of the second row counting in blocks */
+ index = brwidth + bc;
+
+ /* if the data is chrominance info, get the correct
+ * quantization paramenter. One parameter per block. */
+ if (chr)
+ {
+ QP = QP_store[index];
+ }
+
+ /* Execute hard vertical filter if semaphore for vertical deblocking
+ * is set for the current block and block immediately left of it */
+ if (((pp_mod[index-1]&0x01) != 0) && ((pp_mod[index]&0x01) != 0))
+ { /* Hard filter */
+
+ /* Set VertHflag (bit 5) in the pp_mod location of previous block*/
+ pp_mod[index-1] |= 0x20; /* 4/26/00 reuse pp_mod for VertHflag*/
+
+ /* Filter across the 8 pixels of the block */
+ for (index = BLKSIZE; index > 0; index--)
+ {
+ /* Difference between the current pixel
+ * and the pixel to left of it */
+ a3_0 = *ptr - *(ptr - 1);
+
+ /* if the magnitude of the difference is greater than the KThH threshold
+ * and within the quantization parameter, apply hard filter */
+ if ((a3_0 > KThH || a3_0 < -KThH) && a3_0<QP && a3_0> -QP)
+ {
+ ptr_c = ptr - 3;
+ ptr_n = ptr + 1;
+ v[0] = (int)(*(ptr_c - 3));
+ v[1] = (int)(*(ptr_c - 2));
+ v[2] = (int)(*(ptr_c - 1));
+ v[3] = (int)(*ptr_c);
+ v[4] = (int)(*(ptr_c + 1));
+
+ sum = v[0]
+ + v[1]
+ + v[2]
+ + *ptr_c
+ + v[4]
+ + (*(ptr_c + 2))
+ + (*(ptr_c + 3));
+
+ delta = (sum + *ptr_c + 4) >> 3;
+ *(ptr_c) = (uint8) delta;
+
+ /* Move pointer down one pixel to the right */
+ ptr_c += 1;
+ for (counter = 0; counter < 5; counter++)
+ {
+ /* Subtract off highest pixel and add in pixel below */
+ sum = sum - v[counter] + *ptr_n;
+ /* Average the pixel values with rounding */
+ delta = (sum + *ptr_c + 4) >> 3;
+ *ptr_c = (uint8)(delta);
+
+ /* Increment pointers to next pixel */
+ ptr_c += 1;
+ ptr_n += 1;
+ }
+ }
+ /* Increment pointers to next pixel row */
+ ptr += w1;
+ } /* index*/
+ }
+ else
+ { /* soft filter*/
+
+ /* Clear VertHflag (bit 5) in the pp_mod location */
+ pp_mod[index-1] &= 0xdf; /* reset 1101,1111 */
+ for (index = BLKSIZE; index > 0; index--)
+ {
+ /* Difference between the current pixel and the pixel above it */
+ a3_0 = *(ptr) - *(ptr - 1);
+
+ /* if the magnitude of the difference is greater than the KTh threshold,
+ * apply soft filter */
+ if ((a3_0 > KTh || a3_0 < -KTh))
+ {
+
+ /* Sum of weighted differences */
+ a3_0 += ((*(ptr - 2) - *(ptr + 1)) << 1) + (a3_0 << 2);
+
+ /* Check if sum is less than the quantization parameter */
+ if (PV_ABS(a3_0) < (QP << 3))
+ {
+ a3_1 = *(ptr - 2) - *(ptr - 3);
+ a3_1 += ((*(ptr - 4) - *(ptr - 1)) << 1) + (a3_1 << 2);
+
+ a3_2 = *(ptr + 2) - *(ptr + 1);
+ a3_2 += ((*(ptr) - *(ptr + 3)) << 1) + (a3_2 << 2);
+
+ A3_0 = PV_ABS(a3_0) - PV_MIN(PV_ABS(a3_1), PV_ABS(a3_2));
+
+ if (A3_0 > 0)
+ {
+ A3_0 += A3_0 << 2;
+ A3_0 = (A3_0 + 32) >> 6;
+ if (a3_0 > 0)
+ {
+ A3_0 = -A3_0;
+ }
+
+ delta = (*(ptr - 1) - *(ptr)) >> 1;
+ if (delta >= 0)
+ {
+ if (delta >= A3_0)
+ {
+ delta = PV_MAX(A3_0, 0);
+ }
+ }
+ else
+ {
+ if (A3_0 > 0)
+ {
+ delta = 0;
+ }
+ else
+ {
+ delta = PV_MAX(A3_0, delta);
+ }
+ }
+
+ *(ptr - 1) = (uint8)(*(ptr - 1) - delta);
+ *(ptr) = (uint8)(*(ptr) + delta);
+ }
+ } /*threshold*/
+ }
+ ptr += w1;
+ } /*index*/
+ } /* Soft filter*/
+ } /* boundary*/
+ } /*bc*/
+ /* Increment pointer to next row of pixels */
+ brwidth += pp_w;
+ }/*br*/
+ brwidth -= (pp_w << 1);
+
+ /****************** Deringing ***************************/
+ /* Process four blocks for the filtering */
+ /********************************************************/
+ /* Loop over two rows of blocks */
+ for (br = mbr; br < mbr + 2; br++)
+ {
+ /* Loop over two columns of blocks in the row */
+ for (bc = mbc; bc < mbc + 2; bc++)
+ {
+ /* Execute if the row and column counters are within the area */
+ if (br < pp_h && bc < pp_w)
+ {
+ /* Set the index to the current block */
+ index = brwidth + bc;
+
+ /* Execute deringing if semaphore for deringing (bit-3 of pp_mod)
+ * is set for the current block */
+ if ((pp_mod[index]&0x04) != 0)
+ {
+ /* Don't process deringing if on an edge block */
+ if (br > 0 && bc > 0 && br < pp_h - 1 && bc < pp_w - 1)
+ {
+ /* cnthflag = weighted average of HorzHflag of current,
+ * one above, previous blocks*/
+ cnthflag = ((pp_mod[index] & 0x10) +
+ (pp_mod[index-pp_w] & 0x10) +
+ ((pp_mod[index-1] >> 1) & 0x10) +
+ ((pp_mod[index] >> 1) & 0x10)) >> 4; /* 4/26/00*/
+
+ /* Do the deringing if decision flags indicate it's necessary */
+ if (cnthflag < 3)
+ {
+ /* if the data is chrominance info, get the correct
+ * quantization paramenter. One parameter per block. */
+ if (chr)
+ {
+ QP = QP_store[index];
+ }
+
+ /* Set amount to change luminance if it needs to be changed
+ * based on quantization parameter */
+ max_diff = (QP >> 2) + 4;
+
+ /* Set pointer to first pixel of current block */
+ ptr = rec + (brwidth << 6) + (bc << 3);
+
+ /* Find minimum and maximum value of pixel block */
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+
+ /* threshold determination */
+ thres = (max_blk + min_blk + 1) >> 1;
+
+ /* If pixel range is greater or equal than DERING_THR, smooth the region */
+ if ((max_blk - min_blk) >= DERING_THR) /*smooth 8x8 region*/
+#ifndef NoMMX
+ {
+ /* smooth all pixels in the block*/
+ DeringAdaptiveSmoothMMX(ptr, width, thres, max_diff);
+ }
+#else
+ {
+ /* Setup the starting point of the region to smooth */
+ v0 = (br << 3) - 1;
+ h0 = (bc << 3) - 1;
+
+ /*smooth 8x8 region*/
+ AdaptiveSmooth_NoMMX(rec, v0, h0, v0 + 1, h0 + 1, thres, width, max_diff);
+ }
+#endif
+ }/*cnthflag*/
+ } /*dering br==1 or bc==1 (boundary block)*/
+ else /* Process the boundary blocks */
+ {
+ /* Decide to perform deblocking based on the semaphore flags
+ * of the neighboring blocks in each case. A certain number of
+ * hard filtering flags have to be set in order to signal need
+ * for smoothing */
+ if (br > 0 && br < pp_h - 1)
+ {
+ if (bc > 0)
+ {
+ cnthflag = ((pp_mod[index-pp_w] & 0x10) +
+ (pp_mod[index] & 0x10) +
+ ((pp_mod[index-1] >> 1) & 0x10)) >> 4;
+ }
+ else
+ {
+ cnthflag = ((pp_mod[index] & 0x10) +
+ (pp_mod[index-pp_w] & 0x10) +
+ ((pp_mod[index] >> 1) & 0x10)) >> 4;
+ }
+ }
+ else if (bc > 0 && bc < pp_w - 1)
+ {
+ if (br > 0)
+ {
+ cnthflag = ((pp_mod[index-pp_w] & 0x10) +
+ ((pp_mod[index-1] >> 1) & 0x10) +
+ ((pp_mod[index] >> 1) & 0x10)) >> 4;
+ }
+ else
+ {
+ cnthflag = ((pp_mod[index] & 0x10) +
+ ((pp_mod[index-1] >> 1) & 0x10) +
+ ((pp_mod[index] >> 1) & 0x10)) >> 4;
+ }
+ }
+ else /* at the corner do default*/
+ {
+ cnthflag = 0;
+ }
+
+ /* Do the deringing if decision flags indicate it's necessary */
+ if (cnthflag < 2)
+ {
+
+ /* if the data is chrominance info, get the correct
+ * quantization paramenter. One parameter per block. */
+ if (chr)
+ {
+ QP = QP_store[index];
+ }
+
+ /* Set amount to change luminance if it needs to be changed
+ * based on quantization parameter */
+ max_diff = (QP >> 2) + 4;
+
+ /* Set pointer to first pixel of current block */
+ ptr = rec + (brwidth << 6) + (bc << 3);
+
+ /* Find minimum and maximum value of pixel block */
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+
+ /* threshold determination */
+ thres = (max_blk + min_blk + 1) >> 1;
+
+ /* Setup the starting point of the region to smooth
+ * This is going to be a 4x4 region */
+ v0 = (br << 3) + 1;
+ h0 = (bc << 3) + 1;
+
+ /* If pixel range is greater or equal than DERING_THR, smooth the region */
+ if ((max_blk - min_blk) >= DERING_THR)
+ {
+ /* Smooth 4x4 region */
+ AdaptiveSmooth_NoMMX(rec, v0, h0, v0 - 3, h0 - 3, thres, width, max_diff);
+ }
+ }/*cnthflag*/
+ } /* br==0, bc==0*/
+ } /* dering*/
+ } /*boundary condition*/
+ }/*bc*/
+ brwidth += pp_w;
+ }/*br*/
+ brwidth -= (pp_w << 1);
+ }/*mbc*/
+ brwidth += (pp_w << 1);
+ }/*mbr*/
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return ;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/combined_decode.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/combined_decode.cpp
new file mode 100644
index 0000000..6499233
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/combined_decode.cpp
@@ -0,0 +1,840 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h" /* video decoder function prototypes */
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "scaling.h"
+#include "mbtype_mode.h"
+
+#define OSCL_DISABLE_WARNING_CONDITIONAL_IS_CONSTANT
+/* ======================================================================== */
+/* Function : DecodeFrameCombinedMode() */
+/* Purpose : Decode a frame of MPEG4 bitstream in combined mode. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* */
+/* 03/30/2000 : Cleaned up and optimized the code. */
+/* 03/31/2000 : Added proper handling of MB stuffing. */
+/* 04/13/2000 : Rewrote this combined mode path completely */
+/* so that it handles "Combined Mode With Error */
+/* Resilience." Now the code resembles the */
+/* pseudo codes in MPEG-4 standard better. */
+/* 10/13/2000 : Add fast VLC+dequant */
+/* 04/13/2001 : fix MB_stuffing */
+/* 08/07/2001 : remove MBzero */
+/* ======================================================================== */
+PV_STATUS DecodeFrameCombinedMode(VideoDecData *video)
+{
+ PV_STATUS status;
+ int mbnum;
+ Vop *currVop = video->currVop;
+ BitstreamDecVideo *stream = video->bitstream;
+ int shortVideoHeader = video->shortVideoHeader;
+ int16 QP, *QPMB = video->QPMB;
+ uint8 *Mode = video->headerInfo.Mode;
+ int nTotalMB = video->nTotalMB;
+ int nMBPerRow = video->nMBPerRow;
+ int slice_counter;
+ uint32 tmpvar, long_zero_bits;
+ uint code;
+ int valid_stuffing;
+ int resync_marker_length;
+ int stuffing_length;
+
+ /* add this for error resilient, 05/18/2000 */
+ int32 startPacket;
+ int mb_start;
+ /* copy and pad to prev_Vop for INTER coding */
+ switch (currVop->predictionType)
+ {
+ case I_VOP :
+// oscl_memset(Mode, MODE_INTRA, sizeof(uint8)*nTotalMB);
+ resync_marker_length = 17;
+ stuffing_length = 9;
+ break;
+ case P_VOP :
+ oscl_memset(video->motX, 0, sizeof(MOT)*4*nTotalMB);
+ oscl_memset(video->motY, 0, sizeof(MOT)*4*nTotalMB);
+// oscl_memset(Mode, MODE_INTER, sizeof(uint8)*nTotalMB);
+ resync_marker_length = 16 + currVop->fcodeForward;
+ stuffing_length = 10;
+ break;
+ default :
+ mp4dec_log("DecodeFrameCombinedMode(): Vop type not supported.\n");
+ return PV_FAIL;
+ }
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (video->shortVideoHeader)
+ {
+ if (video->advanced_INTRA)
+ {
+ if (video->modified_quant)
+ {
+ video->vlcDecCoeffIntra = &VlcDecTCOEFShortHeader_AnnexIT;
+ video->vlcDecCoeffInter = &VlcDecTCOEFShortHeader_AnnexT;
+ }
+ else
+ {
+ video->vlcDecCoeffIntra = &VlcDecTCOEFShortHeader_AnnexI;
+ video->vlcDecCoeffInter = &VlcDecTCOEFShortHeader;
+ }
+ }
+ else
+ {
+ if (video->modified_quant)
+ {
+ video->vlcDecCoeffInter = video->vlcDecCoeffIntra = &VlcDecTCOEFShortHeader_AnnexT;
+ }
+ else
+ {
+ video->vlcDecCoeffInter = video->vlcDecCoeffIntra = &VlcDecTCOEFShortHeader;
+ }
+ }
+ }
+
+#endif
+
+ /** Initialize sliceNo ***/
+ mbnum = slice_counter = 0;
+// oscl_memset(video->sliceNo, 0, sizeof(uint8)*nTotalMB);
+ QP = video->currVop->quantizer;
+
+ do
+ {
+ /* This section is equivalent to motion_shape_texture() */
+ /* in the MPEG-4 standard. 04/13/2000 */
+ mb_start = mbnum;
+ video->usePrevQP = 0; /* 04/27/01 */
+ startPacket = getPointer(stream);
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (video->modified_quant)
+ {
+ video->QP_CHR = MQ_chroma_QP_table[QP];
+ }
+ else
+ {
+ video->QP_CHR = QP; /* ANNEX_T */
+ }
+#endif
+ /* remove any stuffing bits */
+ BitstreamShowBits16(stream, stuffing_length, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, stuffing_length);
+ BitstreamShowBits16(stream, stuffing_length, &code);
+ }
+
+ do
+ {
+ /* we need video->mbnum in lower level functions */
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, nMBPerRow);
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+ /* assign slice number for each macroblocks */
+ video->sliceNo[mbnum] = (uint8) slice_counter;
+
+ /* decode COD, MCBPC, ACpred_flag, CPBY and DQUANT */
+ /* We have to discard stuffed MB header */
+ status = GetMBheader(video, &QP);
+
+ if (status != PV_SUCCESS)
+ {
+ VideoDecoderErrorDetected(video);
+ video->mbnum = mb_start;
+ movePointerTo(stream, (startPacket & -8));
+ break;
+ }
+
+ /* Store the QP value for later use in AC prediction */
+ QPMB[mbnum] = QP;
+
+ if (Mode[mbnum] != MODE_SKIPPED)
+ {
+ /* decode the DCT coeficients for the MB */
+ status = GetMBData(video);
+ if (status != PV_SUCCESS)
+ {
+ VideoDecoderErrorDetected(video);
+ video->mbnum = mb_start;
+ movePointerTo(stream, (startPacket & -8));
+ break;
+ }
+ }
+ else /* MODE_SKIPPED */
+ {
+ SkippedMBMotionComp(video); /* 08/04/05 */
+ }
+ // Motion compensation and put video->mblock->pred_block
+ mbnum++;
+
+ /* remove any stuffing bits */
+ BitstreamShowBits16(stream, stuffing_length, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, stuffing_length);
+ BitstreamShowBits16(stream, stuffing_length, &code);
+ }
+
+ /* have we reached the end of the video packet or vop? */
+ if (shortVideoHeader)
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (!video->slice_structure)
+ {
+#endif
+ if (mbnum >= (int)(video->mbnum_row + 1)*video->nMBinGOB) /* 10/11/01 */
+ {
+ if (mbnum >= nTotalMB) return PV_SUCCESS;
+ status = BitstreamShowBits32(stream, GOB_RESYNC_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar == GOB_RESYNC_MARKER)
+ {
+ break;
+ }
+ else
+ {
+ status = PV_BitstreamShowBitsByteAlign(stream, GOB_RESYNC_MARKER_LENGTH, &tmpvar);
+ if (tmpvar == GOB_RESYNC_MARKER) break;
+ }
+ }
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ }
+ else
+ {
+
+ if (mbnum >= nTotalMB) /* in case no valid stuffing 06/23/01 */
+ {
+ valid_stuffing = validStuffing_h263(stream);
+ if (valid_stuffing == 0)
+ {
+ VideoDecoderErrorDetected(video);
+ ConcealPacket(video, mb_start, nTotalMB, slice_counter);
+ }
+ return PV_SUCCESS;
+ }
+ /* ANNEX_K */
+ PV_BitstreamShowBitsByteAlignNoForceStuffing(stream, 17, &tmpvar);
+ if (tmpvar == RESYNC_MARKER)
+ {
+ valid_stuffing = validStuffing_h263(stream);
+ if (valid_stuffing)
+ break; /* 06/21/01 */
+ }
+
+ }
+#endif
+ }
+ else
+ {
+ if (mbnum >= nTotalMB) /* in case no valid stuffing 06/23/01 */
+ {
+ /* 11/01/2002 if we are at the end of the frame and there is some garbage data
+ at the end of the frame (i.e. no next startcode) break if the stuffing is valid */
+ valid_stuffing = validStuffing(stream);
+ if (valid_stuffing == 0)
+ {
+ /* end 11/01/2002 */
+ VideoDecoderErrorDetected(video);
+ ConcealPacket(video, mb_start, nTotalMB, slice_counter);
+ }
+ PV_BitstreamByteAlign(stream);
+ return PV_SUCCESS;
+ }
+
+ status = PV_BitstreamShowBitsByteAlign(stream, 23, &tmpvar); /* this call is valid for f_code < 8 */
+ long_zero_bits = !tmpvar;
+
+ if ((tmpvar >> (23 - resync_marker_length)) == RESYNC_MARKER || long_zero_bits)
+ {
+ valid_stuffing = validStuffing(stream);
+ if (valid_stuffing)
+ break; /* 06/21/01 */
+ }
+
+ }
+ }
+ while (TRUE);
+
+ if (shortVideoHeader)
+ { /* We need to check newgob to refresh quantizer */
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (!video->slice_structure)
+ {
+#endif
+ while ((status = PV_GobHeader(video)) == PV_FAIL)
+ {
+ if ((status = quickSearchGOBHeader(stream)) != PV_SUCCESS)
+ {
+ break;
+ }
+ }
+
+ mbnum = currVop->gobNumber * video->nMBinGOB;
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ }
+ else
+ {
+ while ((status = PV_H263SliceHeader(video, &mbnum)) == PV_FAIL)
+ {
+ if ((status = quickSearchH263SliceHeader(stream)) != PV_SUCCESS)
+ {
+ break;
+ }
+ }
+ }
+
+#endif
+ }
+ else
+ {
+ while ((status = PV_ReadVideoPacketHeader(video, &mbnum)) == PV_FAIL)
+ {
+ if ((status = quickSearchVideoPacketHeader(stream, resync_marker_length)) != PV_SUCCESS)
+ {
+ break;
+ }
+ }
+ }
+
+ if (status == PV_END_OF_VOP)
+ {
+ mbnum = nTotalMB;
+ }
+
+ if (mbnum > video->mbnum + 1)
+ {
+ ConcealPacket(video, video->mbnum, mbnum, slice_counter);
+ }
+ QP = video->currVop->quantizer;
+ slice_counter++;
+ if (mbnum >= nTotalMB) break;
+
+ }
+ while (TRUE);
+ return PV_SUCCESS;
+}
+
+
+/* ============================================================================ */
+/* Function : GetMBHeader() */
+/* Purpose : Decode MB header, not_coded, mcbpc, ac_pred_flag, cbpy, dquant. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* */
+/* 3/29/00 : Changed the returned value and optimized the code. */
+/* 4/01/01 : new ACDC prediction structure */
+/* ============================================================================ */
+PV_STATUS GetMBheader(VideoDecData *video, int16 *QP)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int mbnum = video->mbnum;
+ uint8 *Mode = video->headerInfo.Mode;
+ int x_pos = video->mbnum_col;
+ typeDCStore *DC = video->predDC + mbnum;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+ const static int16 DQ_tab[4] = { -1, -2, 1, 2};
+
+ int CBPY, CBPC;
+ int MBtype, VopType;
+ int MCBPC;
+ uint DQUANT;
+ int comp;
+ Bool mb_coded;
+
+ VopType = video->currVop->predictionType;
+ mb_coded = ((VopType == I_VOP) ? TRUE : !BitstreamRead1Bits_INLINE(stream));
+
+ if (!mb_coded)
+ {
+ /* skipped macroblock */
+ Mode[mbnum] = MODE_SKIPPED;
+ //oscl_memset(DCAC_row, 0, sizeof(typeDCACStore)); /* SKIPPED_ACDC */
+ //oscl_memset(DCAC_col, 0, sizeof(typeDCACStore));
+ ZERO_OUT_64BYTES(DCAC_row);
+ ZERO_OUT_64BYTES(DCAC_col); /* 08/12/05 */
+
+ for (comp = 0; comp < 6; comp++)
+ {
+ (*DC)[comp] = mid_gray;
+ }
+ }
+ else
+ {
+ /* coded macroblock */
+ if (VopType == I_VOP)
+ {
+ MCBPC = PV_VlcDecMCBPC_com_intra(stream);
+ }
+ else
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (!video->deblocking)
+ {
+ MCBPC = PV_VlcDecMCBPC_com_inter(stream);
+ }
+ else
+ {
+ MCBPC = PV_VlcDecMCBPC_com_inter_H263(stream);
+ }
+#else
+ MCBPC = PV_VlcDecMCBPC_com_inter(stream);
+#endif
+ }
+
+ if (VLC_ERROR_DETECTED(MCBPC))
+ {
+ return PV_FAIL;
+ }
+
+ Mode[mbnum] = (uint8)(MBtype = MBtype_mode[MCBPC & 7]);
+ CBPC = (MCBPC >> 4) & 3;
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (MBtype & INTRA_MASK)
+ {
+ if (!video->shortVideoHeader)
+ {
+ video->acPredFlag[mbnum] = (uint8) BitstreamRead1Bits(stream);
+ }
+ else
+ {
+ if (video->advanced_INTRA)
+ {
+ if (!BitstreamRead1Bits(stream))
+ {
+ video->acPredFlag[mbnum] = 0;
+ }
+ else
+ {
+ video->acPredFlag[mbnum] = 1;
+ if (BitstreamRead1Bits(stream))
+ {
+ video->mblock->direction = 0;
+ }
+ else
+ {
+ video->mblock->direction = 1;
+ }
+ }
+ }
+ else
+ {
+ video->acPredFlag[mbnum] = 0;
+ }
+ }
+ }
+#else
+ if ((MBtype & INTRA_MASK) && !video->shortVideoHeader)
+ {
+ video->acPredFlag[mbnum] = (uint8) BitstreamRead1Bits_INLINE(stream);
+ }
+ else
+ {
+ video->acPredFlag[mbnum] = 0;
+ }
+#endif
+ CBPY = PV_VlcDecCBPY(stream, MBtype & INTRA_MASK); /* INTRA || INTRA_Q */
+ if (CBPY < 0)
+ {
+ return PV_FAIL;
+ }
+
+ // GW 04/23/99
+ video->headerInfo.CBP[mbnum] = (uint8)(CBPY << 2 | (CBPC & 3));
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (MBtype & Q_MASK)
+ {
+ if (!video->modified_quant)
+ {
+ DQUANT = BitstreamReadBits16(stream, 2);
+ *QP += DQ_tab[DQUANT];
+
+ if (*QP < 1) *QP = 1;
+ else if (*QP > 31) *QP = 31;
+ video->QP_CHR = *QP; /* ANNEX_T */
+ }
+ else
+ {
+ if (BitstreamRead1Bits(stream))
+ {
+ if (BitstreamRead1Bits(stream))
+ {
+ *QP += DQ_tab_Annex_T_11[*QP];
+ }
+ else
+ {
+ *QP += DQ_tab_Annex_T_10[*QP];
+ }
+ if (*QP < 1) *QP = 1;
+ else if (*QP > 31) *QP = 31;
+ }
+ else
+ {
+ *QP = (int16)BitstreamReadBits16(stream, 5);
+ }
+ video->QP_CHR = MQ_chroma_QP_table[*QP];
+ }
+ }
+#else
+ if (MBtype & Q_MASK)
+ {
+ DQUANT = BitstreamReadBits16(stream, 2);
+ *QP += DQ_tab[DQUANT];
+
+ if (*QP < 1) *QP = 1;
+ else if (*QP > 31) *QP = 31;
+ }
+#endif
+ }
+ return PV_SUCCESS;
+}
+
+
+
+
+
+/***********************************************************CommentBegin******
+* 3/10/00 : initial modification to the
+* new PV-Decoder Lib format.
+* 4/2/2000 : Cleanup and error-handling modification. This
+* function has been divided into several sub-functions for
+* better coding style and maintainance reason. I also
+* greatly shrunk the code size here.
+* 9/18/2000 : VlcDecode+Dequant optimization *
+* 4/01/2001 : new ACDC prediction structure
+* 3/29/2002 : removed GetIntraMB and GetInterMB
+***********************************************************CommentEnd********/
+PV_STATUS GetMBData(VideoDecData *video)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int mbnum = video->mbnum;
+ MacroBlock *mblock = video->mblock;
+ int16 *dataBlock;
+ PIXEL *c_comp;
+ uint mode = video->headerInfo.Mode[mbnum];
+ uint CBP = video->headerInfo.CBP[mbnum];
+ typeDCStore *DC = video->predDC + mbnum;
+ int intra_dc_vlc_thr = video->currVop->intraDCVlcThr;
+ int16 QP = video->QPMB[mbnum];
+ int16 QP_tmp = QP;
+ int width = video->width;
+ int comp;
+ int switched;
+ int ncoeffs[6] = {0, 0, 0, 0, 0, 0};
+ int *no_coeff = mblock->no_coeff;
+ int16 DC_coeff;
+ PV_STATUS status;
+
+#ifdef PV_POSTPROC_ON
+ /* post-processing */
+ uint8 *pp_mod[6];
+ int TotalMB = video->nTotalMB;
+ int MB_in_width = video->nMBPerRow;
+#endif
+ int y_pos = video->mbnum_row;
+ int x_pos = video->mbnum_col;
+ int32 offset = (int32)(y_pos << 4) * width + (x_pos << 4);
+
+ /* Decode each 8-by-8 blocks. comp 0 ~ 3 are luminance blocks, 4 ~ 5 */
+ /* are chrominance blocks. 04/03/2000. */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ {
+ /** post-processing ***/
+ pp_mod[0] = video->pstprcTypCur + (y_pos << 1) * (MB_in_width << 1) + (x_pos << 1);
+ pp_mod[1] = pp_mod[0] + 1;
+ pp_mod[2] = pp_mod[0] + (MB_in_width << 1);
+ pp_mod[3] = pp_mod[2] + 1;
+ pp_mod[4] = video->pstprcTypCur + (TotalMB << 2) + mbnum;
+ pp_mod[5] = pp_mod[4] + TotalMB;
+ }
+#endif
+
+ /* oscl_memset(mblock->block, 0, sizeof(typeMBStore)); Aug 9,2005 */
+
+ if (mode & INTRA_MASK) /* MODE_INTRA || MODE_INTRA_Q */
+ {
+ switched = 0;
+ if (intra_dc_vlc_thr)
+ {
+ if (video->usePrevQP)
+ QP_tmp = video->QPMB[mbnum-1]; /* running QP 04/26/01 */
+
+ switched = (intra_dc_vlc_thr == 7 || QP_tmp >= intra_dc_vlc_thr * 2 + 11);
+ }
+
+ mblock->DCScalarLum = cal_dc_scaler(QP, LUMINANCE_DC_TYPE); /* 3/01/01 */
+ mblock->DCScalarChr = cal_dc_scaler(QP, CHROMINANCE_DC_TYPE);
+
+ for (comp = 0; comp < 6; comp++)
+ {
+ dataBlock = mblock->block[comp]; /* 10/20/2000 */
+
+ if (video->shortVideoHeader)
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (!video->advanced_INTRA)
+ {
+#endif
+ DC_coeff = (int16) BitstreamReadBits16_INLINE(stream, 8);
+
+ if ((DC_coeff & 0x7f) == 0) /* 128 & 0 */
+ {
+ /* currently we will only signal FAIL for 128. We will ignore the 0 case */
+ if (DC_coeff == 128)
+ {
+ return PV_FAIL;
+ }
+ else
+ {
+ VideoDecoderErrorDetected(video);
+ }
+ }
+ if (DC_coeff == 255)
+ {
+ DC_coeff = 128;
+ }
+ dataBlock[0] = (int16) DC_coeff;
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ }
+#endif
+ ncoeffs[comp] = VlcDequantH263IntraBlock_SH(video, comp, mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+
+ }
+ else
+ {
+ if (switched == 0)
+ {
+ status = PV_DecodePredictedIntraDC(comp, stream, &DC_coeff);
+ if (status != PV_SUCCESS) return PV_FAIL;
+
+ dataBlock[0] = (int16) DC_coeff;
+ }
+ ncoeffs[comp] = VlcDequantH263IntraBlock(video, comp,
+ switched, mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+ }
+
+ if (VLC_ERROR_DETECTED(ncoeffs[comp]))
+ {
+ if (switched)
+ return PV_FAIL;
+ else
+ {
+ ncoeffs[comp] = 1;
+ oscl_memset((dataBlock + 1), 0, sizeof(int16)*63);
+ }
+ }
+ no_coeff[comp] = ncoeffs[comp];
+
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = (uint8) PostProcSemaphore(dataBlock);
+#endif
+ }
+ MBlockIDCT(video);
+ }
+ else /* INTER modes */
+ { /* moved it here Aug 15, 2005 */
+ /* decode the motion vector (if there are any) */
+ status = PV_GetMBvectors(video, mode);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+
+ MBMotionComp(video, CBP);
+ c_comp = video->currVop->yChan + offset;
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ for (comp = 0; comp < 4; comp++)
+ {
+ (*DC)[comp] = mid_gray;
+ if (CBP & (1 << (5 - comp)))
+ {
+ ncoeffs[comp] = VlcDequantH263InterBlock(video, comp, mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+ if (VLC_ERROR_DETECTED(ncoeffs[comp])) return PV_FAIL;
+
+ BlockIDCT(c_comp + (comp&2)*(width << 2) + 8*(comp&1), mblock->pred_block + (comp&2)*64 + 8*(comp&1), mblock->block[comp], width, ncoeffs[comp],
+ mblock->bitmapcol[comp], mblock->bitmaprow[comp]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = (uint8)((ncoeffs[comp] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = 0;
+#endif
+ }
+ }
+
+ video->QPMB[mbnum] = video->QP_CHR; /* ANNEX_T */
+
+
+
+ (*DC)[4] = mid_gray;
+ if (CBP & 2)
+ {
+ ncoeffs[4] = VlcDequantH263InterBlock(video, 4, mblock->bitmapcol[4], &mblock->bitmaprow[4]);
+ if (VLC_ERROR_DETECTED(ncoeffs[4])) return PV_FAIL;
+
+ BlockIDCT(video->currVop->uChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 256, mblock->block[4], width >> 1, ncoeffs[4],
+ mblock->bitmapcol[4], mblock->bitmaprow[4]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[4] = (uint8)((ncoeffs[4] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[4] = 0;
+#endif
+ }
+ (*DC)[5] = mid_gray;
+ if (CBP & 1)
+ {
+ ncoeffs[5] = VlcDequantH263InterBlock(video, 5, mblock->bitmapcol[5], &mblock->bitmaprow[5]);
+ if (VLC_ERROR_DETECTED(ncoeffs[5])) return PV_FAIL;
+
+ BlockIDCT(video->currVop->vChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 264, mblock->block[5], width >> 1, ncoeffs[5],
+ mblock->bitmapcol[5], mblock->bitmaprow[5]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[5] = (uint8)((ncoeffs[5] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[5] = 0;
+#endif
+ }
+ video->QPMB[mbnum] = QP; /* restore the QP values ANNEX_T*/
+#else
+ for (comp = 0; comp < 4; comp++)
+ {
+ (*DC)[comp] = mid_gray;
+ if (CBP & (1 << (5 - comp)))
+ {
+ ncoeffs[comp] = VlcDequantH263InterBlock(video, comp, mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+ if (VLC_ERROR_DETECTED(ncoeffs[comp])) return PV_FAIL;
+
+ BlockIDCT(c_comp + (comp&2)*(width << 2) + 8*(comp&1), mblock->pred_block + (comp&2)*64 + 8*(comp&1), mblock->block[comp], width, ncoeffs[comp],
+ mblock->bitmapcol[comp], mblock->bitmaprow[comp]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = (uint8)((ncoeffs[comp] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = 0;
+#endif
+ }
+ }
+
+ (*DC)[4] = mid_gray;
+ if (CBP & 2)
+ {
+ ncoeffs[4] = VlcDequantH263InterBlock(video, 4, mblock->bitmapcol[4], &mblock->bitmaprow[4]);
+ if (VLC_ERROR_DETECTED(ncoeffs[4])) return PV_FAIL;
+
+ BlockIDCT(video->currVop->uChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 256, mblock->block[4], width >> 1, ncoeffs[4],
+ mblock->bitmapcol[4], mblock->bitmaprow[4]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[4] = (uint8)((ncoeffs[4] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[4] = 0;
+#endif
+ }
+ (*DC)[5] = mid_gray;
+ if (CBP & 1)
+ {
+ ncoeffs[5] = VlcDequantH263InterBlock(video, 5, mblock->bitmapcol[5], &mblock->bitmaprow[5]);
+ if (VLC_ERROR_DETECTED(ncoeffs[5])) return PV_FAIL;
+
+ BlockIDCT(video->currVop->vChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 264, mblock->block[5], width >> 1, ncoeffs[5],
+ mblock->bitmapcol[5], mblock->bitmaprow[5]);
+
+#ifdef PV_POSTPROC_ON
+ /* for inter just test for ringing */
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[5] = (uint8)((ncoeffs[5] > 3) ? 4 : 0);
+#endif
+ }
+ else
+ {
+ /* no IDCT for all zeros blocks 03/28/2002 */
+ /* BlockIDCT(); */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[5] = 0;
+#endif
+#endif // PV_ANNEX_IJKT_SUPPORT
+
+
+
+
+
+
+ }
+
+ video->usePrevQP = 1; /* should be set after decoding the first Coded 04/27/01 */
+ return PV_SUCCESS;
+}
+
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/conceal.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/conceal.cpp
new file mode 100644
index 0000000..e9ead01
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/conceal.cpp
@@ -0,0 +1,193 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h" /* video decoder function prototypes */
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "scaling.h"
+
+/* ====================================================================== /
+Function : ConcealTexture_I()
+Date : 06/12/2001
+Purpose : Conceal texture for I-partition
+In/out :
+Return :
+Modified :
+/ ====================================================================== */
+void ConcealTexture_I(VideoDecData *video, int32 startFirstPartition, int mb_start, int mb_stop, int slice_counter)
+{
+ int mbnum;
+ BitstreamDecVideo *stream = video->bitstream;
+ int16 QP;
+ int intra_dc_vlc_thr = video->currVop->intraDCVlcThr;
+
+ movePointerTo(stream, startFirstPartition);
+
+ video->usePrevQP = 0;
+ for (mbnum = mb_start; mbnum < mb_stop; mbnum++)
+ {
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, video->nMBPerRow);
+ video->mbnum_col = mbnum - video->mbnum_row * video->nMBPerRow;
+ video->sliceNo[mbnum] = (uint8) slice_counter;
+ QP = video->QPMB[mbnum];
+ PV_VlcDecMCBPC_com_intra(stream);
+ GetMBheaderDataPart_DQUANT_DC(video, &QP);
+
+ if (intra_dc_vlc_thr)
+ {
+ if (video->usePrevQP)
+ QP = video->QPMB[mbnum-1];
+ if (intra_dc_vlc_thr == 7 || QP >= intra_dc_vlc_thr*2 + 11) /* if switched then conceal from previous frame */
+ {
+ ConcealPacket(video, mbnum, mb_stop, slice_counter);
+ video->mbnum = mb_stop - 1;
+ video->mbnum_row = PV_GET_ROW(video->mbnum, video->nMBPerRow);
+ video->mbnum_col = video->mbnum - video->mbnum_row * video->nMBPerRow;
+ break;
+ }
+ }
+
+ video->headerInfo.CBP[mbnum] = 0;
+ video->acPredFlag[mbnum] = 0;
+ GetMBData_DataPart(video);
+ video->usePrevQP = 1;
+ }
+ return;
+}
+
+/* ====================================================================== /
+Function : ConcealTexture_P()
+Date : 05/16/2000
+Purpose : Conceal texture for P-partition
+In/out :
+Return :
+/ ====================================================================== */
+
+void ConcealTexture_P(VideoDecData *video, int mb_start, int mb_stop, int slice_counter)
+{
+ int mbnum;
+
+ for (mbnum = mb_start; mbnum < mb_stop; mbnum++)
+ {
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, video->nMBPerRow);
+ video->mbnum_col = mbnum - video->mbnum_row * video->nMBPerRow;
+ video->sliceNo[mbnum] = (uint8) slice_counter;
+ oscl_memset(video->mblock->block, 0, sizeof(typeMBStore));
+ /* to get rid of dark region caused by INTRA blocks */
+ /* 05/19/2000 */
+ if (video->headerInfo.Mode[mbnum] & INTER_MASK)
+ {
+ MBMotionComp(video, 0);
+ }
+ else
+ {
+ video->headerInfo.Mode[mbnum] = MODE_SKIPPED;
+ SkippedMBMotionComp(video);
+ }
+ }
+
+ return;
+}
+
+/***************************************************************
+Function: ConcealPacket
+Purpose : Conceal motion and texture of a packet by direct
+copying from previous frame.
+Returned: void
+Modified:
+*************************************************************/
+void ConcealPacket(VideoDecData *video,
+ int mb_start,
+ int mb_stop,
+ int slice_counter)
+{
+ int i;
+ for (i = mb_start; i < mb_stop; i++)
+ {
+ CopyVopMB(video->currVop, video->concealFrame, i, video->width, video->height);
+ video->sliceNo[i] = (uint8) slice_counter;
+ video->headerInfo.Mode[i] = MODE_SKIPPED;
+ }
+
+ return;
+}
+
+/****************************************************************************
+Function: CopyVopMB
+Purpose : Fill a macroblock with previous Vop.
+Returned : void
+Modified: 6/04/2001 rewrote the function
+ copies from concealFrame
+****************************************************************************/
+void CopyVopMB(Vop *curr, uint8 *prevFrame, int mbnum, int width_Y, int height)
+{
+ int width_C = width_Y >> 1;
+ int row = MB_SIZE;
+ uint8 *y1, *y2, *u1, *u2, *v1, *v2;
+ int xpos, ypos, MB_in_width;
+ int32 lumstart, chrstart, size;
+
+ MB_in_width = (width_Y + 15) >> 4;
+ ypos = PV_GET_ROW(mbnum, MB_in_width);
+ xpos = mbnum - ypos * MB_in_width;
+ lumstart = (ypos << 4) * (int32)width_Y + (xpos << 4);
+ chrstart = (ypos << 3) * (int32)width_C + (xpos << 3);
+
+ size = (int32)height * width_Y;
+
+ y1 = curr->yChan + lumstart;
+ u1 = curr->uChan + chrstart;
+ v1 = curr->vChan + chrstart;
+ y2 = prevFrame + lumstart;
+ u2 = prevFrame + size + chrstart;
+ v2 = prevFrame + size + (size >> 2) + chrstart;
+ while (row)
+ {
+ oscl_memcpy(y1, y2, MB_SIZE);
+ y1 += width_Y;
+ y2 += width_Y;
+ oscl_memcpy(y1, y2, MB_SIZE);
+ y1 += width_Y;
+ y2 += width_Y;
+ oscl_memcpy(y1, y2, MB_SIZE);
+ y1 += width_Y;
+ y2 += width_Y;
+ oscl_memcpy(y1, y2, MB_SIZE);
+ y1 += width_Y;
+ y2 += width_Y;
+
+ oscl_memcpy(u1, u2, B_SIZE);
+ u1 += width_C;
+ u2 += width_C;
+ oscl_memcpy(u1, u2, B_SIZE);
+ u1 += width_C;
+ u2 += width_C;
+
+ oscl_memcpy(v1, v2, B_SIZE);
+ v1 += width_C;
+ v2 += width_C;
+ oscl_memcpy(v1, v2, B_SIZE);
+ v1 += width_C;
+ v2 += width_C;
+
+ row -= 4;
+ }
+ return;
+} /* CopyVopMB */
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/datapart_decode.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/datapart_decode.cpp
new file mode 100644
index 0000000..00db04b
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/datapart_decode.cpp
@@ -0,0 +1,794 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "scaling.h"
+#include "mbtype_mode.h"
+#include "idct.h"
+
+#define OSCL_DISABLE_WARNING_CONDITIONAL_IS_CONSTANT
+/* ======================================================================== */
+/* Function : DecodeFrameDataPartMode() */
+/* Purpose : Decode a frame of MPEG4 bitstream in datapartitioning mode. */
+/* In/out : */
+/* Return : */
+/* Modified : */
+/* */
+/* 04/25/2000 : Rewrite the data partitioning path completely */
+/* according to the pseudo codes in MPEG-4 */
+/* standard. */
+/* Modified : 09/18/2000 add fast VlcDecode+Dequant */
+/* 04/17/2001 cleanup */
+/* ======================================================================== */
+PV_STATUS DecodeFrameDataPartMode(VideoDecData *video)
+{
+ PV_STATUS status;
+ Vop *currVop = video->currVop;
+ BitstreamDecVideo *stream = video->bitstream;
+
+ int nMBPerRow = video->nMBPerRow;
+
+ int vopType = currVop->predictionType;
+ int mbnum;
+ int nTotalMB = video->nTotalMB;
+ int slice_counter;
+ int resync_marker_length;
+
+ /* copy and pad to prev_Vop for INTER coding */
+ switch (vopType)
+ {
+ case I_VOP :
+// oscl_memset(Mode, MODE_INTRA, sizeof(uint8)*nTotalMB);
+ resync_marker_length = 17;
+ break;
+ case P_VOP :
+ oscl_memset(video->motX, 0, sizeof(MOT)*4*nTotalMB);
+ oscl_memset(video->motY, 0, sizeof(MOT)*4*nTotalMB);
+// oscl_memset(Mode, MODE_INTER, sizeof(uint8)*nTotalMB);
+ resync_marker_length = 16 + currVop->fcodeForward;
+ break;
+ default :
+ mp4dec_log("DecodeFrameDataPartMode(): Vop type not supported.\n");
+ return PV_FAIL;
+ }
+
+ /** Initialize sliceNo ***/
+ mbnum = slice_counter = 0;
+// oscl_memset(video->sliceNo, 0, sizeof(uint8)*nTotalMB);
+
+ do
+ {
+ /* This section is equivalent to motion_shape_texture() */
+ /* in the MPEG-4 standard. 04/13/2000 */
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, nMBPerRow); /* This is needed if nbnum is read from the packet header */
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+
+ switch (vopType)
+ {
+ case I_VOP :
+ status = DecodeDataPart_I_VideoPacket(video, slice_counter);
+ break;
+
+ case P_VOP :
+ status = DecodeDataPart_P_VideoPacket(video, slice_counter);
+ break;
+
+ default :
+ mp4dec_log("DecodeFrameDataPartMode(): Vop type not supported.\n");
+ return PV_FAIL;
+ }
+
+ while ((status = PV_ReadVideoPacketHeader(video, &mbnum)) == PV_FAIL)
+ {
+ if ((status = quickSearchVideoPacketHeader(stream, resync_marker_length)) != PV_SUCCESS)
+ {
+ break;
+ }
+ }
+
+ if (status == PV_END_OF_VOP)
+ {
+ mbnum = nTotalMB;
+ }
+
+ if (mbnum > video->mbnum + 1)
+ {
+ ConcealPacket(video, video->mbnum, mbnum, slice_counter);
+ }
+ slice_counter++;
+ if (mbnum >= nTotalMB)
+ {
+ break;
+ }
+
+
+ }
+ while (TRUE);
+
+ return PV_SUCCESS;
+}
+
+
+/* ======================================================================== */
+/* Function : DecodeDataPart_I_VideoPacket() */
+/* Date : 04/25/2000 */
+/* Purpose : Decode Data Partitioned Mode Video Packet in I-VOP */
+/* In/out : */
+/* Return : PV_SUCCESS if successed, PV_FAIL if failed. */
+/* Modified : 09/18/2000 add fast VlcDecode+Dequant */
+/* 04/01/2001 fixed MB_stuffing, removed unnecessary code */
+/* ======================================================================== */
+PV_STATUS DecodeDataPart_I_VideoPacket(VideoDecData *video, int slice_counter)
+{
+ PV_STATUS status;
+ uint8 *Mode = video->headerInfo.Mode;
+ BitstreamDecVideo *stream = video->bitstream;
+ int nTotalMB = video->nTotalMB;
+ int mbnum, mb_start, mb_end;
+ int16 QP, *QPMB = video->QPMB;
+ int MBtype, MCBPC, CBPY;
+ uint32 tmpvar;
+ uint code;
+ int nMBPerRow = video->nMBPerRow;
+ Bool valid_stuffing;
+ int32 startSecondPart, startFirstPart = getPointer(stream);
+
+ /* decode the first partition */
+ QP = video->currVop->quantizer;
+ mb_start = mbnum = video->mbnum;
+ video->usePrevQP = 0; /* 04/27/01 */
+
+
+ BitstreamShowBits16(stream, 9, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, 9);
+ BitstreamShowBits16(stream, 9, &code);
+ }
+
+ do
+ {
+ /* decode COD, MCBPC, ACpred_flag, CPBY and DQUANT */
+ MCBPC = PV_VlcDecMCBPC_com_intra(stream);
+
+ if (!VLC_ERROR_DETECTED(MCBPC))
+ {
+ Mode[mbnum] = (uint8)(MBtype = MBtype_mode[MCBPC & 7]);
+ video->headerInfo.CBP[mbnum] = (uint8)((MCBPC >> 4) & 3);
+ status = GetMBheaderDataPart_DQUANT_DC(video, &QP);
+ video->usePrevQP = 1; /* set it after the first coded MB 04/27/01 */
+ }
+ else
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ video->mbnum = mb_start;
+ movePointerTo(stream, startFirstPart);
+ return PV_FAIL;
+ }
+
+ video->sliceNo[mbnum] = (uint8) slice_counter;
+ QPMB[mbnum] = QP;
+ video->mbnum = ++mbnum;
+
+ BitstreamShowBits16(stream, 9, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, 9);
+ BitstreamShowBits16(stream, 9, &code);
+ }
+ /* have we reached the end of the video packet or vop? */
+ status = BitstreamShowBits32(stream, DC_MARKER_LENGTH, &tmpvar);
+
+ }
+ while (tmpvar != DC_MARKER && video->mbnum < nTotalMB);
+
+ if (tmpvar == DC_MARKER)
+ {
+ PV_BitstreamFlushBits(stream, DC_MARKER_LENGTH);
+ }
+ else
+ {
+ status = quickSearchDCM(stream);
+ if (status == PV_SUCCESS)
+ {
+ /* only way you can end up being here is in the last packet,and there is stuffing at
+ the end of the first partition */
+ PV_BitstreamFlushBits(stream, DC_MARKER_LENGTH);
+ }
+ else
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startFirstPart);
+ video->mbnum = mb_start;
+ /* concealment will be taken care of in the upper layer */
+ return PV_FAIL;
+ }
+ }
+
+ /* decode the second partition */
+ startSecondPart = getPointer(stream);
+
+ mb_end = video->mbnum;
+
+ for (mbnum = mb_start; mbnum < mb_end; mbnum++)
+ {
+ MBtype = Mode[mbnum];
+ /* No skipped mode in I-packets 3/1/2001 */
+ video->mbnum = mbnum;
+
+ video->mbnum_row = PV_GET_ROW(mbnum, nMBPerRow); /* This is needed if nbnum is read from the packet header */
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+ /* there is always acdcpred in DataPart mode 04/10/01 */
+ video->acPredFlag[mbnum] = (uint8) BitstreamRead1Bits(stream);
+
+ CBPY = PV_VlcDecCBPY(stream, MBtype & INTRA_MASK); /* MODE_INTRA || MODE_INTRA_Q */
+ if (CBPY < 0)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startSecondPart); /* */
+ /* Conceal packet, 05/15/2000 */
+ ConcealTexture_I(video, startFirstPart, mb_start, mb_end, slice_counter);
+ return PV_FAIL;
+ }
+
+ video->headerInfo.CBP[mbnum] |= (uint8)(CBPY << 2);
+ }
+
+ video->usePrevQP = 0;
+
+ for (mbnum = mb_start; mbnum < mb_end; mbnum++)
+ {
+ video->mbnum = mbnum;
+
+ video->mbnum_row = PV_GET_ROW(mbnum , nMBPerRow); /* This is needed if nbnum is read from the packet header */
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+ /* No skipped mode in I-packets 3/1/2001 */
+ /* decode the DCT coeficients for the MB */
+ status = GetMBData_DataPart(video);
+ if (status != PV_SUCCESS)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startSecondPart); /* */
+ /* Conceal packet, 05/15/2000 */
+ ConcealTexture_I(video, startFirstPart, mb_start, mb_end, slice_counter);
+ return status;
+ }
+ video->usePrevQP = 1; /* 04/27/01 should be set after decoding first MB */
+ }
+
+ valid_stuffing = validStuffing(stream);
+ if (!valid_stuffing)
+ {
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startSecondPart);
+ ConcealTexture_I(video, startFirstPart, mb_start, mb_end, slice_counter);
+ return PV_FAIL;
+ }
+ return PV_SUCCESS;
+}
+
+
+/* ======================================================================== */
+/* Function : DecodeDataPart_P_VideoPacket() */
+/* Date : 04/25/2000 */
+/* Purpose : Decode Data Partitioned Mode Video Packet in P-VOP */
+/* In/out : */
+/* Return : PV_SUCCESS if successed, PV_FAIL if failed. */
+/* Modified : 09/18/2000, fast VlcDecode+Dequant */
+/* 04/13/2001, fixed MB_stuffing, new ACDC pred structure, */
+/* cleanup */
+/* 08/07/2001, remove MBzero */
+/* ======================================================================== */
+PV_STATUS DecodeDataPart_P_VideoPacket(VideoDecData *video, int slice_counter)
+{
+ PV_STATUS status;
+ uint8 *Mode = video->headerInfo.Mode;
+ BitstreamDecVideo *stream = video->bitstream;
+ int nTotalMB = video->nTotalMB;
+ int mbnum, mb_start, mb_end;
+ int16 QP, *QPMB = video->QPMB;
+ int MBtype, CBPY;
+ Bool valid_stuffing;
+ int intra_MB;
+ uint32 tmpvar;
+ uint code;
+ int32 startFirstPart, startSecondPart;
+ int nMBPerRow = video->nMBPerRow;
+ uint8 *pbyte;
+ /* decode the first partition */
+ startFirstPart = getPointer(stream);
+ mb_start = video->mbnum;
+ video->usePrevQP = 0; /* 04/27/01 */
+
+ BitstreamShowBits16(stream, 10, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, 10);
+ BitstreamShowBits16(stream, 10, &code);
+ }
+
+ do
+ {
+ /* decode COD, MCBPC, ACpred_flag, CPBY and DQUANT */
+ /* We have to discard stuffed MB header */
+
+ status = GetMBheaderDataPart_P(video);
+
+ if (status != PV_SUCCESS)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startFirstPart);
+ video->mbnum = mb_start;
+ return PV_FAIL;
+ }
+
+ /* we must update slice_counter before motion vector decoding. */
+ video->sliceNo[video->mbnum] = (uint8) slice_counter;
+
+ if (Mode[video->mbnum] & INTER_MASK) /* INTER || INTER_Q || INTER_4V */
+ {
+ /* decode the motion vector (if there are any) */
+ status = PV_GetMBvectors(video, Mode[video->mbnum]);
+ if (status != PV_SUCCESS)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startFirstPart);
+ video->mbnum = mb_start;
+ return PV_FAIL;
+ }
+ }
+ video->mbnum++;
+
+ video->mbnum_row = PV_GET_ROW(video->mbnum, nMBPerRow); /* This is needed if mbnum is read from the packet header */
+ video->mbnum_col = video->mbnum - video->mbnum_row * nMBPerRow;
+
+ BitstreamShowBits16(stream, 10, &code);
+ while (code == 1)
+ {
+ PV_BitstreamFlushBits(stream, 10);
+ BitstreamShowBits16(stream, 10, &code);
+ }
+ /* have we reached the end of the video packet or vop? */
+ status = BitstreamShowBits32(stream, MOTION_MARKER_COMB_LENGTH, &tmpvar);
+ /* if (status != PV_SUCCESS && status != PV_END_OF_BUFFER) return status; */
+ }
+ while (tmpvar != MOTION_MARKER_COMB && video->mbnum < nTotalMB);
+
+ if (tmpvar == MOTION_MARKER_COMB)
+ {
+ PV_BitstreamFlushBits(stream, MOTION_MARKER_COMB_LENGTH);
+ }
+ else
+ {
+ status = quickSearchMotionMarker(stream);
+ if (status == PV_SUCCESS)
+ {
+ /* only way you can end up being here is in the last packet,and there is stuffing at
+ the end of the first partition */
+ PV_BitstreamFlushBits(stream, MOTION_MARKER_COMB_LENGTH);
+ }
+ else
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startFirstPart);
+ video->mbnum = mb_start;
+ /* concealment will be taken care of in the upper layer */
+ return PV_FAIL;
+ }
+ }
+
+ /* decode the second partition */
+ startSecondPart = getPointer(stream);
+ QP = video->currVop->quantizer;
+
+ mb_end = video->mbnum;
+
+ for (mbnum = mb_start; mbnum < mb_end; mbnum++)
+ {
+ MBtype = Mode[mbnum];
+
+ if (MBtype == MODE_SKIPPED)
+ {
+ QPMB[mbnum] = QP; /* 03/01/01 */
+ continue;
+ }
+ intra_MB = (MBtype & INTRA_MASK); /* (MBtype == MODE_INTRA || MBtype == MODE_INTRA_Q) */
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, nMBPerRow); /* This is needed if nbnum is read from the packet header */
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+
+ /* there is always acdcprediction in DataPart mode 04/10/01 */
+ if (intra_MB)
+ {
+ video->acPredFlag[mbnum] = (uint8) BitstreamRead1Bits_INLINE(stream);
+ }
+
+ CBPY = PV_VlcDecCBPY(stream, intra_MB);
+ if (CBPY < 0)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+ /* Conceal second partition, 5/15/2000 */
+ movePointerTo(stream, startSecondPart);
+ ConcealTexture_P(video, mb_start, mb_end, slice_counter);
+ return PV_FAIL;
+ }
+
+ video->headerInfo.CBP[mbnum] |= (uint8)(CBPY << 2);
+ if (intra_MB || MBtype == MODE_INTER_Q) /* 04/26/01 */
+ {
+ status = GetMBheaderDataPart_DQUANT_DC(video, &QP);
+ if (status != PV_SUCCESS) return status;
+ }
+ video->usePrevQP = 1; /* 04/27/01 */
+ QPMB[mbnum] = QP;
+ }
+
+ video->usePrevQP = 0; /* 04/27/01 */
+
+ for (mbnum = mb_start; mbnum < mb_end; mbnum++)
+ {
+ video->mbnum = mbnum;
+ video->mbnum_row = PV_GET_ROW(mbnum, nMBPerRow); /* This is needed if nbnum is read from the packet header */
+ video->mbnum_col = mbnum - video->mbnum_row * nMBPerRow;
+
+
+ if (Mode[mbnum] != MODE_SKIPPED)
+ {
+ /* decode the DCT coeficients for the MB */
+ status = GetMBData_DataPart(video);
+ if (status != PV_SUCCESS)
+ {
+ /* Report the error to the application. 06/20/2000 */
+ VideoDecoderErrorDetected(video);
+
+ /* Conceal second partition, 5/15/2000 */
+ movePointerTo(stream, startSecondPart);
+ ConcealTexture_P(video, mb_start, mb_end, slice_counter);
+ return status;
+ }
+ video->usePrevQP = 1; /* 04/27/01 */
+ }
+ else
+ { // SKIPPED
+
+ /* Motion compensation and put it to video->mblock->pred_block */
+ SkippedMBMotionComp(video);
+
+ //oscl_memset(video->predDCAC_row + video->mbnum_col, 0, sizeof(typeDCACStore)); /* SKIPPED_ACDC */
+ //oscl_memset(video->predDCAC_col, 0, sizeof(typeDCACStore));
+ /* 08/08/2005 */
+ pbyte = (uint8*)(video->predDCAC_row + video->mbnum_col);
+ ZERO_OUT_64BYTES(pbyte);
+ pbyte = (uint8*)(video->predDCAC_col);
+ ZERO_OUT_64BYTES(pbyte);
+
+ }
+ }
+
+ valid_stuffing = validStuffing(stream); /* */
+ if (!valid_stuffing)
+ {
+ VideoDecoderErrorDetected(video);
+ movePointerTo(stream, startSecondPart); /* */
+ ConcealTexture_P(video, mb_start, mb_end, slice_counter);
+
+ return PV_FAIL;
+ }
+ return PV_SUCCESS;
+}
+
+
+/* ======================================================================== */
+/* Function : GetMBheaderDataPart_DQUANT_DC() */
+/* Date : 04/26/2000 */
+/* Purpose : Decode DQUANT and DC in Data Partitioned Mode for both */
+/* I-VOP and P-VOP. */
+/* In/out : */
+/* Return : PV_SUCCESS if successed, PV_FAIL if failed. */
+/* Modified : 02/13/2001 new ACDC prediction structure, */
+/* cleanup */
+/* ======================================================================== */
+PV_STATUS GetMBheaderDataPart_DQUANT_DC(VideoDecData *video, int16 *QP)
+{
+ PV_STATUS status = PV_SUCCESS;
+ BitstreamDecVideo *stream = video->bitstream;
+ int mbnum = video->mbnum;
+ int intra_dc_vlc_thr = video->currVop->intraDCVlcThr;
+ uint8 *Mode = video->headerInfo.Mode;
+ int MBtype = Mode[mbnum];
+ typeDCStore *DC = video->predDC + mbnum;
+ int comp;
+ Bool switched;
+ uint DQUANT;
+ int16 QP_tmp;
+
+ const static int DQ_tab[4] = { -1, -2, 1, 2};
+
+ if (MBtype & Q_MASK) /* INTRA_Q || INTER_Q */
+ {
+ DQUANT = BitstreamReadBits16(stream, 2);
+ *QP += DQ_tab[DQUANT];
+
+ if (*QP < 1) *QP = 1;
+ else if (*QP > 31) *QP = 31;
+ }
+ if (MBtype & INTRA_MASK) /* INTRA || INTRA_Q */ /* no switch, code DC separately */
+ {
+ QP_tmp = *QP; /* running QP 04/26/01*/
+ switched = 0;
+ if (intra_dc_vlc_thr) /* 04/27/01 */
+ {
+ if (video->usePrevQP)
+ QP_tmp = video->QPMB[mbnum-1];
+ switched = (intra_dc_vlc_thr == 7 || QP_tmp >= intra_dc_vlc_thr * 2 + 11);
+ }
+ if (!switched)
+ {
+ for (comp = 0; comp < 6; comp++)
+ {
+ status = PV_DecodePredictedIntraDC(comp, stream, (*DC + comp)); /* 03/01/01 */
+ if (status != PV_SUCCESS) return PV_FAIL;
+ }
+ }
+ else
+ {
+ for (comp = 0; comp < 6; comp++)
+ {
+ (*DC)[comp] = 0; /* 04/26/01 needed for switched case*/
+ }
+ }
+ }
+ return status;
+}
+
+
+/***********************************************************CommentBegin******
+* 04/25/2000 : Initial modification to the new PV Lib format.
+* 04/17/2001 : new ACDC pred structure
+***********************************************************CommentEnd********/
+PV_STATUS GetMBheaderDataPart_P(VideoDecData *video)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int mbnum = video->mbnum;
+ uint8 *Mode = video->headerInfo.Mode;
+ typeDCStore *DC = video->predDC + mbnum;
+ uint no_dct_flag;
+ int comp;
+ int MCBPC;
+
+ no_dct_flag = BitstreamRead1Bits_INLINE(stream);
+
+ if (no_dct_flag)
+ {
+ /* skipped macroblock */
+ Mode[mbnum] = MODE_SKIPPED;
+
+ for (comp = 0; comp < 6; comp++)
+ {
+ (*DC)[comp] = mid_gray;
+ /* ACDC REMOVE AC coefs are set in DecodeDataPart_P */
+ }
+ }
+ else
+ {
+ /* coded macroblock */
+ MCBPC = PV_VlcDecMCBPC_com_inter(stream);
+
+ if (VLC_ERROR_DETECTED(MCBPC))
+ {
+ return PV_FAIL;
+ }
+
+ Mode[mbnum] = (uint8)MBtype_mode[MCBPC & 7];
+ video->headerInfo.CBP[mbnum] = (uint8)((MCBPC >> 4) & 3);
+ }
+
+ return PV_SUCCESS;
+}
+
+
+/***********************************************************CommentBegin******
+* 04/17/01 new ACDC pred structure, reorganized code, cleanup
+***********************************************************CommentEnd********/
+PV_STATUS GetMBData_DataPart(VideoDecData *video)
+{
+ int mbnum = video->mbnum;
+ int16 *dataBlock;
+ MacroBlock *mblock = video->mblock;
+ int QP = video->QPMB[mbnum];
+ int32 offset;
+ PIXEL *c_comp;
+ int width = video->width;
+ int intra_dc_vlc_thr = video->currVop->intraDCVlcThr;
+ uint CBP = video->headerInfo.CBP[mbnum];
+ uint8 mode = video->headerInfo.Mode[mbnum];
+ int x_pos = video->mbnum_col;
+ typeDCStore *DC = video->predDC + mbnum;
+ int ncoeffs[6], *no_coeff = mblock->no_coeff;
+ int comp;
+ Bool switched;
+ int QP_tmp = QP;
+
+ int y_pos = video->mbnum_row;
+#ifdef PV_POSTPROC_ON
+ uint8 *pp_mod[6];
+ int TotalMB = video->nTotalMB;
+ int MB_in_width = video->nMBPerRow;
+#endif
+
+
+
+ /*****
+ * Decoding of the 6 blocks (depending on transparent pattern)
+ *****/
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ {
+ /** post-processing ***/
+ pp_mod[0] = video->pstprcTypCur + (y_pos << 1) * (MB_in_width << 1) + (x_pos << 1);
+ pp_mod[1] = pp_mod[0] + 1;
+ pp_mod[2] = pp_mod[0] + (MB_in_width << 1);
+ pp_mod[3] = pp_mod[2] + 1;
+ pp_mod[4] = video->pstprcTypCur + (TotalMB << 2) + mbnum;
+ pp_mod[5] = pp_mod[4] + TotalMB;
+ }
+#endif
+
+ /* oscl_memset(mblock->block, 0, sizeof(typeMBStore)); Aug 9,2005 */
+
+ if (mode & INTRA_MASK) /* MODE_INTRA || mode == MODE_INTRA_Q */
+ {
+ switched = 0;
+ if (intra_dc_vlc_thr)
+ {
+ if (video->usePrevQP)
+ QP_tmp = video->QPMB[mbnum-1]; /* running QP 04/26/01 */
+
+ switched = (intra_dc_vlc_thr == 7 || QP_tmp >= intra_dc_vlc_thr * 2 + 11);
+ }
+
+ mblock->DCScalarLum = cal_dc_scaler(QP, LUMINANCE_DC_TYPE); /* ACDC 03/01/01 */
+ mblock->DCScalarChr = cal_dc_scaler(QP, CHROMINANCE_DC_TYPE);
+
+ for (comp = 0; comp < 6; comp++)
+ {
+ dataBlock = mblock->block[comp]; /*, 10/20/2000 */
+
+ dataBlock[0] = (*DC)[comp];
+
+ ncoeffs[comp] = VlcDequantH263IntraBlock(video, comp,
+ switched, mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+
+ if (VLC_ERROR_DETECTED(ncoeffs[comp])) /* */
+ {
+ if (switched)
+ return PV_FAIL;
+ else
+ {
+ ncoeffs[comp] = 1;
+ oscl_memset((dataBlock + 1), 0, sizeof(int16)*63);
+ }
+ }
+ no_coeff[comp] = ncoeffs[comp];
+ /* modified to new semaphore for post-proc */
+ // Future work:: can be combined in the dequant function
+ // @todo Deblocking Semaphore for INTRA block
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = (uint8) PostProcSemaphore(dataBlock);
+#endif
+ }
+ MBlockIDCT(video);
+ }
+ else /* MODE INTER*/
+ {
+
+
+
+
+ MBMotionComp(video, CBP);
+ offset = (int32)(y_pos << 4) * width + (x_pos << 4);
+ c_comp = video->currVop->yChan + offset;
+
+
+ for (comp = 0; comp < 4; comp++)
+ {
+ (*DC)[comp] = mid_gray;
+
+ if (CBP & (1 << (5 - comp)))
+ {
+ ncoeffs[comp] = VlcDequantH263InterBlock(video, comp,
+ mblock->bitmapcol[comp], &mblock->bitmaprow[comp]);
+ if (VLC_ERROR_DETECTED(ncoeffs[comp]))
+ return PV_FAIL;
+
+
+ BlockIDCT(c_comp + (comp&2)*(width << 2) + 8*(comp&1), mblock->pred_block + (comp&2)*64 + 8*(comp&1), mblock->block[comp], width, ncoeffs[comp],
+ mblock->bitmapcol[comp], mblock->bitmaprow[comp]);
+
+ }
+ else
+ {
+ ncoeffs[comp] = 0;
+ }
+
+ /* @todo Deblocking Semaphore for INTRA block, for inter just test for ringing */
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[comp] = (uint8)((ncoeffs[comp] > 3) ? 4 : 0);
+#endif
+ }
+
+ (*DC)[4] = mid_gray;
+ if (CBP & 2)
+ {
+ ncoeffs[4] = VlcDequantH263InterBlock(video, 4,
+ mblock->bitmapcol[4], &mblock->bitmaprow[4]);
+ if (VLC_ERROR_DETECTED(ncoeffs[4]))
+ return PV_FAIL;
+
+ BlockIDCT(video->currVop->uChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 256, mblock->block[4], width >> 1, ncoeffs[4],
+ mblock->bitmapcol[4], mblock->bitmaprow[4]);
+
+ }
+ else
+ {
+ ncoeffs[4] = 0;
+ }
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[4] = (uint8)((ncoeffs[4] > 3) ? 4 : 0);
+#endif
+ (*DC)[5] = mid_gray;
+ if (CBP & 1)
+ {
+ ncoeffs[5] = VlcDequantH263InterBlock(video, 5,
+ mblock->bitmapcol[5], &mblock->bitmaprow[5]);
+ if (VLC_ERROR_DETECTED(ncoeffs[5]))
+ return PV_FAIL;
+
+ BlockIDCT(video->currVop->vChan + (offset >> 2) + (x_pos << 2), mblock->pred_block + 264, mblock->block[5], width >> 1, ncoeffs[5],
+ mblock->bitmapcol[5], mblock->bitmaprow[5]);
+
+ }
+ else
+ {
+ ncoeffs[5] = 0;
+ }
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ *pp_mod[5] = (uint8)((ncoeffs[5] > 3) ? 4 : 0);
+#endif
+
+
+
+
+ /* Motion compensation and put it to video->mblock->pred_block */
+ }
+ return PV_SUCCESS;
+}
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/dcac_prediction.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/dcac_prediction.cpp
new file mode 100644
index 0000000..2a8bf1e
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/dcac_prediction.cpp
@@ -0,0 +1,368 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "zigzag.h"
+#include "scaling.h"
+
+void doDCACPrediction(
+ VideoDecData *video,
+ int comp,
+ int16 *q_block,
+ int *direction
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int i;
+ int mbnum = video->mbnum;
+ int nMBPerRow = video->nMBPerRow;
+ int x_pos = video->mbnum_col;
+ int y_pos = video->mbnum_row;
+ int16 *AC_tmp;
+ int QP_tmp;
+ int16 *QP_store = video->QPMB + mbnum;
+ int QP = video->QPMB[mbnum];
+ int QP_half = QP >> 1;
+ int32 val;
+ int flag_0 = FALSE, flag_1 = FALSE;
+ uint8 *slice_nb = video->sliceNo;
+ typeDCStore *DC_store = video->predDC + mbnum;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+
+ uint ACpred_flag = (uint) video->acPredFlag[mbnum];
+
+ int left_bnd, up_bnd;
+
+ static const int Xpos[6] = { -1, 0, -1, 0, -1, -1};
+ static const int Ypos[6] = { -1, -1, 0, 0, -1, -1};
+
+ static const int Xtab[6] = {1, 0, 3, 2, 4, 5};
+ static const int Ytab[6] = {2, 3, 0, 1, 4, 5};
+ static const int Ztab[6] = {3, 2, 1, 0, 4, 5};
+
+ /* I added these to speed up comparisons */
+ static const int Pos0[6] = { 1, 1, 0, 0, 1, 1};
+ static const int Pos1[6] = { 1, 0, 1, 0, 1, 1};
+
+ static const int B_Xtab[6] = {0, 1, 0, 1, 2, 3};
+ static const int B_Ytab[6] = {0, 0, 1, 1, 2, 3};
+
+// int *direction; /* 0: HORIZONTAL, 1: VERTICAL */
+ int block_A, block_B, block_C;
+ int DC_pred;
+ int y_offset, x_offset, x_tab, y_tab, z_tab; /* speedup coefficients */
+ int b_xtab, b_ytab;
+
+ if (!comp && x_pos && !(video->headerInfo.Mode[mbnum-1]&INTRA_MASK)) /* not intra */
+ {
+ oscl_memset(DCAC_col, 0, sizeof(typeDCACStore));
+ }
+ if (!comp && y_pos && !(video->headerInfo.Mode[mbnum-nMBPerRow]&INTRA_MASK)) /* not intra */
+ {
+ oscl_memset(DCAC_row, 0, sizeof(typeDCACStore));
+ }
+
+ y_offset = Ypos[comp] * nMBPerRow;
+ x_offset = Xpos[comp];
+ x_tab = Xtab[comp];
+ y_tab = Ytab[comp];
+ z_tab = Ztab[comp];
+
+ b_xtab = B_Xtab[comp];
+ b_ytab = B_Ytab[comp];
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Find the direction of prediction and the DC prediction */
+
+ if (x_pos == 0 && y_pos == 0)
+ { /* top left corner */
+ block_A = (comp == 1 || comp == 3) ? flag_0 = TRUE, DC_store[0][x_tab] : mid_gray;
+ block_B = (comp == 3) ? DC_store[x_offset][z_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3) ? flag_1 = TRUE, DC_store[0][y_tab] : mid_gray;
+ }
+ else if (x_pos == 0)
+ { /* left edge */
+ up_bnd = Pos0[comp] && slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow];
+
+ block_A = (comp == 1 || comp == 3) ? flag_0 = TRUE, DC_store[0][x_tab] : mid_gray;
+ block_B = ((comp == 1 && up_bnd) || comp == 3) ? DC_store[y_offset+x_offset][z_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3 || up_bnd) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+ else if (y_pos == 0)
+ { /* top row */
+ left_bnd = Pos1[comp] && slice_nb[mbnum] == slice_nb[mbnum-1];
+
+ block_A = (comp == 1 || comp == 3 || left_bnd) ? flag_0 = TRUE, DC_store[x_offset][x_tab] : mid_gray;
+ block_B = ((comp == 2 && left_bnd) || comp == 3) ? DC_store[y_offset + x_offset][z_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+ else
+ {
+ up_bnd = Pos0[comp] && slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow];
+ left_bnd = Pos1[comp] && slice_nb[mbnum] == slice_nb[mbnum-1];
+
+ block_A = (comp == 1 || comp == 3 || left_bnd) ? flag_0 = TRUE, DC_store[x_offset][x_tab] : mid_gray;
+ block_B = (((comp == 0 || comp == 4 || comp == 5) && slice_nb[mbnum] == slice_nb[mbnum-1-nMBPerRow]) ||
+ (comp == 1 && up_bnd) || (comp == 2 && left_bnd) || (comp == 3)) ? DC_store[y_offset+x_offset][z_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3 || up_bnd) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+
+
+ if ((PV_ABS((block_A - block_B))) < (PV_ABS((block_B - block_C))))
+ {
+ DC_pred = block_C;
+ *direction = 1;
+ if (ACpred_flag == 1)
+ {
+ if (flag_1)
+ {
+ AC_tmp = DCAC_row[0][b_xtab];
+ QP_tmp = QP_store[y_offset];
+ if (QP_tmp == QP)
+ {
+ for (i = 1; i < 8; i++)
+ {
+ q_block[i] = *AC_tmp++;
+ }
+ }
+ else
+ {
+ for (i = 1; i < 8; i++)
+ {
+ val = (int32)(*AC_tmp++) * QP_tmp;
+ q_block[i] = (val < 0) ? (int16)((val - QP_half) / QP) : (int16)((val + QP_half) / QP);
+ /* Vertical, top ROW of block C */
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ DC_pred = block_A;
+ *direction = 0;
+ if (ACpred_flag == 1)
+ {
+ if (flag_0)
+ {
+ AC_tmp = DCAC_col[0][b_ytab];
+ QP_tmp = QP_store[x_offset];
+ if (QP_tmp == QP)
+ {
+ for (i = 1; i < 8; i++)
+ {
+ q_block[i<<3] = *AC_tmp++;
+ }
+ }
+ else
+ {
+ for (i = 1; i < 8; i++)
+ {
+ val = (int32)(*AC_tmp++) * QP_tmp;
+ q_block[i<<3] = (val < 0) ? (int16)((val - QP_half) / QP) : (int16)((val + QP_half) / QP);
+ /* Vertical, top ROW of block C */
+ }
+ }
+ }
+ }
+ }
+
+ /* Now predict the DC coefficient */
+ QP_tmp = (comp < 4) ? video->mblock->DCScalarLum : video->mblock->DCScalarChr;
+ q_block[0] += (int16)((DC_pred + (QP_tmp >> 1)) * scale[QP_tmp] >> 18);
+// q_block[0] += (DC_pred+(QP_tmp>>1))/QP_tmp;
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#ifdef PV_ANNEX_IJKT_SUPPORT
+void doDCACPrediction_I(
+ VideoDecData *video,
+ int comp,
+ int16 *q_block
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int mbnum = video->mbnum;
+ int nMBPerRow = video->nMBPerRow;
+ int x_pos = video->mbnum_col;
+ int y_pos = video->mbnum_row;
+ int16 *AC_tmp;
+ int flag_0 = FALSE, flag_1 = FALSE;
+ uint8 *slice_nb = video->sliceNo;
+ typeDCStore *DC_store = video->predDC + mbnum;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+ int left_bnd, up_bnd;
+ uint8 *mode = video->headerInfo.Mode;
+ uint ACpred_flag = (uint) video->acPredFlag[mbnum];
+
+
+
+ static const int Xpos[6] = { -1, 0, -1, 0, -1, -1};
+ static const int Ypos[6] = { -1, -1, 0, 0, -1, -1};
+
+ static const int Xtab[6] = {1, 0, 3, 2, 4, 5};
+ static const int Ytab[6] = {2, 3, 0, 1, 4, 5};
+
+ /* I added these to speed up comparisons */
+ static const int Pos0[6] = { 1, 1, 0, 0, 1, 1};
+ static const int Pos1[6] = { 1, 0, 1, 0, 1, 1};
+
+ static const int B_Xtab[6] = {0, 1, 0, 1, 2, 3};
+ static const int B_Ytab[6] = {0, 0, 1, 1, 2, 3};
+
+// int *direction; /* 0: HORIZONTAL, 1: VERTICAL */
+ int block_A, block_C;
+ int y_offset, x_offset, x_tab, y_tab; /* speedup coefficients */
+ int b_xtab, b_ytab;
+ y_offset = Ypos[comp] * nMBPerRow;
+ x_offset = Xpos[comp];
+ x_tab = Xtab[comp];
+ y_tab = Ytab[comp];
+
+ b_xtab = B_Xtab[comp];
+ b_ytab = B_Ytab[comp];
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Find the direction of prediction and the DC prediction */
+
+ if (x_pos == 0 && y_pos == 0)
+ { /* top left corner */
+ block_A = (comp == 1 || comp == 3) ? flag_0 = TRUE, DC_store[0][x_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3) ? flag_1 = TRUE, DC_store[0][y_tab] : mid_gray;
+ }
+ else if (x_pos == 0)
+ { /* left edge */
+ up_bnd = (Pos0[comp] && slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow])
+ && (mode[mbnum-nMBPerRow] == MODE_INTRA || mode[mbnum-nMBPerRow] == MODE_INTRA_Q);;
+
+ block_A = (comp == 1 || comp == 3) ? flag_0 = TRUE, DC_store[0][x_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3 || up_bnd) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+ else if (y_pos == 0)
+ { /* top row */
+ left_bnd = (Pos1[comp] && slice_nb[mbnum] == slice_nb[mbnum-1])
+ && (mode[mbnum-1] == MODE_INTRA || mode[mbnum-1] == MODE_INTRA_Q);
+
+ block_A = (comp == 1 || comp == 3 || left_bnd) ? flag_0 = TRUE, DC_store[x_offset][x_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+ else
+ {
+ up_bnd = (Pos0[comp] && slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow])
+ && (mode[mbnum-nMBPerRow] == MODE_INTRA || mode[mbnum-nMBPerRow] == MODE_INTRA_Q);
+ left_bnd = (Pos1[comp] && slice_nb[mbnum] == slice_nb[mbnum-1])
+ && (mode[mbnum-1] == MODE_INTRA || mode[mbnum-1] == MODE_INTRA_Q);
+
+ block_A = (comp == 1 || comp == 3 || left_bnd) ? flag_0 = TRUE, DC_store[x_offset][x_tab] : mid_gray;
+ block_C = (comp == 2 || comp == 3 || up_bnd) ? flag_1 = TRUE, DC_store[y_offset][y_tab] : mid_gray;
+ }
+
+ if (ACpred_flag == 0)
+ {
+ if (flag_0 == TRUE)
+ {
+ if (flag_1 == TRUE)
+ {
+ q_block[0] = (int16)((block_A + block_C) >> 1);
+ }
+ else
+ {
+ q_block[0] = (int16)block_A;
+ }
+ }
+ else
+ {
+ if (flag_1 == TRUE)
+ {
+ q_block[0] = (int16)block_C;
+ }
+ else
+ {
+ q_block[0] = mid_gray;
+ }
+ }
+
+ }
+ else
+ {
+ if (video->mblock->direction == 1)
+ {
+ if (flag_1 == TRUE)
+ {
+ q_block[0] = (int16)block_C;
+
+ AC_tmp = DCAC_row[0][b_xtab];
+ q_block[1] = AC_tmp[0];
+ q_block[2] = AC_tmp[1];
+ q_block[3] = AC_tmp[2];
+ q_block[4] = AC_tmp[3];
+ q_block[5] = AC_tmp[4];
+ q_block[6] = AC_tmp[5];
+ q_block[7] = AC_tmp[6];
+ }
+ else
+ {
+ q_block[0] = mid_gray;
+ }
+ }
+ else
+ {
+ if (flag_0 == TRUE)
+ {
+ q_block[0] = (int16)block_A;
+
+ AC_tmp = DCAC_col[0][b_ytab];
+ q_block[8] = AC_tmp[0];
+ q_block[16] = AC_tmp[1];
+ q_block[24] = AC_tmp[2];
+ q_block[32] = AC_tmp[3];
+ q_block[40] = AC_tmp[4];
+ q_block[48] = AC_tmp[5];
+ q_block[56] = AC_tmp[6];
+ }
+ else
+ {
+ q_block[0] = mid_gray;
+ }
+ }
+ }
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/dec_pred_intra_dc.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/dec_pred_intra_dc.cpp
new file mode 100644
index 0000000..c19c23a
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/dec_pred_intra_dc.cpp
@@ -0,0 +1,75 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "zigzag.h"
+
+PV_STATUS PV_DecodePredictedIntraDC(
+ int compnum,
+ BitstreamDecVideo *stream,
+ int16 *INTRADC_delta)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ PV_STATUS status = PV_SUCCESS;
+ uint DC_size;
+ uint code;
+ int first_bit;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* read DC size 2 - 8 bits */
+ status = PV_VlcDecIntraDCPredSize(stream, compnum, &DC_size);
+
+ if (status == PV_SUCCESS)
+ {
+ if (DC_size == 0)
+ {
+ *INTRADC_delta = 0;
+ }
+ else
+ {
+ /* read delta DC 0 - 8 bits */
+ code = (int) BitstreamReadBits16_INLINE(stream, DC_size);
+
+ first_bit = code >> (DC_size - 1);
+
+ if (first_bit == 0)
+ {
+ /* negative delta INTRA DC */
+ *INTRADC_delta = code ^((1 << DC_size) - 1);
+ *INTRADC_delta = -(*INTRADC_delta);
+ }
+ else
+ { /* positive delta INTRA DC */
+ *INTRADC_delta = code;
+ }
+ if (DC_size > 8) BitstreamRead1Bits_INLINE(stream);
+ }
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return status;
+}
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/deringing_chroma.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/deringing_chroma.cpp
new file mode 100644
index 0000000..ce779b0
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/deringing_chroma.cpp
@@ -0,0 +1,215 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+
+#ifdef PV_POSTPROC_ON
+
+void Deringing_Chroma(
+ uint8 *Rec_C,
+ int width,
+ int height,
+ int16 *QP_store,
+ int,
+ uint8 *pp_mod
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int thres;
+ int v_blk, h_blk;
+ int max_diff;
+ int v_pel, h_pel;
+ int max_blk, min_blk;
+ int v0, h0;
+ uint8 *ptr;
+ int sum, sum1, incr;
+ int32 addr_v;
+ int sign_v[10], sum_v[10];
+ int *ptr2, *ptr3;
+ uint8 pelu, pelc, pell;
+ incr = width - BLKSIZE;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* chrominance */
+ /* Do the first line (7 pixels at a time => Don't use MMX)*/
+ for (h_blk = 0; h_blk < width; h_blk += BLKSIZE)
+ {
+ max_diff = (QP_store[h_blk>>3] >> 2) + 4;
+ ptr = &Rec_C[h_blk];
+ max_blk = min_blk = *ptr;
+ FindMaxMin(ptr, &min_blk, &max_blk, width);
+ h0 = ((h_blk - 1) >= 1) ? (h_blk - 1) : 1;
+
+ if (max_blk - min_blk >= 4)
+ {
+ thres = (max_blk + min_blk + 1) >> 1;
+
+
+ for (v_pel = 1; v_pel < BLKSIZE - 1; v_pel++)
+ {
+ addr_v = (int32)v_pel * width;
+ ptr = &Rec_C[addr_v + h0 - 1];
+ ptr2 = &sum_v[0];
+ ptr3 = &sign_v[0];
+
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+ ptr++;
+ *ptr2++ = pelu + (pelc << 1) + pell;
+ *ptr3++ = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+ ptr++;
+ *ptr2++ = pelu + (pelc << 1) + pell;
+ *ptr3++ = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ for (h_pel = h0; h_pel < h_blk + BLKSIZE - 1; h_pel++)
+ {
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+
+ *ptr2 = pelu + (pelc << 1) + pell;
+ *ptr3 = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ sum1 = *(ptr3 - 2) + *(ptr3 - 1) + *ptr3;
+ if (sum1 == 0 || sum1 == 9)
+ {
+ sum = (*(ptr2 - 2) + (*(ptr2 - 1) << 1) + *ptr2 + 8) >> 4;
+
+ ptr--;
+ if (PV_ABS(*ptr - sum) > max_diff)
+ {
+ if (sum > *ptr)
+ sum = *ptr + max_diff;
+ else
+ sum = *ptr - max_diff;
+ }
+ *ptr++ = (uint8) sum;
+ }
+ ptr++;
+ ptr2++;
+ ptr3++;
+ }
+ }
+ }
+ }
+
+ for (v_blk = BLKSIZE; v_blk < height; v_blk += BLKSIZE)
+ {
+ v0 = v_blk - 1;
+ /* Do the first block (pixels=7 => No MMX) */
+ max_diff = (QP_store[((((int32)v_blk*width)>>3))>>3] >> 2) + 4;
+ ptr = &Rec_C[(int32)v_blk * width];
+ max_blk = min_blk = *ptr;
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+
+ if (max_blk - min_blk >= 4)
+ {
+ thres = (max_blk + min_blk + 1) >> 1;
+
+ for (v_pel = v0; v_pel < v_blk + BLKSIZE - 1; v_pel++)
+ {
+ addr_v = v_pel * width;
+ ptr = &Rec_C[addr_v];
+ ptr2 = &sum_v[0];
+ ptr3 = &sign_v[0];
+
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+ ptr++;
+ *ptr2++ = pelu + (pelc << 1) + pell;
+ *ptr3++ = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+ ptr++;
+ *ptr2++ = pelu + (pelc << 1) + pell;
+ *ptr3++ = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ for (h_pel = 1; h_pel < BLKSIZE - 1; h_pel++)
+ {
+ pelu = *(ptr - width);
+ pelc = *ptr;
+ pell = *(ptr + width);
+
+ *ptr2 = pelu + (pelc << 1) + pell;
+ *ptr3 = INDEX(pelu, thres) + INDEX(pelc, thres) + INDEX(pell, thres);
+
+ sum1 = *(ptr3 - 2) + *(ptr3 - 1) + *ptr3;
+ if (sum1 == 0 || sum1 == 9)
+ {
+ sum = (*(ptr2 - 2) + (*(ptr2 - 1) << 1) + *ptr2 + 8) >> 4;
+
+ ptr--;
+ if (PV_ABS(*ptr - sum) > max_diff)
+ {
+ if (sum > *ptr)
+ sum = *ptr + max_diff;
+ else
+ sum = *ptr - max_diff;
+ }
+ *ptr++ = (uint8) sum;
+ }
+ ptr++;
+ ptr2++;
+ ptr3++;
+ }
+ }
+ }
+
+
+ /* Do the rest in MMX */
+ for (h_blk = BLKSIZE; h_blk < width; h_blk += BLKSIZE)
+ {
+ if ((pp_mod[(v_blk/8)*(width/8)+h_blk/8]&0x4) != 0)
+ {
+ max_diff = (QP_store[((((int32)v_blk*width)>>3)+h_blk)>>3] >> 2) + 4;
+ ptr = &Rec_C[(int32)v_blk * width + h_blk];
+ max_blk = min_blk = *ptr;
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+ h0 = h_blk - 1;
+
+ if (max_blk - min_blk >= 4)
+ {
+ thres = (max_blk + min_blk + 1) >> 1;
+#ifdef NoMMX
+ AdaptiveSmooth_NoMMX(Rec_C, v0, h0, v_blk, h_blk, thres, width, max_diff);
+#else
+ DeringAdaptiveSmoothMMX(&Rec_C[(int32)v0*width+h0], width, thres, max_diff);
+#endif
+ }
+ }
+ }
+ } /* macroblock level */
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/deringing_luma.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/deringing_luma.cpp
new file mode 100644
index 0000000..b5574b4
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/deringing_luma.cpp
@@ -0,0 +1,231 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+
+#ifdef PV_POSTPROC_ON
+
+void Deringing_Luma(
+ uint8 *Rec_Y,
+ int width,
+ int height,
+ int16 *QP_store,
+ int,
+ uint8 *pp_mod)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int thres[4], range[4], max_range_blk, max_thres_blk;
+ int MB_V, MB_H, BLK_V, BLK_H;
+ int v_blk, h_blk;
+ int max_diff;
+ int max_blk, min_blk;
+ int v0, h0;
+ uint8 *ptr;
+ int thr, blks, incr;
+ int mb_indx, blk_indx;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ incr = width - BLKSIZE;
+
+ /* Dering the first line of macro blocks */
+ for (MB_H = 0; MB_H < width; MB_H += MBSIZE)
+ {
+ max_diff = (QP_store[(MB_H)>>4] >> 2) + 4;
+
+ /* threshold determination */
+ max_range_blk = max_thres_blk = 0;
+ blks = 0;
+
+ for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
+ {
+ for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
+ {
+ ptr = &Rec_Y[(int32)(BLK_V) * width + MB_H + BLK_H];
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+
+ thres[blks] = (max_blk + min_blk + 1) >> 1;
+ range[blks] = max_blk - min_blk;
+
+ if (range[blks] >= max_range_blk)
+ {
+ max_range_blk = range[blks];
+ max_thres_blk = thres[blks];
+ }
+ blks++;
+ }
+ }
+
+ blks = 0;
+ for (v_blk = 0; v_blk < MBSIZE; v_blk += BLKSIZE)
+ {
+ v0 = ((v_blk - 1) >= 1) ? (v_blk - 1) : 1;
+ for (h_blk = MB_H; h_blk < MB_H + MBSIZE; h_blk += BLKSIZE)
+ {
+ h0 = ((h_blk - 1) >= 1) ? (h_blk - 1) : 1;
+
+ /* threshold rearrangement for flat region adjacent to non-flat region */
+ if (range[blks]<32 && max_range_blk >= 64)
+ thres[blks] = max_thres_blk;
+
+ /* threshold rearrangement for deblocking
+ (blockiness annoying at DC dominant region) */
+ if (max_range_blk >= 16)
+ {
+ /* adaptive smoothing */
+ thr = thres[blks];
+
+ AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
+ thr, width, max_diff);
+ }
+ blks++;
+ } /* block level (Luminance) */
+ }
+ } /* macroblock level */
+
+
+ /* Do the rest of the macro-block-lines */
+ for (MB_V = MBSIZE; MB_V < height; MB_V += MBSIZE)
+ {
+ /* First macro-block */
+ max_diff = (QP_store[((((int32)MB_V*width)>>4))>>4] >> 2) + 4;
+ /* threshold determination */
+ max_range_blk = max_thres_blk = 0;
+ blks = 0;
+ for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
+ {
+ for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
+ {
+ ptr = &Rec_Y[(int32)(MB_V + BLK_V) * width + BLK_H];
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+ thres[blks] = (max_blk + min_blk + 1) >> 1;
+ range[blks] = max_blk - min_blk;
+
+ if (range[blks] >= max_range_blk)
+ {
+ max_range_blk = range[blks];
+ max_thres_blk = thres[blks];
+ }
+ blks++;
+ }
+ }
+
+ blks = 0;
+ for (v_blk = MB_V; v_blk < MB_V + MBSIZE; v_blk += BLKSIZE)
+ {
+ v0 = v_blk - 1;
+ for (h_blk = 0; h_blk < MBSIZE; h_blk += BLKSIZE)
+ {
+ h0 = ((h_blk - 1) >= 1) ? (h_blk - 1) : 1;
+
+ /* threshold rearrangement for flat region adjacent to non-flat region */
+ if (range[blks]<32 && max_range_blk >= 64)
+ thres[blks] = max_thres_blk;
+
+ /* threshold rearrangement for deblocking
+ (blockiness annoying at DC dominant region) */
+ if (max_range_blk >= 16)
+ {
+ /* adaptive smoothing */
+ thr = thres[blks];
+
+ AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
+ thr, width, max_diff);
+ }
+ blks++;
+ }
+ } /* block level (Luminance) */
+
+ /* Rest of the macro-blocks */
+ for (MB_H = MBSIZE; MB_H < width; MB_H += MBSIZE)
+ {
+ max_diff = (QP_store[((((int32)MB_V*width)>>4)+MB_H)>>4] >> 2) + 4;
+
+ /* threshold determination */
+ max_range_blk = max_thres_blk = 0;
+ blks = 0;
+
+ mb_indx = (MB_V / 8) * (width / 8) + MB_H / 8;
+ for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
+ {
+ for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
+ {
+ blk_indx = mb_indx + (BLK_V / 8) * width / 8 + BLK_H / 8;
+ /* Update based on pp_mod only */
+ if ((pp_mod[blk_indx]&0x4) != 0)
+ {
+ ptr = &Rec_Y[(int32)(MB_V + BLK_V) * width + MB_H + BLK_H];
+ FindMaxMin(ptr, &min_blk, &max_blk, incr);
+ thres[blks] = (max_blk + min_blk + 1) >> 1;
+ range[blks] = max_blk - min_blk;
+
+ if (range[blks] >= max_range_blk)
+ {
+ max_range_blk = range[blks];
+ max_thres_blk = thres[blks];
+ }
+ }
+ blks++;
+ }
+ }
+
+ blks = 0;
+ for (v_blk = MB_V; v_blk < MB_V + MBSIZE; v_blk += BLKSIZE)
+ {
+ v0 = v_blk - 1;
+ mb_indx = (v_blk / 8) * (width / 8);
+ for (h_blk = MB_H; h_blk < MB_H + MBSIZE; h_blk += BLKSIZE)
+ {
+ h0 = h_blk - 1;
+ blk_indx = mb_indx + h_blk / 8;
+ if ((pp_mod[blk_indx]&0x4) != 0)
+ {
+ /* threshold rearrangement for flat region adjacent to non-flat region */
+ if (range[blks]<32 && max_range_blk >= 64)
+ thres[blks] = max_thres_blk;
+
+ /* threshold rearrangement for deblocking
+ (blockiness annoying at DC dominant region) */
+ if (max_range_blk >= 16)
+ {
+ /* adaptive smoothing */
+ thr = thres[blks];
+#ifdef NoMMX
+ AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
+ thr, width, max_diff);
+#else
+ DeringAdaptiveSmoothMMX(&Rec_Y[v0*width+h0],
+ width, thr, max_diff);
+#endif
+ }
+ }
+ blks++;
+ }
+ } /* block level (Luminance) */
+ } /* macroblock level */
+ } /* macroblock level */
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/find_min_max.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/find_min_max.cpp
new file mode 100644
index 0000000..a357ea6
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/find_min_max.cpp
@@ -0,0 +1,176 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ input_ptr = pointer to the buffer containing values of type UChar
+ in a 2D block of data.
+ min_ptr = pointer to the minimum value of type Int to be found in a
+ square block of size BLKSIZE contained in 2D block of data.
+ max_ptr = pointer to the maximum value of type Int to be found in a
+ square block of size BLKSIZE contained in 2D block of data.
+ incr = value of type Int representing the width of 2D block of data.
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ None
+
+ Pointers and Buffers Modified:
+ min_ptr points to the found minimum value in the square block of
+ size BLKSIZE contained in 2D block of data.
+
+ max_ptr points to the found maximum value in the square block of
+ size BLKSIZE contained in 2D block of data.
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This function finds the maximum and the minimum values in a square block of
+ data of size BLKSIZE * BLKSIZE. The data is contained in the buffer which
+ represents a 2D block of data that is larger than BLKSIZE * BLKSIZE.
+ This is illustrated below.
+
+ mem loc x + 00h -> o o o o o o o o o o o o o o o o
+ mem loc x + 10h -> o o o o o X X X X X X X X o o o
+ mem loc x + 20h -> o o o o o X X X X X X X X o o o
+ mem loc x + 30h -> o o o o o X X X X X X X X o o o
+ mem loc x + 40h -> o o o o o X X X X X X X X o o o
+ mem loc x + 50h -> o o o o o X X X X X X X X o o o
+ mem loc x + 60h -> o o o o o X X X X X X X X o o o
+ mem loc x + 70h -> o o o o o X X X X X X X X o o o
+ mem loc x + 80h -> o o o o o X X X X X X X X o o o
+ mem loc x + 90h -> o o o o o o o o o o o o o o o o
+ mem loc x + A0h -> o o o o o o o o o o o o o o o o
+ mem loc x + B0h -> o o o o o o o o o o o o o o o o
+
+For illustration purposes, the diagram assumes that BLKSIZE is equal to 8
+but this is not a requirement. In this diagram, the buffer starts at
+location x but the input pointer, input_ptr, passed into this function
+would be the first row of data to be searched which is at x + 15h. The
+value of incr passed onto this function represents the amount the input_ptr
+needs to be incremented to point to the next row of data.
+
+This function compares each value in a row to the current maximum and
+minimum. After each row, input_ptr is incremented to point to the next row.
+This is repeated until all rows have been processed. When the search is
+complete the location pointed to by min_ptr contains the minimum value
+found and the location pointed to by max_ptr contains the maximum value found.
+
+------------------------------------------------------------------------------
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "post_proc.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+#ifdef PV_POSTPROC_ON
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+void FindMaxMin(
+ uint8 *input_ptr,
+ int *min_ptr,
+ int *max_ptr,
+ int incr)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ register uint i, j;
+ register int min, max;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ max = min = *input_ptr;
+ /* incr = incr - BLKSIZE; */ /* 09/06/2001, already passed in as width - BLKSIZE */
+
+ for (i = BLKSIZE; i > 0; i--)
+ {
+ for (j = BLKSIZE; j > 0; j--)
+ {
+ if (*input_ptr > max)
+ {
+ max = *input_ptr;
+ }
+ else if (*input_ptr < min)
+ {
+ min = *input_ptr;
+ }
+ input_ptr += 1;
+ }
+
+ /* set pointer to the beginning of the next row*/
+ input_ptr += incr;
+ }
+
+ *max_ptr = max;
+ *min_ptr = min;
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp
new file mode 100644
index 0000000..e23f23d
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp
@@ -0,0 +1,1190 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ xpos = x half-pixel of (x,y) coordinates within a VOP; motion
+ compensated coordinates; native type
+ ypos = y half-pixel of (x,y) coordinates within a VOP; motion
+ compensated coordinates; native type
+ comp = pointer to 8-bit compensated prediction values within a VOP;
+ computed by this module (i/o); full-pel resolution
+ c_prev = pointer to previous 8-bit prediction values within a VOP;
+ values range from (0-255); full-pel resolution
+ sh_d = pointer to residual values used to compensate the predicted
+ value; values range from (-512 to 511); full-pel resolution
+ width = width of the VOP in pixels (x axis); full-pel resolution
+ rnd1 = rounding value for case when one dimension uses half-pel
+ resolution
+ rnd2 = rounding value for case when two dimensions uses half-pel
+ resolution
+ CBP = flag indicating whether residual is all zeros
+ (0 -> all zeros, 1 -> not all zeros)
+ outside_flag = flag indicating whether motion vector is outside the
+ VOP (0 -> inside, 1 -> outside)
+
+ Outputs:
+ returns 1
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Pointers and Buffers Modified:
+ comp = buffer contains newly computed compensated prediction values
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ Compute pixel values for a block in the current VOP. The prediction
+ values are generated by averaging pixel values in the previous VOP; the
+ block position in the previous frame is computed from the current block's
+ motion vector. The computed pixel values are then computed by adding the
+ prediction values to the block residual values.
+
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "motion_comp.h"
+
+#define OSCL_DISABLE_WARNING_CONV_POSSIBLE_LOSS_OF_DATA
+
+int GetPredAdvancedBy0x0(
+ uint8 *prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+)
+{
+ uint i; /* loop variable */
+ int offset, offset2;
+ uint32 pred_word, word1, word2;
+ int tmp;
+
+ /* initialize offset to adjust pixel counter */
+ /* the next row; full-pel resolution */
+ offset = width - B_SIZE; /* offset for prev */
+ offset2 = (pred_width_rnd >> 1) - 4; /* offset for pred_block */
+
+ tmp = (uint32)prev & 0x3;
+ pred_block -= offset2; /* preset */
+
+ if (tmp == 0) /* word-aligned */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ *((uint32*)(pred_block += offset2)) = *((uint32*)prev);
+ *((uint32*)(pred_block += 4)) = *((uint32*)(prev + 4));
+ prev += width;
+ }
+ return 1;
+ }
+ else if (tmp == 1) /* first position */
+ {
+ prev--; /* word-aligned */
+
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* read 4 bytes, b4 b3 b2 b1 */
+ word2 = *((uint32*)(prev += 4)); /* read 4 bytes, b8 b7 b6 b5 */
+ word1 >>= 8; /* 0 b4 b3 b2 */
+ pred_word = word1 | (word2 << 24); /* b5 b4 b3 b2 */
+ *((uint32*)(pred_block += offset2)) = pred_word;
+
+ word1 = *((uint32*)(prev += 4)); /* b12 b11 b10 b9 */
+ word2 >>= 8; /* 0 b8 b7 b6 */
+ pred_word = word2 | (word1 << 24); /* b9 b8 b7 b6 */
+ *((uint32*)(pred_block += 4)) = pred_word;
+
+ prev += offset;
+ }
+
+ return 1;
+ }
+ else if (tmp == 2) /* second position */
+ {
+ prev -= 2; /* word1-aligned */
+
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* read 4 bytes, b4 b3 b2 b1 */
+ word2 = *((uint32*)(prev += 4)); /* read 4 bytes, b8 b7 b6 b5 */
+ word1 >>= 16; /* 0 0 b4 b3 */
+ pred_word = word1 | (word2 << 16); /* b6 b5 b4 b3 */
+ *((uint32*)(pred_block += offset2)) = pred_word;
+
+ word1 = *((uint32*)(prev += 4)); /* b12 b11 b10 b9 */
+ word2 >>= 16; /* 0 0 b8 b7 */
+ pred_word = word2 | (word1 << 16); /* b10 b9 b8 b7 */
+ *((uint32*)(pred_block += 4)) = pred_word;
+
+
+ prev += offset;
+ }
+
+ return 1;
+ }
+ else /* third position */
+ {
+ prev -= 3; /* word1-aligned */
+
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* read 4 bytes, b4 b3 b2 b1 */
+ word2 = *((uint32*)(prev += 4)); /* read 4 bytes, b8 b7 b6 b5 */
+ word1 >>= 24; /* 0 0 0 b4 */
+ pred_word = word1 | (word2 << 8); /* b7 b6 b5 b4 */
+ *((uint32*)(pred_block += offset2)) = pred_word;
+
+ word1 = *((uint32*)(prev += 4)); /* b12 b11 b10 b9 */
+ word2 >>= 24; /* 0 0 0 b8 */
+ pred_word = word2 | (word1 << 8); /* b11 b10 b9 b8 */
+ *((uint32*)(pred_block += 4)) = pred_word;
+
+ prev += offset;
+ }
+
+ return 1;
+ }
+}
+
+/**************************************************************************/
+int GetPredAdvancedBy0x1(
+ uint8 *prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+)
+{
+ uint i; /* loop variable */
+ int offset, offset2;
+ uint32 word1, word2, word3, word12;
+ int tmp;
+ int rnd1;
+ uint32 mask;
+
+ /* initialize offset to adjust pixel counter */
+ /* the next row; full-pel resolution */
+ offset = width - B_SIZE; /* offset for prev */
+ offset2 = (pred_width_rnd >> 1) - 4; /* offset of pred_block */
+
+ rnd1 = pred_width_rnd & 1;
+
+ /* Branch based on pixel location (half-pel or full-pel) for x and y */
+ pred_block -= offset2; /* preset */
+
+ tmp = (uint32)prev & 3;
+ mask = 254;
+ mask |= (mask << 8);
+ mask |= (mask << 16); /* 0xFEFEFEFE */
+
+ if (tmp == 0) /* word-aligned */
+ {
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b4 b3 b2 b1 */
+ word2 = *((uint32*)(prev += 4)); /* b8 b7 b6 b5 */
+ word12 = (word1 >> 8); /* 0 b4 b3 b2 */
+ word12 |= (word2 << 24); /* b5 b4 b3 b2 */
+ word3 = word1 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b12 b11 b10 b9 */
+ word12 = (word2 >> 8); /* 0 b8 b7 b6 */
+ word12 |= (word1 << 24); /* b9 b8 b7 b6 */
+ word3 = word2 | word12;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 == 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b4 b3 b2 b1 */
+
+ word2 = *((uint32*)(prev += 4)); /* b8 b7 b6 b5 */
+ word12 = (word1 >> 8); /* 0 b4 b3 b2 */
+ word12 |= (word2 << 24); /* b5 b4 b3 b2 */
+ word3 = word1 & word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b12 b11 b10 b9 */
+ word12 = (word2 >> 8); /* 0 b8 b7 b6 */
+ word12 |= (word1 << 24); /* b9 b8 b7 b6 */
+ word3 = word2 & word12;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+
+ prev += offset;
+ }
+ return 1;
+ } /* rnd1 */
+ }
+ else if (tmp == 1)
+ {
+ prev--; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b3 b2 b1 b0 */
+ word2 = *((uint32*)(prev += 4)); /* b7 b6 b5 b4 */
+ word12 = (word1 >> 8); /* 0 b3 b2 b1 */
+ word1 >>= 16; /* 0 0 b3 b2 */
+ word12 |= (word2 << 24); /* b4 b3 b2 b1 */
+ word1 |= (word2 << 16); /* b5 b4 b3 b2 */
+ word3 = word1 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b11 b10 b9 b8 */
+ word12 = (word2 >> 8); /* 0 b7 b6 b5 */
+ word2 >>= 16; /* 0 0 b7 b6 */
+ word12 |= (word1 << 24); /* b8 b7 b6 b5 */
+ word2 |= (word1 << 16); /* b9 b8 b7 b6 */
+ word3 = word2 | word12; // rnd1 = 1; otherwise word3 = word2&word12
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 = 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b3 b2 b1 b0 */
+
+ word2 = *((uint32*)(prev += 4)); /* b7 b6 b5 b4 */
+ word12 = (word1 >> 8); /* 0 b3 b2 b1 */
+ word1 >>= 16; /* 0 0 b3 b2 */
+ word12 |= (word2 << 24); /* b4 b3 b2 b1 */
+ word1 |= (word2 << 16); /* b5 b4 b3 b2 */
+ word3 = word1 & word12;
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b11 b10 b9 b8 */
+ word12 = (word2 >> 8); /* 0 b7 b6 b5 */
+ word2 >>= 16; /* 0 0 b7 b6 */
+ word12 |= (word1 << 24); /* b8 b7 b6 b5 */
+ word2 |= (word1 << 16); /* b9 b8 b7 b6 */
+ word3 = word2 & word12;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+
+ prev += offset;
+ }
+ return 1;
+ } /* rnd1 */
+ }
+ else if (tmp == 2)
+ {
+ prev -= 2; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b2 b1 b0 bN1 */
+ word2 = *((uint32*)(prev += 4)); /* b6 b5 b4 b3 */
+ word12 = (word1 >> 16); /* 0 0 b2 b1 */
+ word1 >>= 24; /* 0 0 0 b2 */
+ word12 |= (word2 << 16); /* b4 b3 b2 b1 */
+ word1 |= (word2 << 8); /* b5 b4 b3 b2 */
+ word3 = word1 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b10 b9 b8 b7 */
+ word12 = (word2 >> 16); /* 0 0 b6 b5 */
+ word2 >>= 24; /* 0 0 0 b6 */
+ word12 |= (word1 << 16); /* b8 b7 b6 b5 */
+ word2 |= (word1 << 8); /* b9 b8 b7 b6 */
+ word3 = word2 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 == 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b2 b1 b0 bN1 */
+ word2 = *((uint32*)(prev += 4)); /* b6 b5 b4 b3 */
+ word12 = (word1 >> 16); /* 0 0 b2 b1 */
+ word1 >>= 24; /* 0 0 0 b2 */
+ word12 |= (word2 << 16); /* b4 b3 b2 b1 */
+ word1 |= (word2 << 8); /* b5 b4 b3 b2 */
+ word3 = word1 & word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b10 b9 b8 b7 */
+ word12 = (word2 >> 16); /* 0 0 b6 b5 */
+ word2 >>= 24; /* 0 0 0 b6 */
+ word12 |= (word1 << 16); /* b8 b7 b6 b5 */
+ word2 |= (word1 << 8); /* b9 b8 b7 b6 */
+ word3 = word2 & word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+ prev += offset;
+ }
+ return 1;
+ }
+ }
+ else /* tmp = 3 */
+ {
+ prev -= 3; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b1 b0 bN1 bN2 */
+ word2 = *((uint32*)(prev += 4)); /* b5 b4 b3 b2 */
+ word12 = (word1 >> 24); /* 0 0 0 b1 */
+ word12 |= (word2 << 8); /* b4 b3 b2 b1 */
+ word1 = word2;
+ word3 = word1 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b9 b8 b7 b6 */
+ word12 = (word2 >> 24); /* 0 0 0 b5 */
+ word12 |= (word1 << 8); /* b8 b7 b6 b5 */
+ word2 = word1; /* b9 b8 b7 b6 */
+ word3 = word2 | word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+ prev += offset;
+ }
+ return 1;
+ }
+ else
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)prev); /* b1 b0 bN1 bN2 */
+ word2 = *((uint32*)(prev += 4)); /* b5 b4 b3 b2 */
+ word12 = (word1 >> 24); /* 0 0 0 b1 */
+ word12 |= (word2 << 8); /* b4 b3 b2 b1 */
+ word1 = word2;
+ word3 = word1 & word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word12 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1; /* write 4 pixels */
+
+ word1 = *((uint32*)(prev += 4)); /* b9 b8 b7 b6 */
+ word12 = (word2 >> 24); /* 0 0 0 b5 */
+ word12 |= (word1 << 8); /* b8 b7 b6 b5 */
+ word2 = word1; /* b9 b8 b7 b6 */
+ word3 = word2 & word12; // rnd1 = 1; otherwise word3 = word1&word12
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 &= mask;
+ word2 >>= 1;
+ word2 = word2 + (word12 >> 1);
+ word2 += word3;
+ *((uint32*)(pred_block += 4)) = word2; /* write 4 pixels */
+ prev += offset;
+ }
+ return 1;
+ }
+ }
+}
+
+/**************************************************************************/
+int GetPredAdvancedBy1x0(
+ uint8 *prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+)
+{
+ uint i; /* loop variable */
+ int offset, offset2;
+ uint32 word1, word2, word3, word12, word22;
+ int tmp;
+ int rnd1;
+ uint32 mask;
+
+ /* initialize offset to adjust pixel counter */
+ /* the next row; full-pel resolution */
+ offset = width - B_SIZE; /* offset for prev */
+ offset2 = (pred_width_rnd >> 1) - 4; /* offset for pred_block */
+
+ rnd1 = pred_width_rnd & 1;
+
+ /* Branch based on pixel location (half-pel or full-pel) for x and y */
+ pred_block -= offset2; /* preset */
+
+ tmp = (uint32)prev & 3;
+ mask = 254;
+ mask |= (mask << 8);
+ mask |= (mask << 16); /* 0xFEFEFEFE */
+
+ if (tmp == 0) /* word-aligned */
+ {
+ prev -= 4;
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)(prev += 4));
+ word2 = *((uint32*)(prev + width));
+ word3 = word1 | word2; // rnd1 = 1; otherwise word3 = word1&word2
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word2 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1;
+ word1 = *((uint32*)(prev += 4));
+ word2 = *((uint32*)(prev + width));
+ word3 = word1 | word2; // rnd1 = 1; otherwise word3 = word1&word2
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word2 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 = 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word1 = *((uint32*)(prev += 4));
+ word2 = *((uint32*)(prev + width));
+ word3 = word1 & word2; /* rnd1 = 0; */
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word2 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += offset2)) = word1;
+ word1 = *((uint32*)(prev += 4));
+ word2 = *((uint32*)(prev + width));
+ word3 = word1 & word2; /* rnd1 = 0; */
+ word1 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word2 &= mask;
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+
+ prev += offset;
+ }
+ return 1;
+ }
+ }
+ else if (tmp == 1)
+ {
+ prev--; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 8; /* 0 b4 b3 b2 */
+ word22 >>= 8;
+ word12 = word12 | (word1 << 24); /* b5 b4 b3 b2 */
+ word22 = word22 | (word2 << 24);
+ word3 = word12 | word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 8; /* 0 b8 b7 b6 */
+ word2 >>= 8;
+ word1 = word1 | (word12 << 24); /* b9 b8 b7 b6 */
+ word2 = word2 | (word22 << 24);
+ word3 = word1 | word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 = 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 8; /* 0 b4 b3 b2 */
+ word22 >>= 8;
+ word12 = word12 | (word1 << 24); /* b5 b4 b3 b2 */
+ word22 = word22 | (word2 << 24);
+ word3 = word12 & word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 8; /* 0 b8 b7 b6 */
+ word2 >>= 8;
+ word1 = word1 | (word12 << 24); /* b9 b8 b7 b6 */
+ word2 = word2 | (word22 << 24);
+ word3 = word1 & word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+ return 1;
+ }
+ }
+ else if (tmp == 2)
+ {
+ prev -= 2; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 16; /* 0 0 b4 b3 */
+ word22 >>= 16;
+ word12 = word12 | (word1 << 16); /* b6 b5 b4 b3 */
+ word22 = word22 | (word2 << 16);
+ word3 = word12 | word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 16; /* 0 0 b8 b7 */
+ word2 >>= 16;
+ word1 = word1 | (word12 << 16); /* b10 b9 b8 b7 */
+ word2 = word2 | (word22 << 16);
+ word3 = word1 | word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 = 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 16; /* 0 0 b4 b3 */
+ word22 >>= 16;
+ word12 = word12 | (word1 << 16); /* b6 b5 b4 b3 */
+ word22 = word22 | (word2 << 16);
+ word3 = word12 & word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 16; /* 0 0 b8 b7 */
+ word2 >>= 16;
+ word1 = word1 | (word12 << 16); /* b10 b9 b8 b7 */
+ word2 = word2 | (word22 << 16);
+ word3 = word1 & word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+
+ return 1;
+ }
+ }
+ else /* tmp == 3 */
+ {
+ prev -= 3; /* word-aligned */
+ if (rnd1 == 1)
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 24; /* 0 0 0 b4 */
+ word22 >>= 24;
+ word12 = word12 | (word1 << 8); /* b7 b6 b5 b4 */
+ word22 = word22 | (word2 << 8);
+ word3 = word12 | word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 24; /* 0 0 0 b8 */
+ word2 >>= 24;
+ word1 = word1 | (word12 << 8); /* b11 b10 b9 b8 */
+ word2 = word2 | (word22 << 8);
+ word3 = word1 | word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* rnd1 = 0 */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ word12 = *((uint32*)prev); /* read b4 b3 b2 b1 */
+ word22 = *((uint32*)(prev + width));
+
+ word1 = *((uint32*)(prev += 4)); /* read b8 b7 b6 b5 */
+ word2 = *((uint32*)(prev + width));
+ word12 >>= 24; /* 0 0 0 b4 */
+ word22 >>= 24;
+ word12 = word12 | (word1 << 8); /* b7 b6 b5 b4 */
+ word22 = word22 | (word2 << 8);
+ word3 = word12 & word22;
+ word12 &= mask;
+ word22 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word12 >>= 1;
+ word12 = word12 + (word22 >> 1);
+ word12 += word3;
+ *((uint32*)(pred_block += offset2)) = word12;
+
+ word12 = *((uint32*)(prev += 4)); /* read b12 b11 b10 b9 */
+ word22 = *((uint32*)(prev + width));
+ word1 >>= 24; /* 0 0 0 b8 */
+ word2 >>= 24;
+ word1 = word1 | (word12 << 8); /* b11 b10 b9 b8 */
+ word2 = word2 | (word22 << 8);
+ word3 = word1 & word2;
+ word1 &= mask;
+ word2 &= mask;
+ word3 &= (~mask); /* 0x1010101, check last bit */
+ word1 >>= 1;
+ word1 = word1 + (word2 >> 1);
+ word1 += word3;
+ *((uint32*)(pred_block += 4)) = word1;
+ prev += offset;
+ }
+ return 1;
+ } /* rnd */
+ } /* tmp */
+}
+
+/**********************************************************************************/
+int GetPredAdvancedBy1x1(
+ uint8 *prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+)
+{
+ uint i; /* loop variable */
+ int offset, offset2;
+ uint32 x1, x2, x1m, x2m, y1, y2, y1m, y2m; /* new way */
+ int tmp;
+ int rnd1, rnd2;
+ uint32 mask;
+
+ /* initialize offset to adjust pixel counter */
+ /* the next row; full-pel resolution */
+ offset = width - B_SIZE; /* offset for prev */
+ offset2 = (pred_width_rnd >> 1) - 8; /* offset for pred_block */
+
+ rnd1 = pred_width_rnd & 1;
+
+ rnd2 = rnd1 + 1;
+ rnd2 |= (rnd2 << 8);
+ rnd2 |= (rnd2 << 16);
+
+ mask = 0x3F;
+ mask |= (mask << 8);
+ mask |= (mask << 16); /* 0x3f3f3f3f */
+
+ tmp = (uint32)prev & 3;
+
+ pred_block -= 4; /* preset */
+
+ if (tmp == 0) /* word-aligned */
+ {
+ for (i = B_SIZE; i > 0; i--)
+ {
+ x1 = *((uint32*)prev); /* load a3 a2 a1 a0 */
+ x2 = *((uint32*)(prev + width)); /* load b3 b2 b1 b0, another line */
+ y1 = *((uint32*)(prev += 4)); /* a7 a6 a5 a4 */
+ y2 = *((uint32*)(prev + width)); /* b7 b6 b5 b4 */
+
+ x1m = (x1 >> 2) & mask; /* zero out last 2 bits */
+ x2m = (x2 >> 2) & mask;
+ x1 = x1 ^(x1m << 2);
+ x2 = x2 ^(x2m << 2);
+ x1m += x2m;
+ x1 += x2;
+
+ /* x2m, x2 free */
+ y1m = (y1 >> 2) & mask; /* zero out last 2 bits */
+ y2m = (y2 >> 2) & mask;
+ y1 = y1 ^(y1m << 2);
+ y2 = y2 ^(y2m << 2);
+ y1m += y2m;
+ y1 += y2;
+
+ /* y2m, y2 free */
+ /* x2m, x2 free */
+ x2 = *((uint32*)(prev += 4)); /* a11 a10 a9 a8 */
+ y2 = *((uint32*)(prev + width)); /* b11 b10 b9 b8 */
+ x2m = (x2 >> 2) & mask;
+ y2m = (y2 >> 2) & mask;
+ x2 = x2 ^(x2m << 2);
+ y2 = y2 ^(y2m << 2);
+ x2m += y2m;
+ x2 += y2;
+ /* y2m, y2 free */
+
+ /* now operate on x1m, x1, y1m, y1, x2m, x2 */
+ /* x1m = a3+b3, a2+b2, a1+b1, a0+b0 */
+ /* y1m = a7+b7, a6+b6, a5+b5, a4+b4 */
+ /* x2m = a11+b11, a10+b10, a9+b9, a8+b8 */
+ /* x1, y1, x2 */
+
+ y2m = x1m >> 8;
+ y2 = x1 >> 8;
+ y2m |= (y1m << 24); /* a4+b4, a3+b3, a2+b2, a1+b1 */
+ y2 |= (y1 << 24);
+ x1m += y2m; /* a3+b3+a4+b4, ....., a0+b0+a1+b1 */
+ x1 += y2;
+ x1 += rnd2;
+ x1 &= (mask << 2);
+ x1m += (x1 >> 2);
+ *((uint32*)(pred_block += 4)) = x1m; /* save x1m */
+
+ y2m = y1m >> 8;
+ y2 = y1 >> 8;
+ y2m |= (x2m << 24); /* a8+b8, a7+b7, a6+b6, a5+b5 */
+ y2 |= (x2 << 24);
+ y1m += y2m; /* a7+b7+a8+b8, ....., a4+b4+a5+b5 */
+ y1 += y2;
+ y1 += rnd2;
+ y1 &= (mask << 2);
+ y1m += (y1 >> 2);
+ *((uint32*)(pred_block += 4)) = y1m; /* save y1m */
+
+ pred_block += offset2;
+ prev += offset;
+ }
+
+ return 1;
+ }
+ else if (tmp == 1)
+ {
+ prev--; /* to word-aligned */
+ for (i = B_SIZE; i > 0; i--)
+ {
+ x1 = *((uint32*)prev); /* load a3 a2 a1 a0 */
+ x2 = *((uint32*)(prev + width)); /* load b3 b2 b1 b0, another line */
+ y1 = *((uint32*)(prev += 4)); /* a7 a6 a5 a4 */
+ y2 = *((uint32*)(prev + width)); /* b7 b6 b5 b4 */
+
+ x1m = (x1 >> 2) & mask; /* zero out last 2 bits */
+ x2m = (x2 >> 2) & mask;
+ x1 = x1 ^(x1m << 2);
+ x2 = x2 ^(x2m << 2);
+ x1m += x2m;
+ x1 += x2;
+
+ /* x2m, x2 free */
+ y1m = (y1 >> 2) & mask; /* zero out last 2 bits */
+ y2m = (y2 >> 2) & mask;
+ y1 = y1 ^(y1m << 2);
+ y2 = y2 ^(y2m << 2);
+ y1m += y2m;
+ y1 += y2;
+
+ /* y2m, y2 free */
+ /* x2m, x2 free */
+ x2 = *((uint32*)(prev += 4)); /* a11 a10 a9 a8 */
+ y2 = *((uint32*)(prev + width)); /* b11 b10 b9 b8 */
+ x2m = (x2 >> 2) & mask;
+ y2m = (y2 >> 2) & mask;
+ x2 = x2 ^(x2m << 2);
+ y2 = y2 ^(y2m << 2);
+ x2m += y2m;
+ x2 += y2;
+ /* y2m, y2 free */
+
+ /* now operate on x1m, x1, y1m, y1, x2m, x2 */
+ /* x1m = a3+b3, a2+b2, a1+b1, a0+b0 */
+ /* y1m = a7+b7, a6+b6, a5+b5, a4+b4 */
+ /* x2m = a11+b11, a10+b10, a9+b9, a8+b8 */
+ /* x1, y1, x2 */
+
+ x1m >>= 8 ;
+ x1 >>= 8;
+ x1m |= (y1m << 24); /* a4+b4, a3+b3, a2+b2, a1+b1 */
+ x1 |= (y1 << 24);
+ y2m = (y1m << 16);
+ y2 = (y1 << 16);
+ y2m |= (x1m >> 8); /* a5+b5, a4+b4, a3+b3, a2+b2 */
+ y2 |= (x1 >> 8);
+ x1 += rnd2;
+ x1m += y2m; /* a4+b4+a5+b5, ....., a1+b1+a2+b2 */
+ x1 += y2;
+ x1 &= (mask << 2);
+ x1m += (x1 >> 2);
+ *((uint32*)(pred_block += 4)) = x1m; /* save x1m */
+
+ y1m >>= 8;
+ y1 >>= 8;
+ y1m |= (x2m << 24); /* a8+b8, a7+b7, a6+b6, a5+b5 */
+ y1 |= (x2 << 24);
+ y2m = (x2m << 16);
+ y2 = (x2 << 16);
+ y2m |= (y1m >> 8); /* a9+b9, a8+b8, a7+b7, a6+b6,*/
+ y2 |= (y1 >> 8);
+ y1 += rnd2;
+ y1m += y2m; /* a8+b8+a9+b9, ....., a5+b5+a6+b6 */
+ y1 += y2;
+ y1 &= (mask << 2);
+ y1m += (y1 >> 2);
+ *((uint32*)(pred_block += 4)) = y1m; /* save y1m */
+
+ pred_block += offset2;
+ prev += offset;
+ }
+ return 1;
+ }
+ else if (tmp == 2)
+ {
+ prev -= 2; /* to word-aligned */
+ for (i = B_SIZE; i > 0; i--)
+ {
+ x1 = *((uint32*)prev); /* load a3 a2 a1 a0 */
+ x2 = *((uint32*)(prev + width)); /* load b3 b2 b1 b0, another line */
+ y1 = *((uint32*)(prev += 4)); /* a7 a6 a5 a4 */
+ y2 = *((uint32*)(prev + width)); /* b7 b6 b5 b4 */
+
+ x1m = (x1 >> 2) & mask; /* zero out last 2 bits */
+ x2m = (x2 >> 2) & mask;
+ x1 = x1 ^(x1m << 2);
+ x2 = x2 ^(x2m << 2);
+ x1m += x2m;
+ x1 += x2;
+
+ /* x2m, x2 free */
+ y1m = (y1 >> 2) & mask; /* zero out last 2 bits */
+ y2m = (y2 >> 2) & mask;
+ y1 = y1 ^(y1m << 2);
+ y2 = y2 ^(y2m << 2);
+ y1m += y2m;
+ y1 += y2;
+
+ /* y2m, y2 free */
+ /* x2m, x2 free */
+ x2 = *((uint32*)(prev += 4)); /* a11 a10 a9 a8 */
+ y2 = *((uint32*)(prev + width)); /* b11 b10 b9 b8 */
+ x2m = (x2 >> 2) & mask;
+ y2m = (y2 >> 2) & mask;
+ x2 = x2 ^(x2m << 2);
+ y2 = y2 ^(y2m << 2);
+ x2m += y2m;
+ x2 += y2;
+ /* y2m, y2 free */
+
+ /* now operate on x1m, x1, y1m, y1, x2m, x2 */
+ /* x1m = a3+b3, a2+b2, a1+b1, a0+b0 */
+ /* y1m = a7+b7, a6+b6, a5+b5, a4+b4 */
+ /* x2m = a11+b11, a10+b10, a9+b9, a8+b8 */
+ /* x1, y1, x2 */
+
+ x1m >>= 16 ;
+ x1 >>= 16;
+ x1m |= (y1m << 16); /* a5+b5, a4+b4, a3+b3, a2+b2 */
+ x1 |= (y1 << 16);
+ y2m = (y1m << 8);
+ y2 = (y1 << 8);
+ y2m |= (x1m >> 8); /* a6+b6, a5+b5, a4+b4, a3+b3 */
+ y2 |= (x1 >> 8);
+ x1 += rnd2;
+ x1m += y2m; /* a5+b5+a6+b6, ....., a2+b2+a3+b3 */
+ x1 += y2;
+ x1 &= (mask << 2);
+ x1m += (x1 >> 2);
+ *((uint32*)(pred_block += 4)) = x1m; /* save x1m */
+
+ y1m >>= 16;
+ y1 >>= 16;
+ y1m |= (x2m << 16); /* a9+b9, a8+b8, a7+b7, a6+b6 */
+ y1 |= (x2 << 16);
+ y2m = (x2m << 8);
+ y2 = (x2 << 8);
+ y2m |= (y1m >> 8); /* a10+b10, a9+b9, a8+b8, a7+b7,*/
+ y2 |= (y1 >> 8);
+ y1 += rnd2;
+ y1m += y2m; /* a9+b9+a10+b10, ....., a6+b6+a7+b7 */
+ y1 += y2;
+ y1 &= (mask << 2);
+ y1m += (y1 >> 2);
+ *((uint32*)(pred_block += 4)) = y1m; /* save y1m */
+
+ pred_block += offset2;
+ prev += offset;
+ }
+ return 1;
+ }
+ else /* tmp == 3 */
+ {
+ prev -= 3; /* to word-aligned */
+ for (i = B_SIZE; i > 0; i--)
+ {
+ x1 = *((uint32*)prev); /* load a3 a2 a1 a0 */
+ x2 = *((uint32*)(prev + width)); /* load b3 b2 b1 b0, another line */
+ y1 = *((uint32*)(prev += 4)); /* a7 a6 a5 a4 */
+ y2 = *((uint32*)(prev + width)); /* b7 b6 b5 b4 */
+
+ x1m = (x1 >> 2) & mask; /* zero out last 2 bits */
+ x2m = (x2 >> 2) & mask;
+ x1 = x1 ^(x1m << 2);
+ x2 = x2 ^(x2m << 2);
+ x1m += x2m;
+ x1 += x2;
+
+ /* x2m, x2 free */
+ y1m = (y1 >> 2) & mask; /* zero out last 2 bits */
+ y2m = (y2 >> 2) & mask;
+ y1 = y1 ^(y1m << 2);
+ y2 = y2 ^(y2m << 2);
+ y1m += y2m;
+ y1 += y2;
+
+ /* y2m, y2 free */
+ /* x2m, x2 free */
+ x2 = *((uint32*)(prev += 4)); /* a11 a10 a9 a8 */
+ y2 = *((uint32*)(prev + width)); /* b11 b10 b9 b8 */
+ x2m = (x2 >> 2) & mask;
+ y2m = (y2 >> 2) & mask;
+ x2 = x2 ^(x2m << 2);
+ y2 = y2 ^(y2m << 2);
+ x2m += y2m;
+ x2 += y2;
+ /* y2m, y2 free */
+
+ /* now operate on x1m, x1, y1m, y1, x2m, x2 */
+ /* x1m = a3+b3, a2+b2, a1+b1, a0+b0 */
+ /* y1m = a7+b7, a6+b6, a5+b5, a4+b4 */
+ /* x2m = a11+b11, a10+b10, a9+b9, a8+b8 */
+ /* x1, y1, x2 */
+
+ x1m >>= 24 ;
+ x1 >>= 24;
+ x1m |= (y1m << 8); /* a6+b6, a5+b5, a4+b4, a3+b3 */
+ x1 |= (y1 << 8);
+
+ x1m += y1m; /* a6+b6+a7+b7, ....., a3+b3+a4+b4 */
+ x1 += y1;
+ x1 += rnd2;
+ x1 &= (mask << 2);
+ x1m += (x1 >> 2);
+ *((uint32*)(pred_block += 4)) = x1m; /* save x1m */
+
+ y1m >>= 24;
+ y1 >>= 24;
+ y1m |= (x2m << 8); /* a10+b10, a9+b9, a8+b8, a7+b7 */
+ y1 |= (x2 << 8);
+ y1m += x2m; /* a10+b10+a11+b11, ....., a7+b7+a8+b8 */
+ y1 += x2;
+ y1 += rnd2;
+ y1 &= (mask << 2);
+ y1m += (y1 >> 2);
+ *((uint32*)(pred_block += 4)) = y1m; /* save y1m */
+
+ pred_block += offset2;
+ prev += offset;
+ }
+ return 1;
+ }
+}
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_outside.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_outside.cpp
new file mode 100644
index 0000000..9cd9022
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_outside.cpp
@@ -0,0 +1,514 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ xpos = x half-pixel of (x,y) coordinates within a VOP; motion
+ compensated coordinates; native data type
+ ypos = y half-pixel of (x,y) coordinates within a VOP; motion
+ compensated coordinates; native data type
+ comp = pointer to 8-bit compensated prediction values within a VOP;
+ computed by this module (i/o); full-pel resolution; 8-bit data
+ c_prev = pointer to previous 8-bit prediction values within a VOP;
+ values range from (0-255); full-pel resolution; 8-bit data
+ sh_d = pointer to residual values used to compensate the predicted
+ value; values range from (-512 to 511); full-pel resolution;
+ native data type
+ width = width of the VOP in pixels (x axis); full-pel resolution;
+ native data type
+ height = height of the VOP in pixels (y axis); full-pel resolution;
+ native data type
+ rnd1 = rounding value for case when one dimension uses half-pel
+ resolution; native data type
+ rnd2 = rounding value for case when two dimensions uses half-pel
+ resolution; native data type
+
+ Outputs:
+ returns 1
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Pointers and Buffers Modified:
+ comp = buffer contains newly computed compensated prediction values
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ Summary:
+
+ This function performs motion compensated prediction for the case where
+ the motion vector points to a block outside the VOP. The function interpolates
+ the pixels that are outside the VOP using the boundary pixels for the block.
+ Once the values are interpolated, the pixel values are computed for a block
+ in the current VOP. The prediction values are generated by averaging pixel
+ values in the previous VOP; the block position in the previous frame is
+ computed from the current block's motion vector. The computed pixel values
+ are calculated by adding the prediction values to the block residual values.
+
+ Details:
+
+ First, this functions determines which VOP boundary(ies) the motion vector
+ is outside, i.e., left, right, top, bottom. xpos is compared to the left and
+ right boundaries; ypos is compared to the top and bottom boundaries. The number
+ of block pixels inside the the boundary in the x and y directions are stored
+ in endx and endy, respectively. If the entire block is inside the x or y
+ boundary, the respectively end is set to 0.
+
+ After the boundaries are tested, any pixels lying outside a boundary are
+ interpolated from the boundary pixels. For example, if the block is outside the
+ bottom boundary, boundary pixels alone the bottom of the VOP as used to
+ interpolated those pixels lying outside the bottom boundary. The interpolation
+ used is a simple column-wise or row-wise copy of the boundary pixels (inside the
+ block) depending on which boundary the block is outside. In our example, each
+ boundary pixel would be copied column-wise to the pixel beneath it. If the
+ block was outside right boundary, the boundary pixels would be copied row-wise
+ to the pixel to the right of it. If the block was outside both an x and y
+ boundary, the boundary pixels would be copied row-wise for the portion of the
+ block outside the x boundary, and column-wise for the portion of the block
+ outside the y boundary. And so on.
+
+ Once the pixel interpolation is complete, the motion compensated output values
+ (comp[]) are calculed from the motion compensated prediction (pred[])values and
+ the residual values (sh_d[]) of the current frame. The prediction values are
+ generated by averaging pixel values in the previous VOP; the block position in
+ the previous frame is computed from the current block's motion vector. The
+ computed pixel values are calculated by adding the prediction values to the
+ block residual values.
+
+*/
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "motion_comp.h"
+
+#define PAD_CORNER { temp = *prev; \
+ temp |= (temp<<8); \
+ temp |= (temp<<16); \
+ *((uint32*)ptr) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; }
+
+#define PAD_ROW { temp = *((uint32*)prev); \
+ temp2 = *((uint32*)(prev+4)); \
+ *((uint32*)ptr) = temp;\
+ *((uint32*)(ptr+4)) = temp2; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;\
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp2;}
+
+#define PAD_EXTRA_4x8 { temp = *((uint32*)(prev+8)); \
+ *((uint32*)ptr) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+=16)) = temp; }
+
+#define PAD_COL { temp = *prev; \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)ptr) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp; \
+ temp = *(prev+=16); \
+ temp|=(temp<<8); temp|=(temp<<16); \
+ *((uint32*)(ptr+=16)) = temp; \
+ *((uint32*)(ptr+4)) = temp;}
+
+/* copy 8x8 block */
+#define COPY_BLOCK { *((uint32*)ptr) = *((uint32*)prev); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); }
+
+#define COPY_12x8 { *((uint32*)ptr) = *((uint32*)prev); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); \
+ *((uint32*)(ptr+=16)) = *((uint32*)(prev+=width)); \
+ *((uint32*)(ptr+4)) = *((uint32*)(prev+4)); \
+ *((uint32*)(ptr+8)) = *((uint32*)(prev+8)); }
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+int GetPredOutside(
+ int xpos, /* i */
+ int ypos, /* i */
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int height, /* i */
+ int rnd1, /* i */
+ int pred_width
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ uint8 *prev; /* pointers to adjacent pixels in the */
+ uint8 pred[256]; /* storage for padded pixel values, 16x16 */
+ uint8 *ptr;
+ int xoffset;
+ uint32 temp, temp2;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* saturate xpos and ypos */
+ if (xpos < -16) xpos = -16;
+ if (xpos > ((width - 1) << 1)) xpos = (width - 1) << 1;
+ if (ypos < -16) ypos = -16;
+ if (ypos > ((height - 1) << 1)) ypos = (height - 1) << 1;
+
+ if (xpos < 0)
+ {
+ if (ypos < 0) /* pad top left of frame */
+ {
+ /* copy the block */
+ ptr = pred + (8 << 4) + 8;
+ prev = c_prev;
+ COPY_BLOCK
+
+ /* pad the corner */
+ ptr = pred;
+ prev = pred + (8 << 4) + 8;
+ PAD_CORNER
+
+ /* pad top */
+ ptr = pred + 8;
+ prev = pred + (8 << 4) + 8;
+ PAD_ROW
+
+ /* pad left */
+ ptr = pred + (8 << 4);
+ prev = pred + (8 << 4) + 8;
+ PAD_COL
+
+
+ ptr = pred + (((ypos >> 1) + 8) << 4) + (xpos >> 1) + 8;
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ else if ((ypos >> 1) < (height - B_SIZE)) /* pad left of frame */
+ {
+ /* copy block */
+ ptr = pred + 8;
+ prev = c_prev + (ypos >> 1) * width;
+ COPY_BLOCK
+ /* copy extra line */
+ *((uint32*)(ptr += 16)) = *((uint32*)(prev += width));
+ *((uint32*)(ptr + 4)) = *((uint32*)(prev + 4));
+
+ /* pad left */
+ ptr = pred;
+ prev = pred + 8;
+ PAD_COL
+ /* pad extra line */
+ temp = *(prev += 16);
+ temp |= (temp << 8);
+ temp |= (temp << 16);
+ *((uint32*)(ptr += 16)) = temp;
+ *((uint32*)(ptr + 4)) = temp;
+
+ ptr = pred + 8 + (xpos >> 1);
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ else /* pad bottom left of frame */
+ {
+ /* copy the block */
+ ptr = pred + 8; /* point to the center */
+ prev = c_prev + width * (height - 8);
+ COPY_BLOCK
+
+ /* pad the corner */
+ ptr = pred + (8 << 4);
+ prev = ptr - 8;
+ PAD_CORNER
+
+ /* pad bottom */
+ ptr = pred + (8 << 4) + 8;
+ prev = ptr - 16;
+ PAD_ROW
+
+ /* pad left */
+ ptr = pred ;
+ prev = ptr + 8;
+ PAD_COL
+
+ ptr = pred + 8 + (((ypos >> 1) - (height - 8)) << 4) + (xpos >> 1);
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ }
+ else if ((xpos >> 1) < (width - B_SIZE))
+ {
+ if (ypos < 0) /* pad top of frame */
+ {
+ xoffset = xpos >> 1;
+ xoffset = xoffset & 0x3; /* word align ptr */
+
+ /* copy block */
+ ptr = pred + (8 << 4);
+ prev = c_prev + (xpos >> 1) - xoffset;
+
+ if (xoffset || (xpos&1)) /* copy extra 4x8 */
+ {
+ COPY_12x8
+ }
+ else
+ {
+ COPY_BLOCK
+ }
+
+ /* pad top */
+ ptr = pred;
+ prev = pred + (8 << 4);
+ PAD_ROW
+ if (xoffset || (xpos&1)) /* pad extra 4x8 */
+ {
+ ptr = pred + 8;
+ PAD_EXTRA_4x8
+ }
+
+ ptr = pred + (((ypos >> 1) + 8) << 4) + xoffset;
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ else /* pad bottom of frame */
+ {
+ xoffset = xpos >> 1;
+ xoffset = xoffset & 0x3; /* word align ptr */
+ /* copy block */
+ ptr = pred ;
+ prev = c_prev + width * (height - 8) + (xpos >> 1) - xoffset;
+ if (xoffset || (xpos&1))
+ {
+ COPY_12x8
+ }
+ else
+ {
+ COPY_BLOCK
+ }
+
+ /* pad bottom */
+ ptr = pred + (8 << 4);
+ prev = ptr - 16;
+ PAD_ROW
+ if (xoffset || (xpos&1))
+ {
+ ptr = pred + (8 << 4) + 8;
+ PAD_EXTRA_4x8
+ }
+
+ ptr = pred + (((ypos >> 1) - (height - 8)) << 4) + xoffset;
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ }
+ else
+ {
+ if (ypos < 0) /* pad top right of frame */
+ {
+ /* copy block */
+ ptr = pred + (8 << 4);
+ prev = c_prev + width - 8;
+ COPY_BLOCK
+
+ /* pad top-right */
+ ptr = pred + 8;
+ prev = pred + (8 << 4) + 7;
+ PAD_CORNER
+
+ /* pad top */
+ ptr = pred ;
+ prev = pred + (8 << 4);
+ PAD_ROW;
+
+ /* pad right */
+ ptr = pred + (8 << 4) + 8;
+ prev = ptr - 1;
+ PAD_COL;
+
+ ptr = pred + ((8 + (ypos >> 1)) << 4) + (8 - (width - (xpos >> 1)));
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ else if ((ypos >> 1) < (height - B_SIZE)) /* pad right of frame */
+ {
+ /* copy block */
+ ptr = pred;
+ prev = c_prev + (ypos >> 1) * width + width - 8;
+ COPY_BLOCK
+ /* copy extra line */
+ *((uint32*)(ptr += 16)) = *((uint32*)(prev += width));
+ *((uint32*)(ptr + 4)) = *((uint32*)(prev + 4));
+
+ /* pad right */
+ ptr = pred + 8;
+ prev = ptr - 1;
+ PAD_COL;
+ /* pad extra line */
+ temp = *(prev += 16);
+ temp |= (temp << 8);
+ temp |= (temp << 16);
+ *((uint32*)(ptr += 16)) = temp;
+ *((uint32*)(ptr + 4)) = temp;
+
+
+ ptr = pred + 8 - (width - (xpos >> 1));
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+
+ }
+ else /* pad bottom right of frame */
+ {
+ /* copy block */
+ ptr = pred;
+ prev = c_prev + width * (height - 8) + width - 8;
+ COPY_BLOCK
+
+ /* pad bottom-right */
+ ptr = pred + (8 << 4) + 8;
+ prev = ptr - 17;
+ PAD_CORNER
+
+ /* pad right */
+ ptr = pred + 8;
+ prev = ptr - 1;
+ PAD_COL
+
+ /* pad bottom */
+ ptr = pred + (8 << 4);
+ prev = ptr - 16;
+ PAD_ROW
+
+ ptr = pred + 8 - (width - (xpos >> 1)) + ((8 - (height - (ypos >> 1))) << 4);
+
+ GetPredAdvBTable[ypos&1][xpos&1](ptr, pred_block, 16, (pred_width << 1) | rnd1);
+
+ return 1;
+ }
+ }
+}
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/idct.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/idct.cpp
new file mode 100644
index 0000000..2e932a4
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/idct.cpp
@@ -0,0 +1,579 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ MODULE DESCRIPTION
+
+ This file contains the functions that transform an 8r8 image block from
+ dequantized DCT coefficients to spatial domain pirel values by calculating
+ inverse discrete cosine transform (IDCT).
+
+------------------------------------------------------------------------------
+*/
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "idct.h"
+#include "motion_comp.h"
+#ifndef FAST_IDCT
+
+/*
+------------------------------------------------------------------------------
+ FUNCTION NAME: idct
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS FOR idct
+
+ Inputs:
+ blk = pointer to the buffer containing the dequantized DCT
+ coefficients of type int for an 8r8 image block;
+ values range from (-2048, 2047) which defined as standard.
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ None
+
+ Pointers and Buffers Modified:
+ blk points to the found IDCT values for an 8r8 image block.
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION FOR idct
+
+ This function transforms an 8r8 image block from dequantized DCT coefficients
+ (F(u,v)) to spatial domain pirel values (f(r,y)) by performing the two
+ dimensional inverse discrete cosine transform (IDCT).
+
+ _7_ _7_ C(u) C(v)
+ f(r,y) = \ \ F(u,v)---- ----cos[(2r+1)*u*pi/16]cos[(2y+1)*v*pi/16]
+ /__ /__ 2 2
+ u=0 v=0
+
+ where C(i) = 1/sqrt(2) if i=0
+ C(i) = 1 otherwise
+
+ 2-D IDCT can be separated as horizontal(row-wise) and vertical(column-wise)
+ 1-D IDCTs. Therefore, 2-D IDCT values are found by the following two steps:
+ 1. Find horizontal 1-D IDCT values for each row from 8r8 dequantized DCT
+ coefficients by row IDCT operation.
+
+ _7_ C(u)
+ g(r,v) = \ F(u,v) ---- cos[(2r+1)*u*pi/16]
+ /__ 2
+ u=0
+
+ 2. Find vertical 1-D IDCT values for each column from the results of 1
+ by column IDCT operation.
+
+ _7_ C(v)
+ f(r,y) = \ g(r,v) ---- cos[(2y+1)*v*pi/16]
+ /__ 2
+ v=0
+
+------------------------------------------------------------------------------
+ REQUIREMENTS FOR idct
+
+ None
+
+------------------------------------------------------------------------------
+*/
+/* REFERENCES FOR idct */
+/* idct.c, inverse fast discrete cosine transform
+ inverse two dimensional DCT, Chen-Wang algorithm
+ (cf. IEEE ASSP-32, pp. 803-816, Aug. 1984)
+ 32-bit integer arithmetic (8 bit coefficients)
+ 11 mults, 29 adds per DCT
+ sE, 18.8.91
+
+ coefficients ertended to 12 bit for IEEE1180-1990
+ compliance sE, 2.1.94
+*/
+
+
+/*----------------------------------------------------------------------------
+; Function Code FOR idct
+----------------------------------------------------------------------------*/
+void idct_intra(
+ int *blk, uint8 *comp, int width
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int i;
+ int32 tmpBLK[64];
+ int32 *tmpBLK32 = &tmpBLK[0];
+ int32 r0, r1, r2, r3, r4, r5, r6, r7, r8; /* butterfly nodes */
+ int32 a;
+ int offset = width - 8;
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* two dimensional inverse discrete cosine transform */
+
+
+ /* column (vertical) IDCT */
+ for (i = B_SIZE - 1; i >= 0; i--)
+ {
+ /* initialize butterfly nodes at first stage */
+
+ r1 = blk[B_SIZE * 4 + i] << 11;
+ /* since row IDCT results have net left shift by 3 */
+ /* this left shift by 8 gives net left shift by 11 */
+ /* in order to maintain the same scale as that of */
+ /* coefficients Wi */
+
+ r2 = blk[B_SIZE * 6 + i];
+ r3 = blk[B_SIZE * 2 + i];
+ r4 = blk[B_SIZE * 1 + i];
+ r5 = blk[B_SIZE * 7 + i];
+ r6 = blk[B_SIZE * 5 + i];
+ r7 = blk[B_SIZE * 3 + i];
+
+ if (!(r1 | r2 | r3 | r4 | r5 | r6 | r7))
+ {
+ /* shortcut */
+ /* execute if values of g(r,1) to g(r,7) in a column*/
+ /* are all zeros */
+
+ /* make output of IDCT >>3 or scaled by 1/8 and */
+ /* with the proper rounding */
+ a = (blk[B_SIZE * 0 + i]) << 3;
+ tmpBLK32[B_SIZE * 0 + i] = a;
+ tmpBLK32[B_SIZE * 1 + i] = a;
+ tmpBLK32[B_SIZE * 2 + i] = a;
+ tmpBLK32[B_SIZE * 3 + i] = a;
+ tmpBLK32[B_SIZE * 4 + i] = a;
+ tmpBLK32[B_SIZE * 5 + i] = a;
+ tmpBLK32[B_SIZE * 6 + i] = a;
+ tmpBLK32[B_SIZE * 7 + i] = a;
+ }
+ else
+ {
+ r0 = (blk[8 * 0 + i] << 11) + 128;
+
+ /* first stage */
+
+ r8 = W7 * (r4 + r5);
+ r4 = (r8 + (W1 - W7) * r4);
+ /* Multiplication with Wi increases the net left */
+ /* shift from 11 to 14,we have to shift back by 3*/
+ r5 = (r8 - (W1 + W7) * r5);
+ r8 = W3 * (r6 + r7);
+ r6 = (r8 - (W3 - W5) * r6);
+ r7 = (r8 - (W3 + W5) * r7);
+
+ /* second stage */
+ r8 = r0 + r1;
+ r0 -= r1;
+
+ r1 = W6 * (r3 + r2);
+ r2 = (r1 - (W2 + W6) * r2);
+ r3 = (r1 + (W2 - W6) * r3);
+
+ r1 = r4 + r6;
+ r4 -= r6;
+ r6 = r5 + r7;
+ r5 -= r7;
+
+ /* third stage */
+ r7 = r8 + r3;
+ r8 -= r3;
+ r3 = r0 + r2;
+ r0 -= r2;
+ r2 = (181 * (r4 + r5) + 128) >> 8; /* rounding */
+ r4 = (181 * (r4 - r5) + 128) >> 8;
+
+ /* fourth stage */
+ /* net shift of IDCT is >>3 after the following */
+ /* shift operation, it makes output of 2-D IDCT */
+ /* scaled by 1/8, that is scaled twice by */
+ /* 1/(2*sqrt(2)) for row IDCT and column IDCT. */
+ /* see detail analysis in design doc. */
+ tmpBLK32[0 + i] = (r7 + r1) >> 8;
+ tmpBLK32[(1<<3) + i] = (r3 + r2) >> 8;
+ tmpBLK32[(2<<3) + i] = (r0 + r4) >> 8;
+ tmpBLK32[(3<<3) + i] = (r8 + r6) >> 8;
+ tmpBLK32[(4<<3) + i] = (r8 - r6) >> 8;
+ tmpBLK32[(5<<3) + i] = (r0 - r4) >> 8;
+ tmpBLK32[(6<<3) + i] = (r3 - r2) >> 8;
+ tmpBLK32[(7<<3) + i] = (r7 - r1) >> 8;
+ }
+ }
+ /* row (horizontal) IDCT */
+ for (i = 0 ; i < B_SIZE; i++)
+ {
+ /* initialize butterfly nodes at the first stage */
+
+ r1 = ((int32)tmpBLK32[4+(i<<3)]) << 8;
+ /* r1 left shift by 11 is to maintain the same */
+ /* scale as that of coefficients (W1,...W7) */
+ /* since blk[4] won't multiply with Wi. */
+ /* see detail diagram in design document. */
+
+ r2 = tmpBLK32[6+(i<<3)];
+ r3 = tmpBLK32[2+(i<<3)];
+ r4 = tmpBLK32[1+(i<<3)];
+ r5 = tmpBLK32[7+(i<<3)];
+ r6 = tmpBLK32[5+(i<<3)];
+ r7 = tmpBLK32[3+(i<<3)];
+
+ if (!(r1 | r2 | r3 | r4 | r5 | r6 | r7))
+ {
+ /* shortcut */
+ /* execute if values of F(1,v) to F(7,v) in a row*/
+ /* are all zeros */
+
+ /* output of row IDCT scaled by 8 */
+ a = (((int32)tmpBLK32[0+(i<<3)] + 32) >> 6);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+ *comp++ = a;
+
+ comp += offset;
+ }
+
+ else
+ {
+ /* for proper rounding in the fourth stage */
+ r0 = (((int32)tmpBLK32[0+(i<<3)]) << 8) + 8192;
+
+ /* first stage */
+
+ r8 = W7 * (r4 + r5) + 4;
+ r4 = (r8 + (W1 - W7) * r4) >> 3;
+ r5 = (r8 - (W1 + W7) * r5) >> 3;
+
+ r8 = W3 * (r6 + r7) + 4;
+ r6 = (r8 - (W3 - W5) * r6) >> 3;
+ r7 = (r8 - (W3 + W5) * r7) >> 3;
+
+ /* second stage */
+ r8 = r0 + r1;
+ r0 -= r1;
+
+ r1 = W6 * (r3 + r2) + 4;
+ r2 = (r1 - (W2 + W6) * r2) >> 3;
+ r3 = (r1 + (W2 - W6) * r3) >> 3;
+
+ r1 = r4 + r6;
+ r4 -= r6;
+ r6 = r5 + r7;
+ r5 -= r7;
+
+ /* third stage */
+ r7 = r8 + r3;
+ r8 -= r3;
+ r3 = r0 + r2;
+ r0 -= r2;
+ r2 = (181 * (r4 + r5) + 128) >> 8; /* rounding */
+ r4 = (181 * (r4 - r5) + 128) >> 8;
+
+ /* fourth stage */
+ /* net shift of this function is <<3 after the */
+ /* following shift operation, it makes output of */
+ /* row IDCT scaled by 8 to retain 3 bits precision*/
+ a = ((r7 + r1) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r3 + r2) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r0 + r4) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r8 + r6) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r8 - r6) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r0 - r4) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r3 - r2) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+ a = ((r7 - r1) >> 14);
+ CLIP_RESULT(a)
+ *comp++ = a;
+
+ comp += offset;
+ }
+ }
+
+
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+void idct(
+ int *blk, uint8 *pred, uint8 *dst, int width)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int i;
+ int32 tmpBLK[64];
+ int32 *tmpBLK32 = &tmpBLK[0];
+ int32 r0, r1, r2, r3, r4, r5, r6, r7, r8; /* butterfly nodes */
+ int32 a;
+ int res;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* two dimensional inverse discrete cosine transform */
+
+
+ /* column (vertical) IDCT */
+ for (i = B_SIZE - 1; i >= 0; i--)
+ {
+ /* initialize butterfly nodes at first stage */
+
+ r1 = blk[B_SIZE * 4 + i] << 11;
+ /* since row IDCT results have net left shift by 3 */
+ /* this left shift by 8 gives net left shift by 11 */
+ /* in order to maintain the same scale as that of */
+ /* coefficients Wi */
+
+ r2 = blk[B_SIZE * 6 + i];
+ r3 = blk[B_SIZE * 2 + i];
+ r4 = blk[B_SIZE * 1 + i];
+ r5 = blk[B_SIZE * 7 + i];
+ r6 = blk[B_SIZE * 5 + i];
+ r7 = blk[B_SIZE * 3 + i];
+
+ if (!(r1 | r2 | r3 | r4 | r5 | r6 | r7))
+ {
+ /* shortcut */
+ /* execute if values of g(r,1) to g(r,7) in a column*/
+ /* are all zeros */
+
+ /* make output of IDCT >>3 or scaled by 1/8 and */
+ /* with the proper rounding */
+ a = (blk[B_SIZE * 0 + i]) << 3;
+ tmpBLK32[B_SIZE * 0 + i] = a;
+ tmpBLK32[B_SIZE * 1 + i] = a;
+ tmpBLK32[B_SIZE * 2 + i] = a;
+ tmpBLK32[B_SIZE * 3 + i] = a;
+ tmpBLK32[B_SIZE * 4 + i] = a;
+ tmpBLK32[B_SIZE * 5 + i] = a;
+ tmpBLK32[B_SIZE * 6 + i] = a;
+ tmpBLK32[B_SIZE * 7 + i] = a;
+ }
+ else
+ {
+ r0 = (blk[8 * 0 + i] << 11) + 128;
+
+ /* first stage */
+
+ r8 = W7 * (r4 + r5);
+ r4 = (r8 + (W1 - W7) * r4);
+ /* Multiplication with Wi increases the net left */
+ /* shift from 11 to 14,we have to shift back by 3*/
+ r5 = (r8 - (W1 + W7) * r5);
+ r8 = W3 * (r6 + r7);
+ r6 = (r8 - (W3 - W5) * r6);
+ r7 = (r8 - (W3 + W5) * r7);
+
+ /* second stage */
+ r8 = r0 + r1;
+ r0 -= r1;
+
+ r1 = W6 * (r3 + r2);
+ r2 = (r1 - (W2 + W6) * r2);
+ r3 = (r1 + (W2 - W6) * r3);
+
+ r1 = r4 + r6;
+ r4 -= r6;
+ r6 = r5 + r7;
+ r5 -= r7;
+
+ /* third stage */
+ r7 = r8 + r3;
+ r8 -= r3;
+ r3 = r0 + r2;
+ r0 -= r2;
+ r2 = (181 * (r4 + r5) + 128) >> 8; /* rounding */
+ r4 = (181 * (r4 - r5) + 128) >> 8;
+
+ /* fourth stage */
+ /* net shift of IDCT is >>3 after the following */
+ /* shift operation, it makes output of 2-D IDCT */
+ /* scaled by 1/8, that is scaled twice by */
+ /* 1/(2*sqrt(2)) for row IDCT and column IDCT. */
+ /* see detail analysis in design doc. */
+ tmpBLK32[0 + i] = (r7 + r1) >> 8;
+ tmpBLK32[(1<<3) + i] = (r3 + r2) >> 8;
+ tmpBLK32[(2<<3) + i] = (r0 + r4) >> 8;
+ tmpBLK32[(3<<3) + i] = (r8 + r6) >> 8;
+ tmpBLK32[(4<<3) + i] = (r8 - r6) >> 8;
+ tmpBLK32[(5<<3) + i] = (r0 - r4) >> 8;
+ tmpBLK32[(6<<3) + i] = (r3 - r2) >> 8;
+ tmpBLK32[(7<<3) + i] = (r7 - r1) >> 8;
+ }
+ }
+ /* row (horizontal) IDCT */
+ for (i = B_SIZE - 1; i >= 0; i--)
+ {
+ /* initialize butterfly nodes at the first stage */
+
+ r1 = ((int32)tmpBLK32[4+(i<<3)]) << 8;
+ /* r1 left shift by 11 is to maintain the same */
+ /* scale as that of coefficients (W1,...W7) */
+ /* since blk[4] won't multiply with Wi. */
+ /* see detail diagram in design document. */
+
+ r2 = tmpBLK32[6+(i<<3)];
+ r3 = tmpBLK32[2+(i<<3)];
+ r4 = tmpBLK32[1+(i<<3)];
+ r5 = tmpBLK32[7+(i<<3)];
+ r6 = tmpBLK32[5+(i<<3)];
+ r7 = tmpBLK32[3+(i<<3)];
+
+ if (!(r1 | r2 | r3 | r4 | r5 | r6 | r7))
+ {
+ /* shortcut */
+ /* execute if values of F(1,v) to F(7,v) in a row*/
+ /* are all zeros */
+
+ /* output of row IDCT scaled by 8 */
+ a = (tmpBLK32[0+(i<<3)] + 32) >> 6;
+ blk[0+(i<<3)] = a;
+ blk[1+(i<<3)] = a;
+ blk[2+(i<<3)] = a;
+ blk[3+(i<<3)] = a;
+ blk[4+(i<<3)] = a;
+ blk[5+(i<<3)] = a;
+ blk[6+(i<<3)] = a;
+ blk[7+(i<<3)] = a;
+
+ }
+
+ else
+ {
+ /* for proper rounding in the fourth stage */
+ r0 = (((int32)tmpBLK32[0+(i<<3)]) << 8) + 8192;
+
+ /* first stage */
+
+ r8 = W7 * (r4 + r5) + 4;
+ r4 = (r8 + (W1 - W7) * r4) >> 3;
+ r5 = (r8 - (W1 + W7) * r5) >> 3;
+
+ r8 = W3 * (r6 + r7) + 4;
+ r6 = (r8 - (W3 - W5) * r6) >> 3;
+ r7 = (r8 - (W3 + W5) * r7) >> 3;
+
+ /* second stage */
+ r8 = r0 + r1;
+ r0 -= r1;
+
+ r1 = W6 * (r3 + r2) + 4;
+ r2 = (r1 - (W2 + W6) * r2) >> 3;
+ r3 = (r1 + (W2 - W6) * r3) >> 3;
+
+ r1 = r4 + r6;
+ r4 -= r6;
+ r6 = r5 + r7;
+ r5 -= r7;
+
+ /* third stage */
+ r7 = r8 + r3;
+ r8 -= r3;
+ r3 = r0 + r2;
+ r0 -= r2;
+ r2 = (181 * (r4 + r5) + 128) >> 8; /* rounding */
+ r4 = (181 * (r4 - r5) + 128) >> 8;
+
+ /* fourth stage */
+ /* net shift of this function is <<3 after the */
+ /* following shift operation, it makes output of */
+ /* row IDCT scaled by 8 to retain 3 bits precision*/
+ blk[0+(i<<3)] = (r7 + r1) >> 14;
+ blk[1+(i<<3)] = (r3 + r2) >> 14;
+ blk[2+(i<<3)] = (r0 + r4) >> 14;
+ blk[3+(i<<3)] = (r8 + r6) >> 14;
+ blk[4+(i<<3)] = (r8 - r6) >> 14;
+ blk[5+(i<<3)] = (r0 - r4) >> 14;
+ blk[6+(i<<3)] = (r3 - r2) >> 14;
+ blk[7+(i<<3)] = (r7 - r1) >> 14;
+ }
+ /* add with prediction , 08/03/05 */
+ res = (*pred++ + block[0+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[1+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[2+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[3+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[4+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[5+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[6+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+ res = (*pred++ + block[7+(i<<3)]);
+ CLIP_RESULT(res);
+ *dst++ = res;
+
+ pred += 8;
+ dst += (width - 8);
+ }
+
+
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+#endif
+/*----------------------------------------------------------------------------
+; End Function: idct
+----------------------------------------------------------------------------*/
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/idct.h b/media/libstagefright/codecs/m4v_h263/dec/src/idct.h
new file mode 100644
index 0000000..8edb654
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/idct.h
@@ -0,0 +1,118 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef idct_h
+#define idct_h
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+#define INTEGER_IDCT
+
+#ifdef FAST_IDCT
+#ifndef INTEGER_IDCT
+#define INTEGER_IDCT
+#endif
+#endif
+
+#ifdef FAST_IDCT
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ void idctrow0(int16 *blk, uint8 *pred, uint8 *dst, int width);
+ void idctrow1(int16 *blk, uint8 *pred, uint8 *dst, int width);
+ void idctrow2(int16 *blk, uint8 *pred, uint8 *dst, int width);
+ void idctrow3(int16 *blk, uint8 *pred, uint8 *dst, int width);
+ void idctrow4(int16 *blk, uint8 *pred, uint8 *dst, int width);
+ void idctcol0(int16 *blk);
+ void idctcol1(int16 *blk);
+ void idctcol2(int16 *blk);
+ void idctcol3(int16 *blk);
+ void idctcol4(int16 *blk);
+
+ void idctrow0_intra(int16 *blk, PIXEL *comp, int width);
+ void idctrow1_intra(int16 *blk, PIXEL *comp, int width);
+ void idctrow2_intra(int16 *blk, PIXEL *comp, int width);
+ void idctrow3_intra(int16 *blk, PIXEL *comp, int width);
+ void idctrow4_intra(int16 *blk, PIXEL *comp, int width);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+/* this code assumes ">>" to be a two's-complement arithmetic */
+/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2 */
+
+/* a positive real constant is converted to an integer scaled by 2048 */
+/* or equivalent to left shift by 11 */
+
+#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
+#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
+#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
+#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
+#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
+#define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */
+#define W1mW7 2276
+#define W1pW7 3406
+#define W5mW3 -799
+#define mW3mW5 -4017
+#define mW2mW6 -3784
+#define W2mW6 1568
+
+/* left shift by 11 is to maintain the accuracy of the decimal point */
+/* for the transform coefficients (W1,...W7) */
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; SIMPLE TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; ENUMERATED TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; STRUCTURES TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; GLOBAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; END
+----------------------------------------------------------------------------*/
+#endif
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/idct_vca.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/idct_vca.cpp
new file mode 100644
index 0000000..f35ce4f
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/idct_vca.cpp
@@ -0,0 +1,660 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4def.h"
+#include "idct.h"
+#include "motion_comp.h"
+
+#ifdef FAST_IDCT
+
+/****************************************************************
+* vca_idct.c : created 6/1/99 for several options
+* of hard-coded reduced idct function (using nz_coefs)
+******************************************************************/
+
+/*****************************************************/
+//pretested version
+void idctrow0(int16 *, uint8 *, uint8 *, int)
+{
+ return ;
+}
+void idctcol0(int16 *)
+{
+ return ;
+}
+
+void idctrow1(int16 *blk, uint8 *pred, uint8 *dst, int width)
+{
+ /* shortcut */
+ int tmp;
+ int i = 8;
+ uint32 pred_word, dst_word;
+ int res, res2;
+
+ /* preset the offset, such that we can take advantage pre-offset addressing mode */
+ width -= 4;
+ dst -= width;
+ pred -= 12;
+ blk -= 8;
+
+ while (i--)
+ {
+ tmp = (*(blk += 8) + 32) >> 6;
+ *blk = 0;
+
+ pred_word = *((uint32*)(pred += 12)); /* read 4 bytes from pred */
+ res = tmp + (pred_word & 0xFF);
+ CLIP_RESULT(res);
+ res2 = tmp + ((pred_word >> 8) & 0xFF);
+ CLIP_RESULT(res2);
+ dst_word = (res2 << 8) | res;
+ res = tmp + ((pred_word >> 16) & 0xFF);
+ CLIP_RESULT(res);
+ dst_word |= (res << 16);
+ res = tmp + ((pred_word >> 24) & 0xFF);
+ CLIP_RESULT(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += width)) = dst_word; /* save 4 bytes to dst */
+
+ pred_word = *((uint32*)(pred += 4)); /* read 4 bytes from pred */
+ res = tmp + (pred_word & 0xFF);
+ CLIP_RESULT(res);
+ res2 = tmp + ((pred_word >> 8) & 0xFF);
+ CLIP_RESULT(res2);
+ dst_word = (res2 << 8) | res;
+ res = tmp + ((pred_word >> 16) & 0xFF);
+ CLIP_RESULT(res);
+ dst_word |= (res << 16);
+ res = tmp + ((pred_word >> 24) & 0xFF);
+ CLIP_RESULT(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += 4)) = dst_word; /* save 4 bytes to dst */
+ }
+ return;
+}
+
+void idctcol1(int16 *blk)
+{ /* shortcut */
+ blk[0] = blk[8] = blk[16] = blk[24] = blk[32] = blk[40] = blk[48] = blk[56] =
+ blk[0] << 3;
+ return;
+}
+
+void idctrow2(int16 *blk, uint8 *pred, uint8 *dst, int width)
+{
+ int32 x0, x1, x2, x4, x5;
+ int i = 8;
+ uint32 pred_word, dst_word;
+ int res, res2;
+
+ /* preset the offset, such that we can take advantage pre-offset addressing mode */
+ width -= 4;
+ dst -= width;
+ pred -= 12;
+ blk -= 8;
+
+ while (i--)
+ {
+ /* shortcut */
+ x4 = blk[9];
+ blk[9] = 0;
+ x0 = ((*(blk += 8)) << 8) + 8192;
+ *blk = 0; /* for proper rounding in the fourth stage */
+
+ /* first stage */
+ x5 = (W7 * x4 + 4) >> 3;
+ x4 = (W1 * x4 + 4) >> 3;
+
+ /* third stage */
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x1 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ pred_word = *((uint32*)(pred += 12)); /* read 4 bytes from pred */
+ res = (x0 + x4) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x0 + x2) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x0 + x1) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x0 + x5) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += width)) = dst_word; /* save 4 bytes to dst */
+
+ pred_word = *((uint32*)(pred += 4)); /* read 4 bytes from pred */
+ res = (x0 - x5) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x0 - x1) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x0 - x2) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x0 - x4) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += 4)) = dst_word; /* save 4 bytes to dst */
+ }
+ return ;
+}
+
+void idctcol2(int16 *blk)
+{
+ int32 x0, x1, x3, x5, x7;//, x8;
+
+ x1 = blk[8];
+ x0 = ((int32)blk[0] << 11) + 128;
+ /* both upper and lower*/
+
+ x7 = W7 * x1;
+ x1 = W1 * x1;
+
+ x3 = x7;
+ x5 = (181 * (x1 - x7) + 128) >> 8;
+ x7 = (181 * (x1 + x7) + 128) >> 8;
+
+ blk[0] = (x0 + x1) >> 8;
+ blk[8] = (x0 + x7) >> 8;
+ blk[16] = (x0 + x5) >> 8;
+ blk[24] = (x0 + x3) >> 8;
+ blk[56] = (x0 - x1) >> 8;
+ blk[48] = (x0 - x7) >> 8;
+ blk[40] = (x0 - x5) >> 8;
+ blk[32] = (x0 - x3) >> 8;
+
+ return ;
+}
+
+void idctrow3(int16 *blk, uint8 *pred, uint8 *dst, int width)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+ int i = 8;
+ uint32 pred_word, dst_word;
+ int res, res2;
+
+ /* preset the offset, such that we can take advantage pre-offset addressing mode */
+ width -= 4;
+ dst -= width;
+ pred -= 12;
+ blk -= 8;
+
+ while (i--)
+ {
+ x2 = blk[10];
+ blk[10] = 0;
+ x1 = blk[9];
+ blk[9] = 0;
+ x0 = ((*(blk += 8)) << 8) + 8192;
+ *blk = 0; /* for proper rounding in the fourth stage */
+ /* both upper and lower*/
+ /* both x2orx6 and x0orx4 */
+
+ x4 = x0;
+ x6 = (W6 * x2 + 4) >> 3;
+ x2 = (W2 * x2 + 4) >> 3;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = (W7 * x1 + 4) >> 3;
+ x1 = (W1 * x1 + 4) >> 3;
+ x3 = x7;
+ x5 = (181 * (x1 - x7) + 128) >> 8;
+ x7 = (181 * (x1 + x7) + 128) >> 8;
+
+ pred_word = *((uint32*)(pred += 12)); /* read 4 bytes from pred */
+ res = (x0 + x1) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x4 + x7) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x6 + x5) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x2 + x3) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += width)) = dst_word; /* save 4 bytes to dst */
+
+ pred_word = *((uint32*)(pred += 4)); /* read 4 bytes from pred */
+ res = (x2 - x3) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x6 - x5) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x4 - x7) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x0 - x1) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += 4)) = dst_word; /* save 4 bytes to dst */
+ }
+
+ return ;
+}
+
+void idctcol3(int16 *blk)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+
+ x2 = blk[16];
+ x1 = blk[8];
+ x0 = ((int32)blk[0] << 11) + 128;
+
+ x4 = x0;
+ x6 = W6 * x2;
+ x2 = W2 * x2;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = W7 * x1;
+ x1 = W1 * x1;
+ x3 = x7;
+ x5 = (181 * (x1 - x7) + 128) >> 8;
+ x7 = (181 * (x1 + x7) + 128) >> 8;
+
+ blk[0] = (x0 + x1) >> 8;
+ blk[8] = (x4 + x7) >> 8;
+ blk[16] = (x6 + x5) >> 8;
+ blk[24] = (x2 + x3) >> 8;
+ blk[56] = (x0 - x1) >> 8;
+ blk[48] = (x4 - x7) >> 8;
+ blk[40] = (x6 - x5) >> 8;
+ blk[32] = (x2 - x3) >> 8;
+
+ return;
+}
+
+
+void idctrow4(int16 *blk, uint8 *pred, uint8 *dst, int width)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+ int i = 8;
+ uint32 pred_word, dst_word;
+ int res, res2;
+
+ /* preset the offset, such that we can take advantage pre-offset addressing mode */
+ width -= 4;
+ dst -= width;
+ pred -= 12;
+ blk -= 8;
+
+ while (i--)
+ {
+ x2 = blk[10];
+ blk[10] = 0;
+ x1 = blk[9];
+ blk[9] = 0;
+ x3 = blk[11];
+ blk[11] = 0;
+ x0 = ((*(blk += 8)) << 8) + 8192;
+ *blk = 0; /* for proper rounding in the fourth stage */
+
+ x4 = x0;
+ x6 = (W6 * x2 + 4) >> 3;
+ x2 = (W2 * x2 + 4) >> 3;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = (W7 * x1 + 4) >> 3;
+ x1 = (W1 * x1 + 4) >> 3;
+ x5 = (W3 * x3 + 4) >> 3;
+ x3 = (- W5 * x3 + 4) >> 3;
+ x8 = x1 - x5;
+ x1 += x5;
+ x5 = x8;
+ x8 = x7 - x3;
+ x3 += x7;
+ x7 = (181 * (x5 + x8) + 128) >> 8;
+ x5 = (181 * (x5 - x8) + 128) >> 8;
+
+ pred_word = *((uint32*)(pred += 12)); /* read 4 bytes from pred */
+ res = (x0 + x1) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x4 + x7) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x6 + x5) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x2 + x3) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += width)) = dst_word; /* save 4 bytes to dst */
+
+ pred_word = *((uint32*)(pred += 4)); /* read 4 bytes from pred */
+ res = (x2 - x3) >> 14;
+ ADD_AND_CLIP1(res);
+ res2 = (x6 - x5) >> 14;
+ ADD_AND_CLIP2(res2);
+ dst_word = (res2 << 8) | res;
+ res = (x4 - x7) >> 14;
+ ADD_AND_CLIP3(res);
+ dst_word |= (res << 16);
+ res = (x0 - x1) >> 14;
+ ADD_AND_CLIP4(res);
+ dst_word |= (res << 24);
+ *((uint32*)(dst += 4)) = dst_word; /* save 4 bytes to dst */
+ }
+ return ;
+}
+
+void idctcol4(int16 *blk)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
+ x2 = blk[16];
+ x1 = blk[8];
+ x3 = blk[24];
+ x0 = ((int32)blk[0] << 11) + 128;
+
+ x4 = x0;
+ x6 = W6 * x2;
+ x2 = W2 * x2;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = W7 * x1;
+ x1 = W1 * x1;
+ x5 = W3 * x3;
+ x3 = -W5 * x3;
+ x8 = x1 - x5;
+ x1 += x5;
+ x5 = x8;
+ x8 = x7 - x3;
+ x3 += x7;
+ x7 = (181 * (x5 + x8) + 128) >> 8;
+ x5 = (181 * (x5 - x8) + 128) >> 8;
+
+
+ blk[0] = (x0 + x1) >> 8;
+ blk[8] = (x4 + x7) >> 8;
+ blk[16] = (x6 + x5) >> 8;
+ blk[24] = (x2 + x3) >> 8;
+ blk[56] = (x0 - x1) >> 8;
+ blk[48] = (x4 - x7) >> 8;
+ blk[40] = (x6 - x5) >> 8;
+ blk[32] = (x2 - x3) >> 8;
+
+ return ;
+}
+
+void idctrow0_intra(int16 *, PIXEL *, int)
+{
+ return ;
+}
+
+void idctrow1_intra(int16 *blk, PIXEL *comp, int width)
+{
+ /* shortcut */
+ int32 tmp;
+ int i = 8;
+ int offset = width;
+ uint32 word;
+
+ comp -= offset;
+ while (i--)
+ {
+ tmp = ((blk[0] + 32) >> 6);
+ blk[0] = 0;
+ CLIP_RESULT(tmp)
+
+ word = (tmp << 8) | tmp;
+ word = (word << 16) | word;
+
+ *((uint32*)(comp += offset)) = word;
+ *((uint32*)(comp + 4)) = word;
+
+
+
+
+ blk += B_SIZE;
+ }
+ return;
+}
+
+void idctrow2_intra(int16 *blk, PIXEL *comp, int width)
+{
+ int32 x0, x1, x2, x4, x5, temp;
+ int i = 8;
+ int offset = width;
+ int32 word;
+
+ comp -= offset;
+ while (i--)
+ {
+ /* shortcut */
+ x4 = blk[1];
+ blk[1] = 0;
+ x0 = ((int32)blk[0] << 8) + 8192;
+ blk[0] = 0; /* for proper rounding in the fourth stage */
+
+ /* first stage */
+ x5 = (W7 * x4 + 4) >> 3;
+ x4 = (W1 * x4 + 4) >> 3;
+
+ /* third stage */
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x1 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ word = ((x0 + x4) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x0 + x2) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+ temp = ((x0 + x1) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+ temp = ((x0 + x5) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp += offset)) = word;
+
+ word = ((x0 - x5) >> 14);
+ CLIP_RESULT(word)
+ temp = ((x0 - x1) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+ temp = ((x0 - x2) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+ temp = ((x0 - x4) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp + 4)) = word;
+
+ blk += B_SIZE;
+ }
+ return ;
+}
+
+void idctrow3_intra(int16 *blk, PIXEL *comp, int width)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8, temp;
+ int i = 8;
+ int offset = width;
+ int32 word;
+
+ comp -= offset;
+
+ while (i--)
+ {
+ x2 = blk[2];
+ blk[2] = 0;
+ x1 = blk[1];
+ blk[1] = 0;
+ x0 = ((int32)blk[0] << 8) + 8192;
+ blk[0] = 0;/* for proper rounding in the fourth stage */
+ /* both upper and lower*/
+ /* both x2orx6 and x0orx4 */
+
+ x4 = x0;
+ x6 = (W6 * x2 + 4) >> 3;
+ x2 = (W2 * x2 + 4) >> 3;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = (W7 * x1 + 4) >> 3;
+ x1 = (W1 * x1 + 4) >> 3;
+ x3 = x7;
+ x5 = (181 * (x1 - x7) + 128) >> 8;
+ x7 = (181 * (x1 + x7) + 128) >> 8;
+
+ word = ((x0 + x1) >> 14);
+ CLIP_RESULT(word)
+ temp = ((x4 + x7) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+
+ temp = ((x6 + x5) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x2 + x3) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp += offset)) = word;
+
+ word = ((x2 - x3) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x6 - x5) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+ temp = ((x4 - x7) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x0 - x1) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp + 4)) = word;
+
+ blk += B_SIZE;
+ }
+ return ;
+}
+
+void idctrow4_intra(int16 *blk, PIXEL *comp, int width)
+{
+ int32 x0, x1, x2, x3, x4, x5, x6, x7, x8, temp;
+ int i = 8;
+ int offset = width;
+ int32 word;
+
+ comp -= offset;
+
+ while (i--)
+ {
+ x2 = blk[2];
+ blk[2] = 0;
+ x1 = blk[1];
+ blk[1] = 0;
+ x3 = blk[3];
+ blk[3] = 0;
+ x0 = ((int32)blk[0] << 8) + 8192;
+ blk[0] = 0;/* for proper rounding in the fourth stage */
+
+ x4 = x0;
+ x6 = (W6 * x2 + 4) >> 3;
+ x2 = (W2 * x2 + 4) >> 3;
+ x8 = x0 - x2;
+ x0 += x2;
+ x2 = x8;
+ x8 = x4 - x6;
+ x4 += x6;
+ x6 = x8;
+
+ x7 = (W7 * x1 + 4) >> 3;
+ x1 = (W1 * x1 + 4) >> 3;
+ x5 = (W3 * x3 + 4) >> 3;
+ x3 = (- W5 * x3 + 4) >> 3;
+ x8 = x1 - x5;
+ x1 += x5;
+ x5 = x8;
+ x8 = x7 - x3;
+ x3 += x7;
+ x7 = (181 * (x5 + x8) + 128) >> 8;
+ x5 = (181 * (x5 - x8) + 128) >> 8;
+
+ word = ((x0 + x1) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x4 + x7) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+
+ temp = ((x6 + x5) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x2 + x3) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp += offset)) = word;
+
+ word = ((x2 - x3) >> 14);
+ CLIP_RESULT(word)
+
+ temp = ((x6 - x5) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 8);
+
+ temp = ((x4 - x7) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 16);
+
+ temp = ((x0 - x1) >> 14);
+ CLIP_RESULT(temp)
+ word = word | (temp << 24);
+ *((int32*)(comp + 4)) = word;
+
+ blk += B_SIZE;
+ }
+
+ return ;
+}
+
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/max_level.h b/media/libstagefright/codecs/m4v_h263/dec/src/max_level.h
new file mode 100644
index 0000000..2d59c73
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/max_level.h
@@ -0,0 +1,149 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+* ------------------------------------------------------------------- *
+* MPEG-4 Simple Profile Video Decoder *
+* ------------------------------------------------------------------- *
+*
+* This software module was originally developed by
+*
+* Michael Wollborn (TUH / ACTS-MoMuSyS)
+*
+* in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
+* This software module is an implementation of a part of one or more MPEG-4
+* Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free
+* license to this software module or modifications thereof for use in hardware
+* or software products claiming conformance to the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* Those intending to use this software module in hardware or software products
+* are advised that its use may infringe existing patents. The original
+* developer of this software module and his/her company, the subsequent
+* editors and their companies, and ISO/IEC have no liability for use of this
+* software module or modifications thereof in an implementation. Copyright is
+* not released for non MPEG-4 Video (ISO/IEC 14496-2) Standard conforming
+* products.
+*
+* ACTS-MoMuSys partners retain full right to use the code for his/her own
+* purpose, assign or donate the code to a third party and to inhibit third
+* parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) Standard
+* conforming products. This copyright notice must be included in all copies or
+* derivative works.
+*
+* Copyright (c) 1997
+*
+*****************************************************************************
+
+This is a header file for "vlc_decode.c". The table data actually resides
+in "vlc_tab.c".
+
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; CONTINUE ONLY IF NOT ALREADY DEFINED
+----------------------------------------------------------------------------*/
+
+#ifndef max_level_H
+#define max_level_H
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4def.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ extern const int intra_max_level[2][NCOEFF_BLOCK];
+
+ extern const int inter_max_level[2][NCOEFF_BLOCK];
+
+ extern const int intra_max_run0[28];
+
+
+ extern const int intra_max_run1[9];
+
+ extern const int inter_max_run0[13];
+
+
+ extern const int inter_max_run1[4];
+
+
+ /*----------------------------------------------------------------------------
+ ; SIMPLE TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; ENUMERATED TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; STRUCTURES TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+
+ /*----------------------------------------------------------------------------
+ ; GLOBAL FUNCTION DEFINITIONS
+ ; Function Prototype declaration
+ ----------------------------------------------------------------------------*/
+
+
+ /*----------------------------------------------------------------------------
+ ; END
+ ----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mb_motion_comp.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/mb_motion_comp.cpp
new file mode 100644
index 0000000..fbc7be1a
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mb_motion_comp.cpp
@@ -0,0 +1,623 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ video = pointer to structure of type VideoDecData
+
+ Local Stores/Buffers/Pointers Needed:
+ roundtab16 = rounding table
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ None
+
+ Pointers and Buffers Modified:
+ video->currVop->yChan contents are the newly calculated luminance
+ data
+ video->currVop->uChan contents are the newly calculated chrominance
+ b data
+ video->currVop->vChan contents are the newly calculated chrominance
+ r data
+ video->pstprcTypCur contents are the updated semaphore propagation
+ values
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This function performs high level motion compensation on the luminance and
+ chrominance data. It sets up all the parameters required by the functions
+ that perform luminance and chrominance prediction and it initializes the
+ pointer to the post processing semaphores of a given block. It also checks
+ the motion compensation mode in order to determine which luminance or
+ chrominance prediction functions to call and determines how the post
+ processing semaphores are updated.
+
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "motion_comp.h"
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+/* 09/29/2000 bring this from mp4def.h */
+// const static int roundtab4[] = {0,1,1,1};
+// const static int roundtab8[] = {0,0,1,1,1,1,1,2};
+/*** 10/30 for TPS */
+// const static int roundtab12[] = {0,0,0,1,1,1,1,1,1,1,2,2};
+/* 10/30 for TPS ***/
+const static int roundtab16[] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
+
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+
+/** modified 3 August 2005 to do prediction and put the results in
+video->mblock->pred_block, no adding with residue */
+
+void MBMotionComp(
+ VideoDecData *video,
+ int CBP
+)
+{
+
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ /* Previous Video Object Plane */
+ Vop *prev = video->prevVop;
+
+ /* Current Macroblock (MB) in the VOP */
+ int mbnum = video->mbnum;
+
+ /* Number of MB per data row */
+ int MB_in_width = video->nMBPerRow;
+ int ypos, xpos;
+ PIXEL *c_comp, *c_prev;
+ PIXEL *cu_comp, *cu_prev;
+ PIXEL *cv_comp, *cv_prev;
+ int height, width, pred_width;
+ int imv, mvwidth;
+ int32 offset;
+ uint8 mode;
+ uint8 *pred_block, *pred;
+
+ /* Motion vector (dx,dy) in half-pel resolution */
+ int dx, dy;
+
+ MOT px[4], py[4];
+ int xpred, ypred;
+ int xsum;
+ int round1;
+#ifdef PV_POSTPROC_ON // 2/14/2001
+ /* Total number of pixels in the VOL */
+ int32 size = (int32) video->nTotalMB << 8;
+ uint8 *pp_dec_y, *pp_dec_u;
+ int ll[4];
+ int tmp = 0;
+ uint8 msk_deblock = 0;
+#endif
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Set rounding type */
+ /* change from array to single 09/29/2000 */
+ round1 = (int)(1 - video->currVop->roundingType);
+
+ /* width of luminance data in pixels (y axis) */
+ width = video->width;
+
+ /* heigth of luminance data in pixels (x axis) */
+ height = video->height;
+
+ /* number of blocks per row */
+ mvwidth = MB_in_width << 1;
+
+ /* starting y position in current MB; origin of MB */
+ ypos = video->mbnum_row << 4 ;
+ /* starting x position in current MB; origin of MB */
+ xpos = video->mbnum_col << 4 ;
+
+ /* offset to (x,y) position in current luminance MB */
+ /* in pixel resolution */
+ /* ypos*width -> row, +x -> column */
+ offset = (int32)ypos * width + xpos;
+
+ /* get mode for current MB */
+ mode = video->headerInfo.Mode[mbnum];
+
+ /* block index */
+ /* imv = (xpos/8) + ((ypos/8) * mvwidth) */
+ imv = (offset >> 6) - (xpos >> 6) + (xpos >> 3);
+ if (mode & INTER_1VMASK)
+ {
+ dx = px[0] = px[1] = px[2] = px[3] = video->motX[imv];
+ dy = py[0] = py[1] = py[2] = py[3] = video->motY[imv];
+ if ((dx & 3) == 0)
+ {
+ dx = dx >> 1;
+ }
+ else
+ {
+ /* x component of MV is or'ed for rounding (?) */
+ dx = (dx >> 1) | 1;
+ }
+
+ /* y component of motion vector; divide by 2 for to */
+ /* convert to full-pel resolution. */
+ if ((dy & 3) == 0)
+ {
+ dy = dy >> 1;
+ }
+ else
+ {
+ /* y component of MV is or'ed for rounding (?) */
+ dy = (dy >> 1) | 1;
+ }
+ }
+ else
+ {
+ px[0] = video->motX[imv];
+ px[1] = video->motX[imv+1];
+ px[2] = video->motX[imv+mvwidth];
+ px[3] = video->motX[imv+mvwidth+1];
+ xsum = px[0] + px[1] + px[2] + px[3];
+ dx = PV_SIGN(xsum) * (roundtab16[(PV_ABS(xsum)) & 0xF] +
+ (((PV_ABS(xsum)) >> 4) << 1));
+ py[0] = video->motY[imv];
+ py[1] = video->motY[imv+1];
+ py[2] = video->motY[imv+mvwidth];
+ py[3] = video->motY[imv+mvwidth+1];
+ xsum = py[0] + py[1] + py[2] + py[3];
+ dy = PV_SIGN(xsum) * (roundtab16[(PV_ABS(xsum)) & 0xF] +
+ (((PV_ABS(xsum)) >> 4) << 1));
+ }
+
+ /* Pointer to previous luminance frame */
+ c_prev = prev->yChan;
+
+ pred_block = video->mblock->pred_block;
+
+ /* some blocks have no residue or INTER4V */
+ /*if (mode == MODE_INTER4V) 05/08/15 */
+ /* Motion Compensation for an 8x8 block within a MB */
+ /* (4 MV per MB) */
+
+
+
+ /* Call function that performs luminance prediction */
+ /* luminance_pred_mode_inter4v(xpos, ypos, px, py, c_prev,
+ video->mblock->pred_block, width, height,
+ round1, mvwidth, &xsum, &ysum);*/
+ c_comp = video->currVop->yChan + offset;
+
+
+ xpred = (int)((xpos << 1) + px[0]);
+ ypred = (int)((ypos << 1) + py[0]);
+
+ if ((CBP >> 5)&1)
+ {
+ pred = pred_block;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = c_comp;
+ pred_width = width;
+ }
+
+ /* check whether the MV points outside the frame */
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*B_SIZE)) &&
+ ypred >= 0 && ypred <= ((height << 1) - (2*B_SIZE)))
+ { /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+ ;
+ GetPredAdvBTable[ypred&1][xpred&1](c_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+ }
+ else
+ { /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+ GetPredOutside(xpred, ypred, c_prev,
+ pred, width, height, round1, pred_width);
+ }
+
+
+ /* Compute prediction values over current luminance MB */
+ /* (blocks 1); add motion vector prior to input; */
+ /* add 8 to x_pos to advance to next block */
+ xpred = (int)(((xpos + B_SIZE) << 1) + px[1]);
+ ypred = (int)((ypos << 1) + py[1]);
+
+ if ((CBP >> 4)&1)
+ {
+ pred = pred_block + 8;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = c_comp + 8;
+ pred_width = width;
+ }
+
+ /* check whether the MV points outside the frame */
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*B_SIZE)) &&
+ ypred >= 0 && ypred <= ((height << 1) - (2*B_SIZE)))
+ { /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+ GetPredAdvBTable[ypred&1][xpred&1](c_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+ }
+ else
+ { /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+ GetPredOutside(xpred, ypred, c_prev,
+ pred, width, height, round1, pred_width);
+ }
+
+
+
+ /* Compute prediction values over current luminance MB */
+ /* (blocks 2); add motion vector prior to input */
+ /* add 8 to y_pos to advance to block on next row */
+ xpred = (int)((xpos << 1) + px[2]);
+ ypred = (int)(((ypos + B_SIZE) << 1) + py[2]);
+
+ if ((CBP >> 3)&1)
+ {
+ pred = pred_block + 128;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = c_comp + (width << 3);
+ pred_width = width;
+ }
+
+ /* check whether the MV points outside the frame */
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*B_SIZE)) &&
+ ypred >= 0 && ypred <= ((height << 1) - (2*B_SIZE)))
+ { /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+ GetPredAdvBTable[ypred&1][xpred&1](c_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+ }
+ else
+ { /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+ GetPredOutside(xpred, ypred, c_prev,
+ pred, width, height, round1, pred_width);
+ }
+
+
+
+ /* Compute prediction values over current luminance MB */
+ /* (blocks 3); add motion vector prior to input; */
+ /* add 8 to x_pos and y_pos to advance to next block */
+ /* on next row */
+ xpred = (int)(((xpos + B_SIZE) << 1) + px[3]);
+ ypred = (int)(((ypos + B_SIZE) << 1) + py[3]);
+
+ if ((CBP >> 2)&1)
+ {
+ pred = pred_block + 136;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = c_comp + (width << 3) + 8;
+ pred_width = width;
+ }
+
+ /* check whether the MV points outside the frame */
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*B_SIZE)) &&
+ ypred >= 0 && ypred <= ((height << 1) - (2*B_SIZE)))
+ { /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+ GetPredAdvBTable[ypred&1][xpred&1](c_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+ }
+ else
+ { /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+ GetPredOutside(xpred, ypred, c_prev,
+ pred, width, height, round1, pred_width);
+ }
+ /* Call function to set de-blocking and de-ringing */
+ /* semaphores for luminance */
+
+#ifdef PV_POSTPROC_ON
+ if (video->postFilterType != PV_NO_POST_PROC)
+ {
+ if (mode&INTER_1VMASK)
+ {
+ pp_dec_y = video->pstprcTypCur + imv;
+ ll[0] = 1;
+ ll[1] = mvwidth - 1;
+ ll[2] = 1;
+ ll[3] = -mvwidth - 1;
+ msk_deblock = pp_semaphore_luma(xpred, ypred, pp_dec_y,
+ video->pstprcTypPrv, ll, &tmp, px[0], py[0], mvwidth,
+ width, height);
+
+ pp_dec_u = video->pstprcTypCur + (size >> 6) +
+ ((imv + (xpos >> 3)) >> 2);
+
+ pp_semaphore_chroma_inter(xpred, ypred, pp_dec_u,
+ video->pstprcTypPrv, dx, dy, mvwidth, height, size,
+ tmp, msk_deblock);
+ }
+ else
+ {
+ /* Post-processing mode (MBM_INTER8) */
+ /* deblocking and deringing) */
+ pp_dec_y = video->pstprcTypCur + imv;
+ *pp_dec_y = 4;
+ *(pp_dec_y + 1) = 4;
+ *(pp_dec_y + mvwidth) = 4;
+ *(pp_dec_y + mvwidth + 1) = 4;
+ pp_dec_u = video->pstprcTypCur + (size >> 6) +
+ ((imv + (xpos >> 3)) >> 2);
+ *pp_dec_u = 4;
+ pp_dec_u[size>>8] = 4;
+ }
+ }
+#endif
+
+
+ /* xpred and ypred calculation for Chrominance is */
+ /* in full-pel resolution. */
+
+ /* Chrominance */
+ /* width of chrominance data in pixels (y axis) */
+ width >>= 1;
+
+ /* heigth of chrominance data in pixels (x axis) */
+ height >>= 1;
+
+ /* Pointer to previous chrominance b frame */
+ cu_prev = prev->uChan;
+
+ /* Pointer to previous chrominance r frame */
+ cv_prev = prev->vChan;
+
+ /* x position in prediction data offset by motion vector */
+ /* xpred calculation for Chrominance is in full-pel */
+ /* resolution. */
+ xpred = xpos + dx;
+
+ /* y position in prediction data offset by motion vector */
+ /* ypred calculation for Chrominance is in full-pel */
+ /* resolution. */
+ ypred = ypos + dy;
+
+ cu_comp = video->currVop->uChan + (offset >> 2) + (xpos >> 2);
+ cv_comp = video->currVop->vChan + (offset >> 2) + (xpos >> 2);
+
+ /* Call function that performs chrominance prediction */
+ /* chrominance_pred(xpred, ypred, cu_prev, cv_prev,
+ pred_block, width_uv, height_uv,
+ round1);*/
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*B_SIZE)) && ypred >= 0 &&
+ ypred <= ((height << 1) - (2*B_SIZE)))
+ {
+ /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+ if ((CBP >> 1)&1)
+ {
+ pred = pred_block + 256;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = cu_comp;
+ pred_width = width;
+ }
+
+ /* Compute prediction for Chrominance b (block[4]) */
+ GetPredAdvBTable[ypred&1][xpred&1](cu_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+
+ if (CBP&1)
+ {
+ pred = pred_block + 264;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = cv_comp;
+ pred_width = width;
+ }
+ /* Compute prediction for Chrominance r (block[5]) */
+ GetPredAdvBTable[ypred&1][xpred&1](cv_prev + (xpred >> 1) + ((ypred >> 1)*width),
+ pred, width, (pred_width << 1) | round1);
+
+ return ;
+ }
+ else
+ {
+ /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+ if ((CBP >> 1)&1)
+ {
+ pred = pred_block + 256;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = cu_comp;
+ pred_width = width;
+ }
+
+ /* Compute prediction for Chrominance b (block[4]) */
+ GetPredOutside(xpred, ypred, cu_prev,
+ pred, width, height, round1, pred_width);
+
+ if (CBP&1)
+ {
+ pred = pred_block + 264;
+ pred_width = 16;
+ }
+ else
+ {
+ pred = cv_comp;
+ pred_width = width;
+ }
+
+ /* Compute prediction for Chrominance r (block[5]) */
+ GetPredOutside(xpred, ypred, cv_prev,
+ pred, width, height, round1, pred_width);
+
+ return ;
+ }
+
+}
+
+/*** special function for skipped macroblock, Aug 15, 2005 */
+void SkippedMBMotionComp(
+ VideoDecData *video
+)
+{
+ Vop *prev = video->prevVop;
+ Vop *comp;
+ int ypos, xpos;
+ PIXEL *c_comp, *c_prev;
+ PIXEL *cu_comp, *cu_prev;
+ PIXEL *cv_comp, *cv_prev;
+ int width, width_uv;
+ int32 offset;
+#ifdef PV_POSTPROC_ON // 2/14/2001
+ int imv;
+ int32 size = (int32) video->nTotalMB << 8;
+ uint8 *pp_dec_y, *pp_dec_u;
+ uint8 *pp_prev1;
+ int mvwidth = video->nMBPerRow << 1;
+#endif
+
+ width = video->width;
+ width_uv = width >> 1;
+ ypos = video->mbnum_row << 4 ;
+ xpos = video->mbnum_col << 4 ;
+ offset = (int32)ypos * width + xpos;
+
+
+ /* zero motion compensation for previous frame */
+ /*mby*width + mbx;*/
+ c_prev = prev->yChan + offset;
+ /*by*width_uv + bx;*/
+ cu_prev = prev->uChan + (offset >> 2) + (xpos >> 2);
+ /*by*width_uv + bx;*/
+ cv_prev = prev->vChan + (offset >> 2) + (xpos >> 2);
+
+ comp = video->currVop;
+
+ c_comp = comp->yChan + offset;
+ cu_comp = comp->uChan + (offset >> 2) + (xpos >> 2);
+ cv_comp = comp->vChan + (offset >> 2) + (xpos >> 2);
+
+
+ /* Copy previous reconstructed frame into the current frame */
+ PutSKIPPED_MB(c_comp, c_prev, width);
+ PutSKIPPED_B(cu_comp, cu_prev, width_uv);
+ PutSKIPPED_B(cv_comp, cv_prev, width_uv);
+
+ /* 10/24/2000 post_processing semaphore generation */
+#ifdef PV_POSTPROC_ON // 2/14/2001
+ if (video->postFilterType != PV_NO_POST_PROC)
+ {
+ imv = (offset >> 6) - (xpos >> 6) + (xpos >> 3);
+ /* Post-processing mode (copy previous MB) */
+ pp_prev1 = video->pstprcTypPrv + imv;
+ pp_dec_y = video->pstprcTypCur + imv;
+ *pp_dec_y = *pp_prev1;
+ *(pp_dec_y + 1) = *(pp_prev1 + 1);
+ *(pp_dec_y + mvwidth) = *(pp_prev1 + mvwidth);
+ *(pp_dec_y + mvwidth + 1) = *(pp_prev1 + mvwidth + 1);
+
+ /* chrominance */
+ /*4*MB_in_width*MB_in_height*/
+ pp_prev1 = video->pstprcTypPrv + (size >> 6) +
+ ((imv + (xpos >> 3)) >> 2);
+ pp_dec_u = video->pstprcTypCur + (size >> 6) +
+ ((imv + (xpos >> 3)) >> 2);
+ *pp_dec_u = *pp_prev1;
+ pp_dec_u[size>>8] = pp_prev1[size>>8];
+ }
+#endif
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+
+ return;
+}
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mb_utils.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/mb_utils.cpp
new file mode 100644
index 0000000..25a31b7
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mb_utils.cpp
@@ -0,0 +1,133 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+
+/* ====================================================================== /
+ Function : PutSKIPPED_MB()
+ Date : 04/03/2000
+/ ====================================================================== */
+
+void PutSKIPPED_MB(uint8 *comp, uint8 *prev, int width)
+{
+ int32 *temp0, *temp1;
+ int row;
+ row = MB_SIZE;
+
+
+ while (row)
+ {
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+ temp1[2] = temp0[2];
+ temp1[3] = temp0[3];
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+ temp1[2] = temp0[2];
+ temp1[3] = temp0[3];
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+ temp1[2] = temp0[2];
+ temp1[3] = temp0[3];
+
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+ temp1[2] = temp0[2];
+ temp1[3] = temp0[3];
+
+ comp += width;
+ prev += width;
+ row -= 4;
+ }
+}
+
+
+/* ====================================================================== /
+ Function : PutSKIPPED_B()
+ Date : 04/03/2000
+/ ====================================================================== */
+
+void PutSKIPPED_B(uint8 *comp, uint8 *prev, int width)
+{
+ int32 *temp0, *temp1;
+ int row;
+
+ row = B_SIZE;
+ while (row)
+ {
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+
+ comp += width;
+ prev += width;
+
+ temp0 = (int32 *)prev;
+ temp1 = (int32 *)comp;
+
+ temp1[0] = temp0[0];
+ temp1[1] = temp0[1];
+
+ comp += width;
+ prev += width;
+ row -= 4;
+ }
+}
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mbtype_mode.h b/media/libstagefright/codecs/m4v_h263/dec/src/mbtype_mode.h
new file mode 100644
index 0000000..c45bb5f
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mbtype_mode.h
@@ -0,0 +1,37 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+const static int MBtype_mode[] =
+{
+ MODE_INTER,
+ MODE_INTER_Q,
+ MODE_INTER4V,
+ MODE_INTRA,
+ MODE_INTRA_Q,
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ MODE_INTER4V_Q,
+#endif
+ MODE_SKIPPED
+};
+#ifdef PV_ANNEX_IJKT_SUPPORT
+const static int16 DQ_tab_Annex_T_10[32] = {0, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3};
+const static int16 DQ_tab_Annex_T_11[32] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, -5};
+const static int16 MQ_chroma_QP_table[32] = {0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13,
+ 14, 14, 14, 14, 14, 15, 15, 15, 15, 15
+ };
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/motion_comp.h b/media/libstagefright/codecs/m4v_h263/dec/src/motion_comp.h
new file mode 100644
index 0000000..0c12f20
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/motion_comp.h
@@ -0,0 +1,108 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef motion_comp_h
+#define motion_comp_h
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+/* CBP Mask defines used in chrominance prediction */
+#define CBP_MASK_CHROMA_BLK4 0x2
+#define CBP_MASK_CHROMA_BLK5 0x1
+
+/* CBP Mask defines used in luminance prediction (MODE_INTER4V) */
+#define CBP_MASK_BLK0_MODE_INTER4V 0x20
+#define CBP_MASK_BLK1_MODE_INTER4V 0x10
+#define CBP_MASK_BLK2_MODE_INTER4V 0x08
+#define CBP_MASK_BLK3_MODE_INTER4V 0x04
+
+/* CBP Mask defines used in luminance prediction (MODE_INTER or MODE_INTER_Q) */
+#define CBP_MASK_MB_MODE_INTER 0x3c
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define CLIP_RESULT(x) if(x & -256){x = 0xFF & (~(x>>31));}
+#define ADD_AND_CLIP1(x) x += (pred_word&0xFF); CLIP_RESULT(x);
+#define ADD_AND_CLIP2(x) x += ((pred_word>>8)&0xFF); CLIP_RESULT(x);
+#define ADD_AND_CLIP3(x) x += ((pred_word>>16)&0xFF); CLIP_RESULT(x);
+#define ADD_AND_CLIP4(x) x += ((pred_word>>24)&0xFF); CLIP_RESULT(x);
+
+#define ADD_AND_CLIP(x,y) { x9 = ~(x>>8); \
+ if(x9!=-1){ \
+ x9 = ((uint32)x9)>>24; \
+ y = x9|(y<<8); \
+ } \
+ else \
+ { \
+ y = x|(y<<8); \
+ } \
+ }
+
+
+ static int (*const GetPredAdvBTable[2][2])(uint8*, uint8*, int, int) =
+ {
+ {&GetPredAdvancedBy0x0, &GetPredAdvancedBy0x1},
+ {&GetPredAdvancedBy1x0, &GetPredAdvancedBy1x1}
+ };
+
+ /*----------------------------------------------------------------------------
+ ; SIMPLE TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; ENUMERATED TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; STRUCTURES TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; GLOBAL FUNCTION DEFINITIONS
+ ; Function Prototype declaration
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; END
+ ----------------------------------------------------------------------------*/
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mp4dec_lib.h b/media/libstagefright/codecs/m4v_h263/dec/src/mp4dec_lib.h
new file mode 100644
index 0000000..9cd4edc
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mp4dec_lib.h
@@ -0,0 +1,334 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef _MP4DECLIB_H_
+#define _MP4DECLIB_H_
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4def.h" /* typedef */
+#include "mp4lib_int.h" /* main video structure */
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; SIMPLE TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; ENUMERATED TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; STRUCTURES TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; GLOBAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+ /* defined in pvdec_api.c, these function are not supposed to be */
+ /* exposed to programmers outside PacketVideo. 08/15/2000. */
+ uint VideoDecoderErrorDetected(VideoDecData *video);
+
+#ifdef ENABLE_LOG
+ void m4vdec_dprintf(char *format, ...);
+#define mp4dec_log(message) m4vdec_dprintf(message)
+#else
+#define mp4dec_log(message)
+#endif
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in frame_buffer.c */
+ PV_STATUS FillFrameBufferNew(BitstreamDecVideo *stream);
+ PV_STATUS FillFrameBuffer(BitstreamDecVideo *stream, int short_header);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in dc_ac_pred.c */
+ int cal_dc_scaler(int QP, int type);
+ PV_STATUS PV_DecodePredictedIntraDC(int compnum, BitstreamDecVideo *stream,
+ int16 *IntraDC_delta);
+
+ void doDCACPrediction(VideoDecData *video, int comp, int16 *q_block,
+ int *direction);
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ void doDCACPrediction_I(VideoDecData *video, int comp, int16 *q_block);
+#endif
+ /*--------------------------------------------------------------------------*/
+ /* defined in block_idct.c */
+ void MBlockIDCTAdd(VideoDecData *video, int nz_coefs[]);
+
+ void BlockIDCT(uint8 *dst, uint8 *pred, int16 *blk, int width, int nzcoefs,
+ uint8 *bitmapcol, uint8 bitmaprow);
+
+ void MBlockIDCT(VideoDecData *video);
+ void BlockIDCT_intra(MacroBlock *mblock, PIXEL *c_comp, int comp, int width_offset);
+ /*--------------------------------------------------------------------------*/
+ /* defined in combined_decode.c */
+ PV_STATUS DecodeFrameCombinedMode(VideoDecData *video);
+ PV_STATUS GetMBheader(VideoDecData *video, int16 *QP);
+ PV_STATUS GetMBData(VideoDecData *video);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in datapart_decode.c */
+ PV_STATUS DecodeFrameDataPartMode(VideoDecData *video);
+ PV_STATUS GetMBheaderDataPart_DQUANT_DC(VideoDecData *video, int16 *QP);
+ PV_STATUS GetMBheaderDataPart_P(VideoDecData *video);
+ PV_STATUS DecodeDataPart_I_VideoPacket(VideoDecData *video, int slice_counter);
+ PV_STATUS DecodeDataPart_P_VideoPacket(VideoDecData *video, int slice_counter);
+ PV_STATUS GetMBData_DataPart(VideoDecData *video);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in packet_util.c */
+ PV_STATUS PV_ReadVideoPacketHeader(VideoDecData *video, int *next_MB);
+ PV_STATUS RecoverPacketError(BitstreamDecVideo *stream, int marker_length, int32 *nextVop);
+ PV_STATUS RecoverGOBError(BitstreamDecVideo *stream, int marker_length, int32 *vopPos);
+ PV_STATUS PV_GobHeader(VideoDecData *video);
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ PV_STATUS PV_H263SliceHeader(VideoDecData *videoInt, int *next_MB);
+#endif
+ /*--------------------------------------------------------------------------*/
+ /* defined in motion_comp.c */
+ void MBMotionComp(VideoDecData *video, int CBP);
+ void SkippedMBMotionComp(VideoDecData *video);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in chrominance_pred.c */
+ void chrominance_pred(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *cu_prev, /* i */
+ uint8 *cv_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width_uv, /* i */
+ int height_uv, /* i */
+ int round1
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in luminance_pred_mode_inter.c */
+ void luminance_pred_mode_inter(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int height, /* i */
+ int round1
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in luminance_pred_mode_inter4v.c */
+ void luminance_pred_mode_inter4v(
+ int xpos, /* i */
+ int ypos, /* i */
+ MOT *px, /* i */
+ MOT *py, /* i */
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int height, /* i */
+ int round1, /* i */
+ int mvwidth, /* i */
+ int *xsum_ptr, /* i/o */
+ int *ysum_ptr /* i/o */
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in pp_semaphore_chroma_inter.c */
+#ifdef PV_POSTPROC_ON
+ void pp_semaphore_chroma_inter(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *pp_dec_u, /* i/o */
+ uint8 *pstprcTypPrv, /* i */
+ int dx, /* i */
+ int dy, /* i */
+ int mvwidth, /* i */
+ int height, /* i */
+ int32 size, /* i */
+ int mv_loc, /* i */
+ uint8 msk_deblock /* i */
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in pp_semaphore_luma.c */
+ uint8 pp_semaphore_luma(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *pp_dec_y, /* i/o */
+ uint8 *pstprcTypPrv, /* i */
+ int *ll, /* i */
+ int *mv_loc, /* i/o */
+ int dx, /* i */
+ int dy, /* i */
+ int mvwidth, /* i */
+ int width, /* i */
+ int height /* i */
+ );
+#endif
+ /*--------------------------------------------------------------------------*/
+ /* defined in get_pred_adv_mb_add.c */
+ int GetPredAdvancedMB(
+ int xpos,
+ int ypos,
+ uint8 *c_prev,
+ uint8 *pred_block,
+ int width,
+ int rnd1
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in get_pred_adv_b_add.c */
+ int GetPredAdvancedBy0x0(
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+ );
+
+ int GetPredAdvancedBy0x1(
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+ );
+
+ int GetPredAdvancedBy1x0(
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+ );
+
+ int GetPredAdvancedBy1x1(
+ uint8 *c_prev, /* i */
+ uint8 *pred_block, /* i */
+ int width, /* i */
+ int pred_width_rnd /* i */
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in get_pred_outside.c */
+ int GetPredOutside(
+ int xpos,
+ int ypos,
+ uint8 *c_prev,
+ uint8 *pred_block,
+ int width,
+ int height,
+ int rnd1,
+ int pred_width
+ );
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in find_pmvsErrRes.c */
+ void mv_prediction(VideoDecData *video, int block, MOT *mvx, MOT *mvy);
+
+ /*--------------------------------------------------------------------------*/
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in mb_utils.c */
+ void Copy_MB_into_Vop(uint8 *comp, int yChan[][NCOEFF_BLOCK], int width);
+ void Copy_B_into_Vop(uint8 *comp, int cChan[], int width);
+ void PutSKIPPED_MB(uint8 *comp, uint8 *c_prev, int width);
+ void PutSKIPPED_B(uint8 *comp, uint8 *c_prev, int width);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in vop.c */
+ PV_STATUS DecodeGOVHeader(BitstreamDecVideo *stream, uint32 *time_base);
+ PV_STATUS DecodeVOLHeader(VideoDecData *video, int layer);
+ PV_STATUS DecodeVOPHeader(VideoDecData *video, Vop *currVop, Bool use_ext_tiemstamp);
+ PV_STATUS DecodeShortHeader(VideoDecData *video, Vop *currVop);
+ PV_STATUS PV_DecodeVop(VideoDecData *video);
+ uint32 CalcVopDisplayTime(Vol *currVol, Vop *currVop, int shortVideoHeader);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in post_proc.c */
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ void H263_Deblock(uint8 *rec, int width, int height, int16 *QP_store, uint8 *mode, int chr, int T);
+#endif
+ int PostProcSemaphore(int16 *q_block);
+ void PostFilter(VideoDecData *video, int filer_type, uint8 *output);
+ void FindMaxMin(uint8 *ptr, int *min, int *max, int incr);
+ void DeringAdaptiveSmoothMMX(uint8 *img, int incr, int thres, int mxdf);
+ void AdaptiveSmooth_NoMMX(uint8 *Rec_Y, int v0, int h0, int v_blk, int h_blk,
+ int thr, int width, int max_diff);
+ void Deringing_Luma(uint8 *Rec_Y, int width, int height, int16 *QP_store,
+ int Combined, uint8 *pp_mod);
+ void Deringing_Chroma(uint8 *Rec_C, int width, int height, int16 *QP_store,
+ int Combined, uint8 *pp_mod);
+ void CombinedHorzVertFilter(uint8 *rec, int width, int height, int16 *QP_store,
+ int chr, uint8 *pp_mod);
+ void CombinedHorzVertFilter_NoSoftDeblocking(uint8 *rec, int width, int height, int16 *QP_store,
+ int chr, uint8 *pp_mod);
+ void CombinedHorzVertRingFilter(uint8 *rec, int width, int height,
+ int16 *QP_store, int chr, uint8 *pp_mod);
+
+ /*--------------------------------------------------------------------------*/
+ /* defined in conceal.c */
+ void ConcealTexture_I(VideoDecData *video, int32 startFirstPartition, int mb_start, int mb_stop,
+ int slice_counter);
+ void ConcealTexture_P(VideoDecData *video, int mb_start, int mb_stop,
+ int slice_counter);
+ void ConcealPacket(VideoDecData *video, int mb_start, int mb_stop,
+ int slice_counter);
+ void CopyVopMB(Vop *curr, uint8 *prev, int mbnum, int width, int height);
+
+ /* define in vlc_dequant.c , 09/18/2000*/
+#ifdef PV_SUPPORT_MAIN_PROFILE
+ int VlcDequantMpegIntraBlock(void *video, int comp, int switched,
+ uint8 *bitmapcol, uint8 *bitmaprow);
+ int VlcDequantMpegInterBlock(void *video, int comp,
+ uint8 *bitmapcol, uint8 *bitmaprow);
+#endif
+ int VlcDequantH263IntraBlock(VideoDecData *video, int comp, int switched,
+ uint8 *bitmapcol, uint8 *bitmaprow);
+ int VlcDequantH263IntraBlock_SH(VideoDecData *video, int comp,
+ uint8 *bitmapcol, uint8 *bitmaprow);
+ int VlcDequantH263InterBlock(VideoDecData *video, int comp,
+ uint8 *bitmapcol, uint8 *bitmaprow);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/*----------------------------------------------------------------------------
+; END
+----------------------------------------------------------------------------*/
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mp4def.h b/media/libstagefright/codecs/m4v_h263/dec/src/mp4def.h
new file mode 100644
index 0000000..3388d89
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mp4def.h
@@ -0,0 +1,167 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef _PVDECDEF_H_
+#define _PVDECDEF_H_
+
+#include "mp4dec_api.h"
+
+typedef enum
+{
+ PV_SUCCESS,
+ PV_FAIL,
+ PV_MB_STUFFING, /* hit Macroblock_Stuffing */
+ PV_END_OF_VOP, /* hit End_of_Video_Object_Plane */
+ PV_END_OF_MB /* hit End_of_Macroblock */
+#ifdef PV_TOLERATE_VOL_ERRORS
+ , PV_BAD_VOLHEADER
+#endif
+} PV_STATUS;
+
+typedef uint8 PIXEL;
+typedef int16 MOT; /* : "int" type runs faster on RISC machine */
+
+#define TRUE 1
+#define FALSE 0
+
+#define PV_ABS(x) (((x)<0)? -(x) : (x))
+#define PV_SIGN(x) (((x)<0)? -1 : 1)
+#define PV_SIGN0(a) (((a)<0)? -1 : (((a)>0) ? 1 : 0))
+#define PV_MAX(a,b) ((a)>(b)? (a):(b))
+#define PV_MIN(a,b) ((a)<(b)? (a):(b))
+#define PV_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A))
+/* You don't want to use ((x>UB)?UB:(x<LB)?LB:x) for the clipping */
+/* because it will use one extra comparison if the compiler is */
+/* not well-optimized. 04/19/2000. */
+#define CLIP_THE_RANGE(x,LB,UB) if (x<LB) x = LB; else if (x>UB) x = UB
+
+#define MODE_INTRA 0x08 //01000
+#define MODE_INTRA_Q 0x09 //01001
+#define MODE_SKIPPED 0x10 //10000
+#define MODE_INTER4V 0x14 //10100
+#define MODE_INTER 0x16 //10110
+#define MODE_INTER_Q 0x17 //10111
+#define MODE_INTER4V_Q 0x15 //10101
+#define INTER_1VMASK 0x2
+#define Q_MASK 0x1
+#define INTRA_MASK 0x8
+#define INTER_MASK 0x4
+
+
+#define I_VOP 0
+#define P_VOP 1
+#define B_VOP 2
+
+#define LUMINANCE_DC_TYPE 1
+#define CHROMINANCE_DC_TYPE 2
+
+#define START_CODE_LENGTH 32
+
+/* 11/30/98 */
+#define NoMarkerFound -1
+#define FoundRM 1 /* Resync Marker */
+#define FoundVSC 2 /* VOP_START_CODE. */
+#define FoundGSC 3 /* GROUP_START_CODE */
+#define FoundEOB 4 /* EOB_CODE */
+
+/* PacketVideo "absolution timestamp" object. 06/13/2000 */
+#define PVTS_START_CODE 0x01C4
+#define PVTS_START_CODE_LENGTH 32
+
+/* session layer and vop layer start codes */
+
+#define VISUAL_OBJECT_SEQUENCE_START_CODE 0x01B0
+#define VISUAL_OBJECT_SEQUENCE_END_CODE 0x01B1
+
+#define VISUAL_OBJECT_START_CODE 0x01B5
+#define VO_START_CODE 0x8
+#define VO_HEADER_LENGTH 32 /* lengtho of VO header: VO_START_CODE + VO_ID */
+
+#define SOL_START_CODE 0x01BE
+#define SOL_START_CODE_LENGTH 32
+
+#define VOL_START_CODE 0x12
+#define VOL_START_CODE_LENGTH 28
+
+#define VOP_START_CODE 0x1B6
+#define VOP_START_CODE_LENGTH 32
+
+#define GROUP_START_CODE 0x01B3
+#define GROUP_START_CODE_LENGTH 32
+
+#define VOP_ID_CODE_LENGTH 5
+#define VOP_TEMP_REF_CODE_LENGTH 16
+
+#define USER_DATA_START_CODE 0x01B2
+#define USER_DATA_START_CODE_LENGTH 32
+
+#define START_CODE_PREFIX 0x01
+#define START_CODE_PREFIX_LENGTH 24
+
+#define SHORT_VIDEO_START_MARKER 0x20
+#define SHORT_VIDEO_START_MARKER_LENGTH 22
+#define SHORT_VIDEO_END_MARKER 0x3F
+#define GOB_RESYNC_MARKER 0x01
+#define GOB_RESYNC_MARKER_LENGTH 17
+
+/* motion and resync markers used in error resilient mode */
+
+#define DC_MARKER 438273
+#define DC_MARKER_LENGTH 19
+
+#define MOTION_MARKER_COMB 126977
+#define MOTION_MARKER_COMB_LENGTH 17
+
+#define MOTION_MARKER_SEP 81921
+#define MOTION_MARKER_SEP_LENGTH 17
+
+#define RESYNC_MARKER 1
+#define RESYNC_MARKER_LENGTH 17
+
+#define SPRITE_NOT_USED 0
+#define STATIC_SPRITE 1
+#define ONLINE_SPRITE 2
+#define GMC_SPRITE 3
+
+/* macroblock and block size */
+#define MB_SIZE 16
+#define NCOEFF_MB (MB_SIZE*MB_SIZE)
+#define B_SIZE 8
+#define NCOEFF_BLOCK (B_SIZE*B_SIZE)
+#define NCOEFF_Y NCOEFF_MB
+#define NCOEFF_U NCOEFF_BLOCK
+#define NCOEFF_V NCOEFF_BLOCK
+#define BLK_PER_MB 4 /* Number of blocks per MB */
+
+/* VLC decoding related definitions */
+#define VLC_ERROR (-1)
+#define VLC_ESCAPE 7167
+
+
+/* macro utility */
+#define ZERO_OUT_64BYTES(x) { *((uint32*)x) = *(((uint32*)(x))+1) = \
+ *(((uint32*)(x))+2) = *(((uint32*)(x))+3) = \
+ *(((uint32*)(x))+4) = *(((uint32*)(x))+5) = \
+ *(((uint32*)(x))+6) = *(((uint32*)(x))+7) = \
+ *(((uint32*)(x))+8) = *(((uint32*)(x))+9) = \
+ *(((uint32*)(x))+10) = *(((uint32*)(x))+11) = \
+ *(((uint32*)(x))+12) = *(((uint32*)(x))+13) = \
+ *(((uint32*)(x))+14) = *(((uint32*)(x))+15) = 0; }
+
+
+
+#endif /* _PVDECDEF_H_ */
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/mp4lib_int.h b/media/libstagefright/codecs/m4v_h263/dec/src/mp4lib_int.h
new file mode 100644
index 0000000..d6754a7
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/mp4lib_int.h
@@ -0,0 +1,296 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef _MP4LIB_INT_H_
+#define _MP4LIB_INT_H_
+
+#include "mp4def.h"
+#include "mp4dec_api.h" // extra structure
+
+#undef ENABLE_LOG
+#define BITRATE_AVERAGE_WINDOW 4
+#define FRAMERATE_SCALE ((BITRATE_AVERAGE_WINDOW-1)*10000L)
+#define FAST_IDCT /* , for fast Variable complexity IDCT */
+//#define PV_DEC_EXTERNAL_IDCT /* for separate IDCT (i.e. no direct access to output frame) */
+#define PV_ANNEX_IJKT_SUPPORT
+#define mid_gray 1024
+
+typedef struct tagBitstream
+{
+ /* function that reteive data from outside the library. 04/11/2000 */
+ /* In frame-based decoding mode, this shall be NULL. 08/29/2000 */
+ uint32 curr_word;
+ uint32 next_word;
+ uint8 *bitstreamBuffer; /* pointer to buffer memory */
+ int32 read_point; /* starting point in the buffer to be read to cache */
+ int incnt; /* bit left in cached */
+ int incnt_next;
+ uint32 bitcnt; /* total bit read so-far (from inbfr)*/
+ int32 data_end_pos; /*should be added , 06/07/2000 */
+ int searched_frame_boundary;
+} BitstreamDecVideo, *LPBitstreamDecVideo;
+
+/* complexity estimation parameters */
+typedef struct tagComplexity_Est
+{
+ uint8 text_1; /* texture_complexity_estimation_set_1 */
+ uint8 text_2; /* texture_complexity_estimation_set_2 */
+ uint8 mc; /* motion_compensation_complexity */
+} Complexity_Est;
+
+
+typedef struct tagVop
+{
+ PIXEL *yChan; /* The Y component */
+ PIXEL *uChan; /* The U component */
+ PIXEL *vChan; /* The V component */
+
+ uint32 timeStamp; /* Vop TimeStamp in msec */
+
+ /* Actual syntax elements for VOP (standard) */
+ int predictionType; /* VOP prediction type */
+ uint timeInc; /* VOP time increment (relative to last mtb) */
+ int vopCoded;
+ int roundingType;
+ int intraDCVlcThr;
+ int16 quantizer; /* VOP quantizer */
+ int fcodeForward; /* VOP dynamic range of motion vectors */
+ int fcodeBackward; /* VOP dynamic range of motion vectors */
+ int refSelectCode; /* enhancement layer reference select code */
+
+ /* H.263 parameters */
+ int gobNumber;
+ int gobFrameID;
+ int temporalRef; /* temporal reference, roll over at 256 */
+ int ETR;
+} Vop;
+
+typedef struct tagVol
+{
+ int volID; /* VOL identifier (for tracking) */
+ uint timeIncrementResolution;/* VOL time increment */
+ int nbitsTimeIncRes; /* number of bits for time increment */
+ uint timeInc_offset; /* timeInc offset for multiple VOP in a packet */
+ uint32 moduloTimeBase; /* internal decoder clock */
+ int fixedVopRate;
+ BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */
+
+ int complexity_estDisable; /* VOL disable complexity estimation */
+ int complexity_estMethod; /* VOL complexity estimation method */
+ Complexity_Est complexity; /* complexity estimation flags */
+
+ /* Error Resilience Flags */
+ int errorResDisable; /* VOL disable error resilence mode */
+ /* (Use Resynch markers) */
+ int useReverseVLC; /* VOL reversible VLCs */
+ int dataPartitioning; /* VOL data partitioning */
+
+ /* Bit depth */
+ uint bitsPerPixel;
+// int mid_gray; /* 2^(bits_per_pixel+2) */
+
+ /* Quantization related parameters */
+ int quantPrecision; /* Quantizer precision */
+ uint quantType; /* MPEG-4 or H.263 Quantization Type */
+ /* Added loaded quant mat, 05/22/2000 */
+ int loadIntraQuantMat; /* Load intra quantization matrix */
+ int loadNonIntraQuantMat; /* Load nonintra quantization matrix */
+ int iqmat[64]; /* Intra quant.matrix */
+ int niqmat[64]; /* Non-intra quant.matrix */
+
+ /* Parameters used for scalability */
+ int scalability; /* VOL scalability (flag) */
+ int scalType; /* temporal = 0, spatial = 1, both = 2 */
+
+ int refVolID; /* VOL id of reference VOL */
+ int refSampDir; /* VOL resol. of ref. VOL */
+ int horSamp_n; /* VOL hor. resampling of ref. VOL given by */
+ int horSamp_m; /* sampfac = hor_samp_n/hor_samp_m */
+ int verSamp_n; /* VOL ver. resampling of ref. VOL given by */
+ int verSamp_m; /* sampfac = ver_samp_n/ver_samp_m */
+ int enhancementType; /* VOL type of enhancement layer */
+ /* profile and level */
+ int32 profile_level_id; /* 8-bit profile and level */ // 6/17/04
+
+} Vol;
+
+
+typedef int16 typeMBStore[6][NCOEFF_BLOCK];
+
+typedef struct tagMacroBlock
+{
+ typeMBStore block; /* blocks */ /* ACDC */
+ uint8 pred_block[384]; /* prediction block, Aug 3,2005 */
+ uint8 bitmapcol[6][8];
+ uint8 bitmaprow[6];
+ int no_coeff[6];
+ int DCScalarLum; /* Luminance DC Scalar */
+ int DCScalarChr; /* Chrominance DC Scalar */
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ int direction;
+#endif
+} MacroBlock;
+
+typedef struct tagHeaderInfoDecVideo
+{
+ uint8 *Mode; /* Modes INTRA/INTER/etc. */
+ uint8 *CBP; /* MCBPC/CBPY stuff */
+} HeaderInfoDecVideo;
+
+
+/************************************************************/
+/* VLC structures */
+/************************************************************/
+typedef struct tagTcoef
+{
+ uint last;
+ uint run;
+ int level;
+ uint sign;
+} Tcoef, *LPTcoef;
+
+
+
+typedef struct tagVLCtab
+{
+ int32 val;
+ int32 len;
+} VLCtab, *LPVLCtab;
+
+typedef struct tagVLCshorttab
+{
+ int16 val;
+ int16 len;
+} VLCshorttab, *LPVLCshorttab ; /* for space saving, Antoine Nguyen*/
+
+typedef struct tagVLCtab2
+{
+ uint8 run;
+ uint8 level;
+ uint8 last;
+ uint8 len;
+} VLCtab2, *LPVLCtab2; /* 10/24/2000 */
+
+/* This type is designed for fast access of DC/AC */
+/* prediction data. If the compiler is smart */
+/* enough, it will use shifting for indexing. */
+/* 04/14/2000. */
+
+typedef int16 typeDCStore[6]; /* ACDC */
+typedef int16 typeDCACStore[4][8];
+
+
+
+/* Global structure that can be passed around */
+typedef struct tagVideoDecData
+{
+ BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */
+ /* Data For Layers (Scalability) */
+ Vol **vol; /* Data stored for each VOL */
+
+ /* Data used for reconstructing frames */
+ Vop *currVop; /* Current VOP (frame) */
+ Vop *prevVop; /* Previous VOP (frame) */
+ /* Data used to facilitate multiple layer decoding. 05/04/2000 */
+ Vop *prevEnhcVop; /* New change to rid of memcpy(). 04/24/2001 */
+ Vop **vopHeader; /* one for each layer. 08/29/2000 */
+
+ /* I/O structures */
+ MacroBlock *mblock; /* Macroblock data structure */
+ uint8 *acPredFlag; /* */
+
+ /* scratch memory used in data partitioned mode */
+ typeDCStore *predDC; /* The DC coeffs for each MB */
+ typeDCACStore *predDCAC_row;
+ typeDCACStore *predDCAC_col;
+
+ int usePrevQP; /* running QP decision switch */
+ uint8 *sliceNo; /* Slice indicator for each MB */
+ /* changed this to a 1D */
+ /* array for optimization */
+ MOT *motX; /* Motion vector in X direction */
+ MOT *motY; /* Motion vector in Y direction */
+ HeaderInfoDecVideo headerInfo; /* MB Header information */
+ int16 *QPMB; /* Quantizer value for each MB */
+
+ uint8 *pstprcTypCur; /* Postprocessing type for current frame */
+ uint8 *pstprcTypPrv; /* Postprocessing type for previous frame */
+ /* scratch memory used in all modes */
+ int mbnum; /* Macroblock number */
+ uint mbnum_row;
+ int mbnum_col;
+ /* I added these variables since they are used a lot. 04/13/2000 */
+ int nMBPerRow, nMBPerCol; /* number of MBs in each row & column */
+ int nTotalMB;
+ /* for short video header */
+ int nMBinGOB; /* number of MBs in GOB, 05/22/00 */
+ int nGOBinVop; /* number of GOB in Vop 05/22/00 */
+ /* VOL Dimensions */
+ int width; /* Width */
+ int height; /* Height */
+ int displayWidth; /* Handle image whose size is not a multiple of 16. */
+ int displayHeight; /* This is the actual size. 08/09/2000 */
+ int32 size;
+ /* Miscellaneous data points to be passed */
+ int frame_idx; /* Current frame ID */
+ int frameRate; /* Output frame Rate (over 10 seconds) */
+ int32 duration;
+ uint32 currTimestamp;
+ int currLayer; /* Current frame layer */
+ int shortVideoHeader; /* shortVideoHeader mode */
+ int intra_acdcPredDisable; /* VOL disable INTRA DC prediction */
+ int numberOfLayers; /* Number of Layers */
+ /* Frame to be used for concealment 07/07/2001 */
+ uint8 *concealFrame;
+ int vop_coding_type;
+ /* framerate and bitrate statistics counters. 08/23/2000 */
+ int32 nBitsPerVop[BITRATE_AVERAGE_WINDOW];
+ uint32 prevTimestamp[BITRATE_AVERAGE_WINDOW];
+ int nBitsForMBID; /* how many bits required for MB number? */
+ /* total data memory used by the docder library. 08/23/2000 */
+ int32 memoryUsage;
+
+ /* flag to turn on/off error concealment or soft decoding */
+ int errorConcealment;
+
+ /* Application controls */
+ VideoDecControls *videoDecControls;
+ int postFilterType; /* Postfilter mode 04/25/00 */
+
+
+
+ PV_STATUS(*vlcDecCoeffIntra)(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra_luma*/);
+ PV_STATUS(*vlcDecCoeffInter)(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ int initialized;
+
+ /* Annex IJKT */
+ int deblocking;
+ int slice_structure;
+ int modified_quant;
+ int advanced_INTRA;
+ int16 QP_CHR; /* ANNEX_T */
+} VideoDecData;
+
+/* for fast VLC+Dequant 10/12/2000*/
+typedef int (*VlcDequantBlockFuncP)(void *video, int comp, int switched,
+ uint8 *bitmaprow, uint8 *bitmapcol);
+
+//////////////////////////////////////////////////////////////
+// Decoder structures //
+//////////////////////////////////////////////////////////////
+#endif /* _MP4LIB_INT_H_ */
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/packet_util.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/packet_util.cpp
new file mode 100644
index 0000000..48414d7
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/packet_util.cpp
@@ -0,0 +1,252 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+
+
+/***********************************************************CommentBegin******
+* 04/13/2000 : initial modification to the new PV-Decoder
+* Lib format.
+* 04/16/2001 : Removed PV_END_OF_BUFFER case, error resilience
+***********************************************************CommentEnd********/
+PV_STATUS PV_ReadVideoPacketHeader(VideoDecData *video, int *next_MB)
+{
+ PV_STATUS status;
+ Vol *currVol = video->vol[video->currLayer];
+ Vop *currVop = video->currVop;
+ BitstreamDecVideo *stream = video->bitstream;
+ int fcode_forward;
+ int resync_marker_length;
+ int nbits = video->nBitsForMBID;
+ uint32 tmpvar32;
+ uint tmpvar16;
+ int16 quantizer;
+ int nTotalMB = video->nTotalMB;
+
+ fcode_forward = currVop->fcodeForward;
+ resync_marker_length = 17;
+
+ if (currVop->predictionType != I_VOP) resync_marker_length = 16 + fcode_forward;
+
+ status = PV_BitstreamShowBitsByteAlign(stream, resync_marker_length, &tmpvar32);
+ /* if (status != PV_SUCCESS && status != PV_END_OF_BUFFER) return status; */
+ if (tmpvar32 == RESYNC_MARKER)
+ {
+// DecNextStartCode(stream);
+ PV_BitstreamByteAlign(stream);
+ BitstreamReadBits32(stream, resync_marker_length);
+
+ *next_MB = (int) BitstreamReadBits16(stream, nbits);
+// if (*next_MB <= video->mbnum) /* needs more investigation */
+// *next_MB = video->mbnum+1;
+
+ if (*next_MB >= nTotalMB) /* fix 04/05/01 */
+ {
+ *next_MB = video->mbnum + 1;
+ if (*next_MB >= nTotalMB) /* this check is needed */
+ *next_MB = nTotalMB - 1;
+ }
+ quantizer = (int16) BitstreamReadBits16(stream, currVol->quantPrecision);
+ if (quantizer == 0) return PV_FAIL; /* 04/03/01 */
+
+ currVop->quantizer = quantizer;
+
+ /* if we have HEC, read some redundant VOP header information */
+ /* this part needs improvement 04/05/01 */
+ if (BitstreamRead1Bits(stream))
+ {
+ int time_base = -1;
+
+ /* modulo_time_base (? bits) */
+ do
+ {
+ time_base++;
+ tmpvar16 = BitstreamRead1Bits(stream);
+ }
+ while (tmpvar16 == 1);
+
+ /* marker bit */
+ BitstreamRead1Bits(stream);
+
+ /* vop_time_increment (1-15 bits) */
+ BitstreamReadBits16(stream, currVol->nbitsTimeIncRes);
+
+ /* marker bit */
+ BitstreamRead1Bits(stream);
+
+ /* vop_prediction_type (2 bits) */
+ BitstreamReadBits16(stream, 2);
+
+ /* Added intra_dc_vlc_thr reading */
+ BitstreamReadBits16(stream, 3);
+
+ /* fcodes */
+ if (currVop->predictionType != I_VOP)
+ {
+ fcode_forward = (int) BitstreamReadBits16(stream, 3);
+
+ if (currVop->predictionType == B_VOP)
+ {
+ BitstreamReadBits16(stream, 3);
+ }
+ }
+
+ }
+ }
+ else
+ {
+ PV_BitstreamByteAlign(stream); /* */
+ status = BitstreamCheckEndBuffer(stream); /* return end_of_VOP 03/30/01 */
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+ status = BitstreamShowBits32HC(stream, &tmpvar32); /* 07/07/01 */
+ /* -16 = 0xFFFFFFF0*/
+ if ((tmpvar32 & 0xFFFFFFF0) == VISUAL_OBJECT_SEQUENCE_START_CODE) /* start code mask 00 00 01 */
+
+ {
+ /* we don't have to check for legl stuffing here. 05/08/2000 */
+ return PV_END_OF_VOP;
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+
+ return PV_SUCCESS;
+}
+
+
+
+/***********************************************************CommentBegin******
+* 3/10/00 : initial modification to the
+* new PV-Decoder Lib format.
+* 04/17/01 : remove PV_END_OF_BUFFER, error checking
+***********************************************************CommentEnd********/
+PV_STATUS PV_GobHeader(VideoDecData *video)
+{
+ uint32 tmpvar;
+ Vop *currVop = video->currVop;
+ BitstreamDecVideo *stream = video->bitstream;
+ int quantPrecision = 5;
+ int16 quantizer;
+
+ BitstreamShowBits32(stream, GOB_RESYNC_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar != GOB_RESYNC_MARKER)
+ {
+ PV_BitstreamShowBitsByteAlign(stream, GOB_RESYNC_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar != GOB_RESYNC_MARKER)
+ {
+ return PV_FAIL;
+ }
+ else
+ PV_BitstreamByteAlign(stream); /* if bytealigned GOBHEADER search is performed */
+ /* then no more noforcestuffing */
+ }
+
+ /* we've got a GOB header info here */
+ BitstreamShowBits32(stream, GOB_RESYNC_MARKER_LENGTH + 5, &tmpvar);
+ tmpvar &= 0x1F;
+
+ if (tmpvar == 0)
+ {
+ return PV_END_OF_VOP;
+ }
+
+ if (tmpvar == 31)
+ {
+ PV_BitstreamFlushBits(stream, GOB_RESYNC_MARKER_LENGTH + 5);
+ BitstreamByteAlignNoForceStuffing(stream);
+ return PV_END_OF_VOP;
+ }
+
+ PV_BitstreamFlushBits(stream, GOB_RESYNC_MARKER_LENGTH + 5);
+ currVop->gobNumber = (int) tmpvar;
+ if (currVop->gobNumber >= video->nGOBinVop) return PV_FAIL;
+ currVop->gobFrameID = (int) BitstreamReadBits16(stream, 2);
+ quantizer = (int16) BitstreamReadBits16(stream, quantPrecision);
+ if (quantizer == 0) return PV_FAIL; /* 04/03/01 */
+
+ currVop->quantizer = quantizer;
+ return PV_SUCCESS;
+}
+#ifdef PV_ANNEX_IJKT_SUPPORT
+PV_STATUS PV_H263SliceHeader(VideoDecData *video, int *next_MB)
+{
+ PV_STATUS status;
+ uint32 tmpvar;
+ Vop *currVop = video->currVop;
+ BitstreamDecVideo *stream = video->bitstream;
+ int nTotalMB = video->nTotalMB;
+ int16 quantizer;
+
+ PV_BitstreamShowBitsByteAlignNoForceStuffing(stream, 17, &tmpvar);
+ if (tmpvar == RESYNC_MARKER)
+ {
+ BitstreamByteAlignNoForceStuffing(stream);
+ PV_BitstreamFlushBits(stream, 17);
+ if (!BitstreamRead1Bits(stream))
+ {
+ return PV_FAIL;
+ }
+ *next_MB = BitstreamReadBits16(stream, video->nBitsForMBID);
+ if (*next_MB >= nTotalMB) /* fix 04/05/01 */
+ {
+ *next_MB = video->mbnum + 1;
+ if (*next_MB >= nTotalMB) /* this check is needed */
+ *next_MB = nTotalMB - 1;
+ }
+ /* we will not parse sebp2 for large pictures 3GPP */
+ quantizer = (int16) BitstreamReadBits16(stream, 5);
+ if (quantizer == 0) return PV_FAIL;
+
+ currVop->quantizer = quantizer;
+ if (!BitstreamRead1Bits(stream))
+ {
+ return PV_FAIL;
+ }
+ currVop->gobFrameID = (int) BitstreamReadBits16(stream, 2);
+ }
+ else
+ {
+ status = BitstreamCheckEndBuffer(stream); /* return end_of_VOP 03/30/01 */
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+ PV_BitstreamShowBitsByteAlign(stream, SHORT_VIDEO_START_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar == SHORT_VIDEO_START_MARKER)
+ {
+ /* we don't have to check for legal stuffing here. 05/08/2000 */
+ return PV_END_OF_VOP;
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ return PV_SUCCESS;
+}
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/post_filter.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/post_filter.cpp
new file mode 100644
index 0000000..b36050c
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/post_filter.cpp
@@ -0,0 +1,585 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "mp4dec_lib.h"
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+#include "motion_comp.h"
+#include "mbtype_mode.h"
+const static int STRENGTH_tab[] = {0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12};
+#endif
+
+#ifdef PV_POSTPROC_ON
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+void PostFilter(
+ VideoDecData *video,
+ int filter_type,
+ uint8 *output)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ uint8 *pp_mod;
+ int16 *QP_store;
+ int combined_with_deblock_filter;
+ int nTotalMB = video->nTotalMB;
+ int width, height;
+ int32 size;
+ int softDeblocking;
+ uint8 *decodedFrame = video->videoDecControls->outputFrame;
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ width = video->width;
+ height = video->height;
+ size = (int32)width * height;
+
+ oscl_memcpy(output, decodedFrame, size);
+ oscl_memcpy(output + size, decodedFrame + size, (size >> 2));
+ oscl_memcpy(output + size + (size >> 2), decodedFrame + size + (size >> 2), (size >> 2));
+
+ if (filter_type == 0)
+ return;
+
+ /* The softDecoding cutoff corresponds to ~93000 bps for QCIF 15fps clip */
+ if (PVGetDecBitrate(video->videoDecControls) > (100*video->frameRate*(size >> 12))) // MC_sofDeblock
+ softDeblocking = FALSE;
+ else
+ softDeblocking = TRUE;
+
+ combined_with_deblock_filter = filter_type & PV_DEBLOCK;
+ QP_store = video->QPMB;
+
+ /* Luma */
+ pp_mod = video->pstprcTypCur;
+
+ if ((filter_type & PV_DEBLOCK) && (filter_type & PV_DERING))
+ {
+ CombinedHorzVertRingFilter(output, width, height, QP_store, 0, pp_mod);
+ }
+ else
+ {
+ if (filter_type & PV_DEBLOCK)
+ {
+ if (softDeblocking)
+ {
+ CombinedHorzVertFilter(output, width, height,
+ QP_store, 0, pp_mod);
+ }
+ else
+ {
+ CombinedHorzVertFilter_NoSoftDeblocking(output, width, height,
+ QP_store, 0, pp_mod);
+ }
+ }
+ if (filter_type & PV_DERING)
+ {
+ Deringing_Luma(output, width, height, QP_store,
+ combined_with_deblock_filter, pp_mod);
+
+ }
+ }
+
+ /* Chroma */
+
+ pp_mod += (nTotalMB << 2);
+ output += size;
+
+ if ((filter_type & PV_DEBLOCK) && (filter_type & PV_DERING))
+ {
+ CombinedHorzVertRingFilter(output, (int)(width >> 1), (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ else
+ {
+ if (filter_type & PV_DEBLOCK)
+ {
+ if (softDeblocking)
+ {
+ CombinedHorzVertFilter(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ else
+ {
+ CombinedHorzVertFilter_NoSoftDeblocking(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ }
+ if (filter_type & PV_DERING)
+ {
+ Deringing_Chroma(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store,
+ combined_with_deblock_filter, pp_mod);
+ }
+ }
+
+ pp_mod += nTotalMB;
+ output += (size >> 2);
+
+ if ((filter_type & PV_DEBLOCK) && (filter_type & PV_DERING))
+ {
+ CombinedHorzVertRingFilter(output, (int)(width >> 1), (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ else
+ {
+ if (filter_type & PV_DEBLOCK)
+ {
+ if (softDeblocking)
+ {
+ CombinedHorzVertFilter(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ else
+ {
+ CombinedHorzVertFilter_NoSoftDeblocking(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store, (int) 1, pp_mod);
+ }
+ }
+ if (filter_type & PV_DERING)
+ {
+ Deringing_Chroma(output, (int)(width >> 1),
+ (int)(height >> 1), QP_store,
+ combined_with_deblock_filter, pp_mod);
+ }
+ }
+
+ /* swap current pp_mod to prev_frame pp_mod */
+ pp_mod = video->pstprcTypCur;
+ video->pstprcTypCur = video->pstprcTypPrv;
+ video->pstprcTypPrv = pp_mod;
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+#endif
+
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+void H263_Deblock(uint8 *rec,
+ int width,
+ int height,
+ int16 *QP_store,
+ uint8 *mode,
+ int chr, int annex_T)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int i, j, k;
+ uint8 *rec_y;
+ int tmpvar;
+ int mbnum, strength, A_D, d1_2, d1, d2, A, B, C, D, b_size;
+ int d, offset, nMBPerRow, nMBPerCol, width2 = (width << 1);
+ /* MAKE SURE I-VOP INTRA MACROBLOCKS ARE SET TO NON-SKIPPED MODE*/
+ mbnum = 0;
+
+ if (chr)
+ {
+ nMBPerRow = width >> 3;
+ nMBPerCol = height >> 3;
+ b_size = 8;
+ }
+ else
+ {
+ nMBPerRow = width >> 4;
+ nMBPerCol = height >> 4;
+ b_size = 16;
+ }
+
+
+ /********************************* VERTICAL FILTERING ****************************/
+ /* vertical filtering of mid sections no need to check neighboring QP's etc */
+ if (!chr)
+ {
+ rec_y = rec + (width << 3);
+ for (i = 0; i < (height >> 4); i++)
+ {
+ for (j = 0; j < (width >> 4); j++)
+ {
+ if (mode[mbnum] != MODE_SKIPPED)
+ {
+ k = 16;
+ strength = STRENGTH_tab[QP_store[mbnum]];
+ while (k--)
+ {
+ A = *(rec_y - width2);
+ D = *(rec_y + width);
+ A_D = A - D;
+ C = *rec_y;
+ B = *(rec_y - width);
+ d = (((C - B) << 2) + A_D);
+
+ if (d < 0)
+ {
+ d1 = -(-d >> 3);
+ if (d1 < -(strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 < -strength)
+ {
+ d1 = -d1 - (strength << 1);
+ }
+ d1_2 = -d1 >> 1;
+ }
+ else
+ {
+ d1 = d >> 3;
+ if (d1 > (strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 > strength)
+ {
+ d1 = (strength << 1) - d1;
+ }
+ d1_2 = d1 >> 1;
+ }
+
+ if (A_D < 0)
+ {
+ d2 = -(-A_D >> 2);
+ if (d2 < -d1_2)
+ {
+ d2 = -d1_2;
+ }
+ }
+ else
+ {
+ d2 = A_D >> 2;
+ if (d2 > d1_2)
+ {
+ d2 = d1_2;
+ }
+ }
+
+ *(rec_y - width2) = A - d2;
+ tmpvar = B + d1;
+ CLIP_RESULT(tmpvar)
+ *(rec_y - width) = tmpvar;
+ tmpvar = C - d1;
+ CLIP_RESULT(tmpvar)
+ *rec_y = tmpvar;
+ *(rec_y + width) = D + d2;
+ rec_y++;
+ }
+ }
+ else
+ {
+ rec_y += b_size;
+ }
+ mbnum++;
+ }
+ rec_y += (15 * width);
+
+ }
+ }
+
+ /* VERTICAL boundary blocks */
+
+
+ rec_y = rec + width * b_size;
+
+ mbnum = nMBPerRow;
+ for (i = 0; i < nMBPerCol - 1; i++)
+ {
+ for (j = 0; j < nMBPerRow; j++)
+ {
+ if (mode[mbnum] != MODE_SKIPPED || mode[mbnum - nMBPerRow] != MODE_SKIPPED)
+ {
+ k = b_size;
+ if (mode[mbnum] != MODE_SKIPPED)
+ {
+ strength = STRENGTH_tab[(annex_T ? MQ_chroma_QP_table[QP_store[mbnum]] : QP_store[mbnum])];
+ }
+ else
+ {
+ strength = STRENGTH_tab[(annex_T ? MQ_chroma_QP_table[QP_store[mbnum - nMBPerRow]] : QP_store[mbnum - nMBPerRow])];
+ }
+
+ while (k--)
+ {
+ A = *(rec_y - width2);
+ D = *(rec_y + width);
+ A_D = A - D;
+ C = *rec_y;
+ B = *(rec_y - width);
+ d = (((C - B) << 2) + A_D);
+
+ if (d < 0)
+ {
+ d1 = -(-d >> 3);
+ if (d1 < -(strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 < -strength)
+ {
+ d1 = -d1 - (strength << 1);
+ }
+ d1_2 = -d1 >> 1;
+ }
+ else
+ {
+ d1 = d >> 3;
+ if (d1 > (strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 > strength)
+ {
+ d1 = (strength << 1) - d1;
+ }
+ d1_2 = d1 >> 1;
+ }
+
+ if (A_D < 0)
+ {
+ d2 = -(-A_D >> 2);
+ if (d2 < -d1_2)
+ {
+ d2 = -d1_2;
+ }
+ }
+ else
+ {
+ d2 = A_D >> 2;
+ if (d2 > d1_2)
+ {
+ d2 = d1_2;
+ }
+ }
+
+ *(rec_y - width2) = A - d2;
+ tmpvar = B + d1;
+ CLIP_RESULT(tmpvar)
+ *(rec_y - width) = tmpvar;
+ tmpvar = C - d1;
+ CLIP_RESULT(tmpvar)
+ *rec_y = tmpvar;
+ *(rec_y + width) = D + d2;
+ rec_y++;
+ }
+ }
+ else
+ {
+ rec_y += b_size;
+ }
+ mbnum++;
+ }
+ rec_y += ((b_size - 1) * width);
+
+ }
+
+
+ /***************************HORIZONTAL FILTERING ********************************************/
+ mbnum = 0;
+ /* HORIZONTAL INNER */
+ if (!chr)
+ {
+ rec_y = rec + 8;
+ offset = width * b_size - b_size;
+
+ for (i = 0; i < nMBPerCol; i++)
+ {
+ for (j = 0; j < nMBPerRow; j++)
+ {
+ if (mode[mbnum] != MODE_SKIPPED)
+ {
+ k = 16;
+ strength = STRENGTH_tab[QP_store[mbnum]];
+ while (k--)
+ {
+ A = *(rec_y - 2);
+ D = *(rec_y + 1);
+ A_D = A - D;
+ C = *rec_y;
+ B = *(rec_y - 1);
+ d = (((C - B) << 2) + A_D);
+
+ if (d < 0)
+ {
+ d1 = -(-d >> 3);
+ if (d1 < -(strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 < -strength)
+ {
+ d1 = -d1 - (strength << 1);
+ }
+ d1_2 = -d1 >> 1;
+ }
+ else
+ {
+ d1 = d >> 3;
+ if (d1 > (strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 > strength)
+ {
+ d1 = (strength << 1) - d1;
+ }
+ d1_2 = d1 >> 1;
+ }
+
+ if (A_D < 0)
+ {
+ d2 = -(-A_D >> 2);
+ if (d2 < -d1_2)
+ {
+ d2 = -d1_2;
+ }
+ }
+ else
+ {
+ d2 = A_D >> 2;
+ if (d2 > d1_2)
+ {
+ d2 = d1_2;
+ }
+ }
+
+ *(rec_y - 2) = A - d2;
+ tmpvar = B + d1;
+ CLIP_RESULT(tmpvar)
+ *(rec_y - 1) = tmpvar;
+ tmpvar = C - d1;
+ CLIP_RESULT(tmpvar)
+ *rec_y = tmpvar;
+ *(rec_y + 1) = D + d2;
+ rec_y += width;
+ }
+ rec_y -= offset;
+ }
+ else
+ {
+ rec_y += b_size;
+ }
+ mbnum++;
+ }
+ rec_y += (15 * width);
+
+ }
+ }
+
+
+
+ /* HORIZONTAL EDGE */
+ rec_y = rec + b_size;
+ offset = width * b_size - b_size;
+ mbnum = 1;
+ for (i = 0; i < nMBPerCol; i++)
+ {
+ for (j = 0; j < nMBPerRow - 1; j++)
+ {
+ if (mode[mbnum] != MODE_SKIPPED || mode[mbnum-1] != MODE_SKIPPED)
+ {
+ k = b_size;
+ if (mode[mbnum] != MODE_SKIPPED)
+ {
+ strength = STRENGTH_tab[(annex_T ? MQ_chroma_QP_table[QP_store[mbnum]] : QP_store[mbnum])];
+ }
+ else
+ {
+ strength = STRENGTH_tab[(annex_T ? MQ_chroma_QP_table[QP_store[mbnum - 1]] : QP_store[mbnum - 1])];
+ }
+
+ while (k--)
+ {
+ A = *(rec_y - 2);
+ D = *(rec_y + 1);
+ A_D = A - D;
+ C = *rec_y;
+ B = *(rec_y - 1);
+ d = (((C - B) << 2) + A_D);
+
+ if (d < 0)
+ {
+ d1 = -(-d >> 3);
+ if (d1 < -(strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 < -strength)
+ {
+ d1 = -d1 - (strength << 1);
+ }
+ d1_2 = -d1 >> 1;
+ }
+ else
+ {
+ d1 = d >> 3;
+ if (d1 > (strength << 1))
+ {
+ d1 = 0;
+ }
+ else if (d1 > strength)
+ {
+ d1 = (strength << 1) - d1;
+ }
+ d1_2 = d1 >> 1;
+ }
+
+ if (A_D < 0)
+ {
+ d2 = -(-A_D >> 2);
+ if (d2 < -d1_2)
+ {
+ d2 = -d1_2;
+ }
+ }
+ else
+ {
+ d2 = A_D >> 2;
+ if (d2 > d1_2)
+ {
+ d2 = d1_2;
+ }
+ }
+
+ *(rec_y - 2) = A - d2;
+ tmpvar = B + d1;
+ CLIP_RESULT(tmpvar)
+ *(rec_y - 1) = tmpvar;
+ tmpvar = C - d1;
+ CLIP_RESULT(tmpvar)
+ *rec_y = tmpvar;
+ *(rec_y + 1) = D + d2;
+ rec_y += width;
+ }
+ rec_y -= offset;
+ }
+ else
+ {
+ rec_y += b_size;
+ }
+ mbnum++;
+ }
+ rec_y += ((width * (b_size - 1)) + b_size);
+ mbnum++;
+ }
+
+ return;
+}
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/post_proc.h b/media/libstagefright/codecs/m4v_h263/dec/src/post_proc.h
new file mode 100644
index 0000000..091fdaf
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/post_proc.h
@@ -0,0 +1,75 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef post_proc_H
+#define post_proc_H
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+#define UPDATE_PV_MAXPV_MIN(p,max,min) if ((p) > max) max=(p); else if ((p) < min) min = (p);
+
+#define INDEX(x,thr) (((x)>=thr)?1:0)
+#define BLKSIZE 8
+#define MBSIZE 16
+#define DERING_THR 16
+
+/* version for fast Deblock filtering*/
+#define KTh 4 /*threshold for soft filtering*/
+#define KThH 4 /*threshold for hard filtering */
+
+#define NoMMX
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; SIMPLE TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; ENUMERATED TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; STRUCTURES TYPEDEF'S
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; GLOBAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; END
+----------------------------------------------------------------------------*/
+#endif
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/post_proc_semaphore.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/post_proc_semaphore.cpp
new file mode 100644
index 0000000..3abc6be
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/post_proc_semaphore.cpp
@@ -0,0 +1,247 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ q_block = pointer to buffer of inverse quantized DCT coefficients of type
+ int for intra-VOP mode or buffer of residual data of type int
+ for inter-VOP mode
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ postmode = post processing semaphore with the vertical deblocking,
+ horizontal deblocking, and deringing bits set up accordingly
+
+ Pointers and Buffers Modified:
+ None
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This function sets up the postmode semaphore based on the contents of the
+ buffer pointed to by q_block. The function starts out with the assumption
+ that all entries of q_block, except for the first entry (q_block[0]), are
+ zero. This case can induce horizontal and vertical blocking artifacts,
+ therefore, both horizontal and vertical deblocking bits are enabled.
+
+ The following conditions are tested when setting up the horizontal/vertical
+ deblocking and deringing bits:
+ 1. When only the elements of the top row of the B_SIZE x B_SIZE block
+ (q_block[n], n = 0,..., B_SIZE-1) are non-zero, vertical blocking artifacts
+ may result, therefore, only the vertical deblocking bit is enabled.
+ Otherwise, the vertical deblocking bit is disabled.
+ 2. When only the elements of the far left column of the B_SIZE x B_SIZE block
+ (q_block[n*B_SIZE], n = 0, ..., B_SIZE-1) are non-zero, horizontal blocking
+ artifacts may result, therefore, only the horizontal deblocking bit is
+ enabled. Otherwise, the horizontal deblocking bit is disabled.
+ 3. If any non-zero elements exist in positions other than q_block[0],
+ q_block[1], or q_block[B_SIZE], the deringing bit is enabled. Otherwise,
+ it is disabled.
+
+ The 3 least significant bits of postmode defines vertical or horizontal
+ deblocking and deringing.
+
+ The valid values are shown below:
+ -------------------------------------------------------
+ | Type | Enabled | Disabled |
+ -------------------------------------------------------
+ | Vertical Deblocking (Bit #0) | 1 | 0 |
+ -------------------------------------------------------
+ | Horizontal Deblocking (Bit #1) | 1 | 0 |
+ -------------------------------------------------------
+ | Deringing (Bit #2) | 1 | 0 |
+ -------------------------------------------------------
+
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_lib.h"
+#include "mp4def.h"
+#include "post_proc.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef PV_POSTPROC_ON
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+int PostProcSemaphore(
+ int16 *q_block)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int i, j;
+
+ /* Set default value to vertical and horizontal deblocking enabled */
+ /* Initial assumption is that only q_block[0] element is non-zero, */
+ /* therefore, vertical and horizontal deblocking bits are set to 1 */
+ int postmode = 0x3;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Vertical deblocking bit is enabled when only the entire top row of */
+ /* the B_SIZE x B_SIZE block, i.e., q_block[n], n = 0,..., B_SIZE-1, */
+ /* are non-zero. Since initial assumption is that all elements, except */
+ /* q_block[0], is zero, we need to check the remaining elements in the */
+ /* top row to determine if all or some are non-zero. */
+ if (q_block[1] != 0)
+ {
+ /* At this point, q_block[0] and q_block[1] are non-zero, while */
+ /* q_block[n], n = 2,..., B_SIZE-1, are zero. Therefore, we */
+ /* need to disable vertical deblocking */
+ postmode &= 0xE;
+ }
+
+ for (i = 2; i < B_SIZE; i++)
+ {
+ if (q_block[i])
+ {
+ /* Check if q_block[n], n = 2,..., B_SIZE-1, are non-zero.*/
+ /* If any of them turn out to be non-zero, we need to */
+ /* disable vertical deblocking. */
+ postmode &= 0xE;
+
+ /* Deringing is enabled if any nonzero elements exist in */
+ /* positions other than q_block[0], q_block[1] or */
+ /* q_block[B_SIZE]. */
+ postmode |= 0x4;
+
+ break;
+ }
+ }
+
+ /* Horizontal deblocking bit is enabled when only the entire far */
+ /* left column, i.e., q_block[n*B_SIZE], n = 0, ..., B_SIZE-1, */
+ /* are non-zero. Since initial assumption is that all elements, */
+ /* except q_block[0], is zero, we need to check the remaining */
+ /* elements in the far left column to determine if all or some */
+ /* are non-zero. */
+ if (q_block[B_SIZE])
+ {
+ /* At this point, only q_block[0] and q_block[B_SIZE] are non-zero, */
+ /* while q_block[n*B_SIZE], n = 2, 3,..., B_SIZE-1, are zero. */
+ /* Therefore, we need to disable horizontal deblocking. */
+ postmode &= 0xD;
+ }
+
+ for (i = 16; i < NCOEFF_BLOCK; i += B_SIZE)
+ {
+ if (q_block[i])
+ {
+ /* Check if q_block[n], n = 2*B_SIZE,...,(B_SIZE-1)*B_SIZE, */
+ /* are non-zero. If any of them turn out to be non-zero, */
+ /* we need to disable horizontal deblocking. */
+ postmode &= 0xD;
+
+ /* Deringing is enabled if any nonzero elements exist in */
+ /* positions other than q_block[0], q_block[1] or */
+ /* q_block[B_SIZE]. */
+ postmode |= 0x4;
+
+ break;
+ }
+ }
+
+ /* At this point, only the first row and far left column elements */
+ /* have been tested. If deringing bit is still not set at this */
+ /* point, check the rest of q_block to determine if the elements */
+ /* are non-zero. If all elements, besides q_block[0], q_block[1], */
+ /* or q_block[B_SIZE] are non-zero, deringing bit must be set */
+ if ((postmode & 0x4) == 0)
+ {
+ for (i = 1; i < B_SIZE; i++)
+ {
+ for (j = 1; j < B_SIZE; j++)
+ {
+ if (q_block[(i<<3)+j])
+ {
+ /* At this point, q_block[0] and another q_block */
+ /* element are non-zero, therefore, we need to */
+ /* disable vertical and horizontal deblocking */
+ postmode &= 0xC;
+
+ /* Deringing is enabled if any nonzero elements exist in */
+ /* positions other than q_block[0], q_block[1] or */
+ /* q_block[B_SIZE]. */
+ postmode |= 0x4;
+
+ /* Set outer FOR loop count to B_SIZE to get out of */
+ /* outer FOR loop */
+ i = B_SIZE;
+
+ /* Get out of inner FOR loop */
+ break;
+ }
+ }
+ }
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return (postmode);
+}
+
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_chroma_inter.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_chroma_inter.cpp
new file mode 100644
index 0000000..7c20222
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_chroma_inter.cpp
@@ -0,0 +1,262 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ xpred = x-axis coordinate of the block used for prediction (int)
+ ypred = y-axis coordinate of the block used for prediction (int)
+ pp_dec_u = pointer to the post processing semaphore for chrominance
+ (uint8)
+ pstprcTypPrv = pointer the previous frame's post processing type
+ (uint8)
+ dx = horizontal component of the motion vector (int)
+ dy = vertical component of the motion vector (int)
+ mvwidth = number of blocks per row in the luminance VOP (int)
+ height = luminance VOP height in pixels (int)
+ size = total number of pixel in the current luminance VOP (int)
+ mv_loc = flag indicating location of the motion compensated
+ (x,y) position with respect to the luminance MB (int);
+ 0 -> inside MB, 1 -> outside MB
+ msk_deblock = flag indicating whether to perform deblocking
+ (msk_deblock = 0) or not (msk_deblock = 1) (uint8)
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ None
+
+ Pointers and Buffers Modified:
+ pp_dec_u contents are the updated semaphore propagation data
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This functions performs post processing semaphore propagation processing
+ after chrominance prediction in interframe processing mode.
+
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_api.h"
+#include "mp4def.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef PV_POSTPROC_ON
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ /*----------------------------------------------------------------------------
+ ; FUNCTION CODE
+ ----------------------------------------------------------------------------*/
+ void pp_semaphore_chroma_inter(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *pp_dec_u, /* i/o */
+ uint8 *pstprcTypPrv, /* i */
+ int dx, /* i */
+ int dy, /* i */
+ int mvwidth, /* i */
+ int height, /* i */
+ int32 size, /* i */
+ int mv_loc, /* i */
+ uint8 msk_deblock /* i */
+ )
+ {
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int mmvy, mmvx, nmvy, nmvx;
+ uint8 *pp_prev1, *pp_prev2, *pp_prev3, *pp_prev4;
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+
+ /* 09/28/2000, modify semaphore propagation to */
+ /* accommodate smart indexing */
+ mmvx = xpred >> 4; /* block x coor */
+ nmvx = mmvx;
+
+ mmvy = ypred >> 4; /* block y coor */
+ nmvy = mmvy;
+
+ /* Check if MV is outside the frame */
+ if (mv_loc == 1)
+ {
+ /* Perform boundary check */
+ if (nmvx < 0)
+ {
+ nmvx = 0;
+ }
+ else if (nmvx > mvwidth - 1)
+ {
+ nmvx = mvwidth - 1;
+ }
+
+ if (nmvy < 0)
+ {
+ nmvy = 0;
+ }
+ else if (nmvy > (height >> 4) - 1)
+ {
+ nmvy = (height >> 4) - 1;
+ }
+ }
+
+ /* Calculate pointer to first chrominance b semaphores in */
+ /* pstprcTypPrv, i.e., first chrominance b semaphore is in */
+ /* (pstprcTypPrv + (size>>6)). */
+ /* Since total number of chrominance blocks per row in a VOP */
+ /* is half of the total number of luminance blocks per row in a */
+ /* VOP, we use (mvwidth >> 1) when calculating the row offset. */
+ pp_prev1 = pstprcTypPrv + (size >> 6) + nmvx + nmvy * (mvwidth >> 1) ;
+
+ /* Check if MV is a multiple of 16 */
+ /* 1/5/01, make sure it doesn't go out of bound */
+ if (((dy&0xF) != 0) && (mmvy + 1 < (height >> 4) - 1))
+ { /* dy is not a multiple of 16 */
+
+ /* pp_prev3 is the block below pp_prev1 block */
+ pp_prev3 = pp_prev1 + (mvwidth >> 1);
+ }
+ else
+ { /* dy is a multiple of 16 */
+ pp_prev3 = pp_prev1;
+ }
+
+ /* 1/5/01, make sure it doesn't go out of bound */
+ if (((dx&0xF) != 0) && (mmvx + 1 < (mvwidth >> 1) - 1))
+ { /* dx is not a multiple of 16 */
+
+ /* pp_prev2 is the block to the right of pp_prev1 block */
+ pp_prev2 = pp_prev1 + 1;
+
+ /* pp_prev4 is the block to the right of the block */
+ /* below pp_prev1 block */
+ pp_prev4 = pp_prev3 + 1;
+ }
+ else
+ { /* dx is a multiple of 16 */
+
+ pp_prev2 = pp_prev1;
+ pp_prev4 = pp_prev3;
+ }
+
+ /* Advance offset to location of first Chrominance R semaphore in */
+ /* pstprcTypPrv. Since the number of pixels in a Chrominance VOP */
+ /* is (number of pixels in Luminance VOP/4), and there are 64 */
+ /* pixels in an 8x8 Chrominance block, the offset can be */
+ /* calculated as: */
+ /* mv_loc = (number of pixels in Luminance VOP/(4*64)) */
+ /* = size/256 = size>>8 */
+ mv_loc = (size >> 8);
+
+ /* 11/3/00, change the propagation for deblocking */
+ if (msk_deblock == 0)
+ {
+
+ /* Deblocking semaphore propagation for Chrominance */
+ /* b semaphores */
+ *(pp_dec_u) = 0;
+
+ /* Advance offset to point to Chrominance r semaphores */
+ pp_dec_u += mv_loc;
+
+ /* Deblocking semaphore propagation for Chrominance */
+ /* r semaphores */
+ *(pp_dec_u) = 0;
+ }
+ else
+ {
+ /* Deringing semaphore propagation for Chrominance B block */
+ if ((*(pp_dec_u)&4) == 0)
+ {
+ *(pp_dec_u) |= ((*(pp_prev1) | *(pp_prev2) |
+ *(pp_prev3) | *(pp_prev4)) & 0x4);
+ }
+
+ /* Advance offset to point to Chrominance r semaphores */
+ pp_dec_u += mv_loc;
+ pp_prev1 += mv_loc;
+ pp_prev2 += mv_loc;
+ pp_prev3 += mv_loc;
+ pp_prev4 += mv_loc;
+
+ /* Deringing semaphore propagation for Chrominance R */
+ if ((*(pp_dec_u)&4) == 0)
+ {
+ *(pp_dec_u) |= ((*(pp_prev1) | *(pp_prev2) |
+ *(pp_prev3) | *(pp_prev4)) & 0x4);
+ }
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+ }
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_luma.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_luma.cpp
new file mode 100644
index 0000000..b3a1ebd
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/pp_semaphore_luma.cpp
@@ -0,0 +1,378 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+------------------------------------------------------------------------------
+ INPUT AND OUTPUT DEFINITIONS
+
+ Inputs:
+ xpred = x-axis coordinate of the MB used for prediction (int)
+ ypred = y-axis coordinate of the MB used for prediction (int)
+ pp_dec_y = pointer to the post processing semaphore for current
+ luminance frame (uint8)
+ pstprcTypPrv = pointer the previous frame's post processing type
+ (uint8)
+ ll = pointer to the buffer (int)
+ mv_loc = flag indicating location of the motion compensated
+ (x,y) position with respect to the luminance MB (int);
+ 0 -> inside MB, 1 -> outside MB
+ dx = horizontal component of the motion vector (int)
+ dy = vertical component of the motion vector (int)
+ mvwidth = number of blocks per row (int)
+ width = luminance VOP width in pixels (int)
+ height = luminance VOP height in pixels (int)
+
+ Local Stores/Buffers/Pointers Needed:
+ None
+
+ Global Stores/Buffers/Pointers Needed:
+ None
+
+ Outputs:
+ msk_deblock = flag that indicates whether deblocking is to be
+ performed (msk_deblock = 0) or not (msk_deblock =
+ 1) (uint8)
+
+ Pointers and Buffers Modified:
+ pp_dec_y contents are the updated semapohore propagation data
+
+ Local Stores Modified:
+ None
+
+ Global Stores Modified:
+ None
+
+------------------------------------------------------------------------------
+ FUNCTION DESCRIPTION
+
+ This functions performs post processing semaphore propagation processing
+ after luminance prediction.
+
+*/
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4dec_api.h"
+#include "mp4def.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef PV_POSTPROC_ON
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ /*----------------------------------------------------------------------------
+ ; FUNCTION CODE
+ ----------------------------------------------------------------------------*/
+ uint8 pp_semaphore_luma(
+ int xpred, /* i */
+ int ypred, /* i */
+ uint8 *pp_dec_y, /* i/o */
+ uint8 *pstprcTypPrv, /* i */
+ int *ll, /* i */
+ int *mv_loc, /* i/o */
+ int dx, /* i */
+ int dy, /* i */
+ int mvwidth, /* i */
+ int width, /* i */
+ int height /* i */
+ )
+ {
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ int kk, mmvy, mmvx, nmvx, nmvy;
+ uint8 *pp_prev1, *pp_prev2, *pp_prev3, *pp_prev4;
+ uint8 msk_deblock = 0; /* 11/3/00 */
+
+ /*----------------------------------------------------------------------------
+ ; Function body here
+ ----------------------------------------------------------------------------*/
+ /* Interframe Processing - 1 MV per MB */
+
+ /* check whether the MV points outside the frame */
+ if (xpred >= 0 && xpred <= ((width << 1) - (2*MB_SIZE)) && ypred >= 0 &&
+ ypred <= ((height << 1) - (2*MB_SIZE)))
+ { /*****************************/
+ /* (x,y) is inside the frame */
+ /*****************************/
+
+ /* 10/24/2000 post_processing semaphore */
+ /* generation */
+
+ /* 10/23/2000 no boundary checking*/
+ *mv_loc = 0;
+
+ /* Calculate block x coordinate. Divide by 16 is for */
+ /* converting half-pixel resolution to block */
+ mmvx = xpred >> 4;
+
+ /* Calculate block y coordinate. Divide by 16 is for */
+ /* converting half-pixel resolution to block */
+ mmvy = ypred >> 4;
+
+ /* Find post processing semaphore location for block */
+ /* used for prediction, i.e., */
+ /* pp_prev1 = &pstprcTypPrv[mmvy*mvwidth][mmvx] */
+ pp_prev1 = pstprcTypPrv + mmvx + mmvy * mvwidth;
+
+ /* Check if MV is a multiple of 16 */
+ if ((dx&0xF) != 0)
+ { /* dx is not a multiple of 16 */
+
+ /* pp_prev2 is the block to the right of */
+ /* pp_prev1 block */
+ pp_prev2 = pp_prev1 + 1;
+
+ if ((dy&0xF) != 0)
+ { /* dy is not a multiple of 16 */
+
+ /* pp_prev3 is the block below */
+ /* pp_prev1 block */
+ pp_prev3 = pp_prev1 + mvwidth;
+ }
+ else
+ { /* dy is a multiple of 16 */
+
+ pp_prev3 = pp_prev1;
+ }
+
+ /* pp_prev4 is the block to the right of */
+ /* pp_prev3 block. */
+ pp_prev4 = pp_prev3 + 1;
+ }
+ else
+ { /* dx is a multiple of 16 */
+
+ pp_prev2 = pp_prev1;
+
+ if ((dy&0xF) != 0)
+ { /* dy is not a multiple of 16 */
+
+ /* pp_prev3 is the block below */
+ /* pp_prev1 block. */
+ pp_prev3 = pp_prev1 + mvwidth;
+ }
+ else
+ { /* dy is a multiple of 16 */
+
+ pp_prev3 = pp_prev1;
+ msk_deblock = 0x3;
+ }
+
+ pp_prev4 = pp_prev3;
+ }
+
+ /* Perform post processing semaphore propagation for each */
+ /* of the 4 blocks in a MB. */
+ for (kk = 0; kk < 4; kk++)
+ {
+ /* Deringing semaphore propagation */
+ if ((*(pp_dec_y) & 4) == 0)
+ {
+ *(pp_dec_y) |= ((*(pp_prev1) | *(pp_prev2) |
+ *(pp_prev3) | *(pp_prev4)) & 0x4);
+ }
+ /* Deblocking semaphore propagation */
+ /* 11/3/00, change the propagation for deblocking */
+ if (msk_deblock == 0)
+ {
+ *(pp_dec_y) = 0;
+ }
+
+ pp_dec_y += ll[kk];
+ pp_prev1 += ll[kk];
+ pp_prev2 += ll[kk];
+ pp_prev3 += ll[kk];
+ pp_prev4 += ll[kk];
+ }
+
+ }
+ else
+ { /******************************/
+ /* (x,y) is outside the frame */
+ /******************************/
+
+ /* 10/24/2000 post_processing semaphore */
+ /* generation */
+
+ /* 10/23/2000 boundary checking*/
+ *mv_loc = 1;
+
+ /* Perform post processing semaphore propagation for each */
+ /* of the 4 blocks in a MB. */
+ for (kk = 0; kk < 4; kk++)
+ {
+ /* Calculate block x coordinate and round (?). */
+ /* Divide by 16 is for converting half-pixel */
+ /* resolution to block. */
+ mmvx = (xpred + ((kk & 1) << 3)) >> 4;
+ nmvx = mmvx;
+
+ /* Calculate block y coordinate and round (?). */
+ /* Divide by 16 is for converting half-pixel */
+ /* resolution to block. */
+ mmvy = (ypred + ((kk & 2) << 2)) >> 4;
+ nmvy = mmvy;
+
+ /* Perform boundary checking */
+ if (nmvx < 0)
+ {
+ nmvx = 0;
+ }
+ else if (nmvx > mvwidth - 1)
+ {
+ nmvx = mvwidth - 1;
+ }
+
+ if (nmvy < 0)
+ {
+ nmvy = 0;
+ }
+ else if (nmvy > (height >> 3) - 1)
+ {
+ nmvy = (height >> 3) - 1;
+ }
+
+ /* Find post processing semaphore location for block */
+ /* used for prediction, i.e., */
+ /* pp_prev1 = &pstprcTypPrv[nmvy*mvwidth][nmvx] */
+ pp_prev1 = pstprcTypPrv + nmvx + nmvy * mvwidth;
+
+ /* Check if x component of MV is a multiple of 16 */
+ /* and check if block x coordinate is out of bounds */
+ if (((dx&0xF) != 0) && (mmvx + 1 < mvwidth - 1))
+ { /* dx is not a multiple of 16 and the block */
+ /* x coordinate is within the bounds */
+
+ /* pp_prev2 is the block to the right of */
+ /* pp_prev1 block */
+ pp_prev2 = pp_prev1 + 1;
+
+ /* Check if y component of MV is a multiple */
+ /* of 16 and check if block y coordinate is */
+ /* out of bounds */
+ if (((dy&0xF) != 0) && (mmvy + 1 < (height >> 3) - 1))
+ { /* dy is not a multiple of 16 and */
+ /* the block y coordinate is */
+ /* within the bounds */
+
+ /* pp_prev3 is the block below */
+ /* pp_prev1 block */
+ pp_prev3 = pp_prev1 + mvwidth;
+
+ /* all prediction are from different blocks */
+ msk_deblock = 0x3;
+ }
+ else
+ { /* dy is a multiple of 16 or the block */
+ /* y coordinate is out of bounds */
+
+ pp_prev3 = pp_prev1;
+ }
+
+ /* pp_prev4 is the block to the right of */
+ /* pp_prev3 block. */
+ pp_prev4 = pp_prev3 + 1;
+ }
+ else
+ { /* dx is a multiple of 16 or the block x */
+ /* coordinate is out of bounds */
+
+ pp_prev2 = pp_prev1;
+
+ /* Check if y component of MV is a multiple */
+ /* of 16 and check if block y coordinate is */
+ /* out of bounds */
+ if (((dy&0xF) != 0) && (mmvy + 1 < (height >> 3) - 1))
+ { /* dy is not a multiple of 16 and */
+ /* the block y coordinate is */
+ /* within the bounds */
+
+ /* pp_prev3 is the block below */
+ /* pp_prev1 block. */
+ pp_prev3 = pp_prev1 + mvwidth;
+ }
+ else
+ { /* dy is a multiple of 16 or the block */
+ /* y coordinate is out of bounds */
+
+ pp_prev3 = pp_prev1;
+ }
+
+ pp_prev4 = pp_prev3;
+ }
+
+ /* Deringing semaphore propagation */
+ if ((*(pp_dec_y)&4) == 0)
+ {
+ *(pp_dec_y) |= ((*(pp_prev1) |
+ *(pp_prev2) | *(pp_prev3) |
+ *(pp_prev4)) & 0x4);
+ }
+ /* Deblocking semaphore propagation */
+ /* 11/3/00, change the propaga= */
+ /* tion for deblocking */
+ if (msk_deblock == 0)
+ {
+ *(pp_dec_y) = 0;
+ }
+
+ pp_dec_y += ll[kk];
+ }
+ }
+
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return (msk_deblock);
+ }
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/pvdec_api.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/pvdec_api.cpp
new file mode 100644
index 0000000..0c354d9
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/pvdec_api.cpp
@@ -0,0 +1,1696 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+
+#define OSCL_DISABLE_WARNING_CONDITIONAL_IS_CONSTANT
+
+#ifdef DEC_INTERNAL_MEMORY_OPT
+#define QCIF_MBS 99
+#define QCIF_BS (4*QCIF_MBS)
+#define QCIF_MB_ROWS 11
+extern uint8 IMEM_sliceNo[QCIF_MBS];
+extern uint8 IMEM_acPredFlag[QCIF_MBS];
+extern uint8 IMEM_headerInfo_Mode[QCIF_MBS];
+extern uint8 IMEM_headerInfo_CBP[QCIF_MBS];
+extern int IMEM_headerInfo_QPMB[QCIF_MBS];
+extern MacroBlock IMEM_mblock;
+extern MOT IMEM_motX[QCIF_BS];
+extern MOT IMEM_motY[QCIF_BS];
+extern BitstreamDecVideo IMEM_BitstreamDecVideo[4];
+extern typeDCStore IMEM_predDC[QCIF_MBS];
+extern typeDCACStore IMEM_predDCAC_col[QCIF_MB_ROWS+1];
+
+extern VideoDecData IMEM_VideoDecData[1];
+extern Vop IMEM_currVop[1];
+extern Vop IMEM_prevVop[1];
+extern PIXEL IMEM_currVop_yChan[QCIF_MBS*128*3];
+extern PIXEL IMEM_prevVop_yChan[QCIF_MBS*128*3];
+extern uint8 IMEM_pstprcTypCur[6*QCIF_MBS];
+extern uint8 IMEM_pstprcTypPrv[6*QCIF_MBS];
+
+
+extern Vop IMEM_vopHEADER[2];
+extern Vol IMEM_VOL[2];
+extern Vop IMEM_vopHeader[2][1];
+extern Vol IMEM_vol[2][1];
+
+#endif
+
+/* ======================================================================== */
+/* Function : PVInitVideoDecoder() */
+/* Date : 04/11/2000, 08/29/2000 */
+/* Purpose : Initialization of the MPEG-4 video decoder library. */
+/* The return type is Bool instead of PV_STATUS because */
+/* we don't want to expose PV_STATUS to (outside) programmers */
+/* that use our decoder library SDK. */
+/* In/out : */
+/* Return : PV_TRUE if successed, PV_FALSE if failed. */
+/* Modified : */
+/* ======================================================================== */
+OSCL_EXPORT_REF Bool PVInitVideoDecoder(VideoDecControls *decCtrl, uint8 *volbuf[],
+ int32 *volbuf_size, int nLayers, int width, int height, MP4DecodingMode mode)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ Bool status = PV_TRUE;
+ int idx;
+ BitstreamDecVideo *stream;
+
+
+ oscl_memset(decCtrl, 0, sizeof(VideoDecControls)); /* fix a size bug. 03/28/2001 */
+ decCtrl->nLayers = nLayers;
+ for (idx = 0; idx < nLayers; idx++)
+ {
+ decCtrl->volbuf[idx] = volbuf[idx];
+ decCtrl->volbuf_size[idx] = volbuf_size[idx];
+ }
+
+ /* memory allocation & initialization */
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video = IMEM_VideoDecData;
+#else
+ video = (VideoDecData *) oscl_malloc(sizeof(VideoDecData));
+#endif
+ if (video != NULL)
+ {
+ oscl_memset(video, 0, sizeof(VideoDecData));
+ video->memoryUsage = sizeof(VideoDecData);
+ video->numberOfLayers = nLayers;
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->vol = (Vol **) IMEM_VOL;
+#else
+ video->vol = (Vol **) oscl_malloc(nLayers * sizeof(Vol *));
+#endif
+ if (video->vol == NULL) status = PV_FALSE;
+ video->memoryUsage += nLayers * sizeof(Vol *);
+
+
+ /* we need to setup this pointer for the application to */
+ /* pass it around. */
+ decCtrl->videoDecoderData = (void *) video;
+ video->videoDecControls = decCtrl; /* yes. we have a cyclic */
+ /* references here :) */
+
+ /* Allocating Vop space, this has to change when we add */
+ /* spatial scalability to the decoder */
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->currVop = IMEM_currVop;
+ if (video->currVop == NULL) status = PV_FALSE;
+ else oscl_memset(video->currVop, 0, sizeof(Vop));
+ video->prevVop = IMEM_prevVop;
+ if (video->prevVop == NULL) status = PV_FALSE;
+ else oscl_memset(video->prevVop, 0, sizeof(Vop));
+ video->memoryUsage += (sizeof(Vop) * 2);
+ video->vopHeader = (Vop **) IMEM_vopHEADER;
+#else
+
+ video->currVop = (Vop *) oscl_malloc(sizeof(Vop));
+ if (video->currVop == NULL) status = PV_FALSE;
+ else oscl_memset(video->currVop, 0, sizeof(Vop));
+ video->prevVop = (Vop *) oscl_malloc(sizeof(Vop));
+ if (video->prevVop == NULL) status = PV_FALSE;
+ else oscl_memset(video->prevVop, 0, sizeof(Vop));
+ video->memoryUsage += (sizeof(Vop) * 2);
+
+ video->vopHeader = (Vop **) oscl_malloc(sizeof(Vop *) * nLayers);
+#endif
+ if (video->vopHeader == NULL) status = PV_FALSE;
+ else oscl_memset(video->vopHeader, 0, sizeof(Vop *)*nLayers);
+ video->memoryUsage += (sizeof(Vop *) * nLayers);
+
+ video->initialized = PV_FALSE;
+ /* Decode the header to get all information to allocate data */
+ if (status == PV_TRUE)
+ {
+ /* initialize decoded frame counter. 04/24/2001 */
+ video->frame_idx = -1;
+
+
+ for (idx = 0; idx < nLayers; idx++)
+ {
+
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->vopHeader[idx] = IMEM_vopHeader[idx];
+#else
+ video->vopHeader[idx] = (Vop *) oscl_malloc(sizeof(Vop));
+#endif
+ if (video->vopHeader[idx] == NULL)
+ {
+ status = PV_FALSE;
+ break;
+ }
+ else
+ {
+ oscl_memset(video->vopHeader[idx], 0, sizeof(Vop));
+ video->vopHeader[idx]->timeStamp = 0;
+ video->memoryUsage += (sizeof(Vop));
+ }
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->vol[idx] = IMEM_vol[idx];
+ video->memoryUsage += sizeof(Vol);
+ oscl_memset(video->vol[idx], 0, sizeof(Vol));
+ if (video->vol[idx] == NULL) status = PV_FALSE;
+ stream = IMEM_BitstreamDecVideo;
+#else
+ video->vol[idx] = (Vol *) oscl_malloc(sizeof(Vol));
+ if (video->vol[idx] == NULL)
+ {
+ status = PV_FALSE;
+ break;
+ }
+ else
+ {
+ video->memoryUsage += sizeof(Vol);
+ oscl_memset(video->vol[idx], 0, sizeof(Vol));
+ }
+
+ stream = (BitstreamDecVideo *) oscl_malloc(sizeof(BitstreamDecVideo));
+#endif
+ video->memoryUsage += sizeof(BitstreamDecVideo);
+ if (stream == NULL)
+ {
+ status = PV_FALSE;
+ break;
+ }
+ else
+ {
+ int32 buffer_size;
+ if ((buffer_size = BitstreamOpen(stream, idx)) < 0)
+ {
+ mp4dec_log("InitVideoDecoder(): Can't allocate bitstream buffer.\n");
+ status = PV_FALSE;
+ break;
+ }
+ video->memoryUsage += buffer_size;
+ video->vol[idx]->bitstream = stream;
+ video->vol[idx]->volID = idx;
+ video->vol[idx]->timeInc_offset = 0; /* 11/12/01 */
+ video->vlcDecCoeffIntra = &VlcDecTCOEFShortHeader;
+ video->vlcDecCoeffInter = &VlcDecTCOEFShortHeader;
+ if (mode == MPEG4_MODE)
+ {
+ /* Set up VOL header bitstream for frame-based decoding. 08/30/2000 */
+ BitstreamReset(stream, decCtrl->volbuf[idx], decCtrl->volbuf_size[idx]);
+
+ switch (DecodeVOLHeader(video, idx))
+ {
+ case PV_SUCCESS :
+ if (status == PV_TRUE)
+ status = PV_TRUE; /* we want to make sure that if first layer is bad, second layer is good return PV_FAIL */
+ else
+ status = PV_FALSE;
+ break;
+#ifdef PV_TOLERATE_VOL_ERRORS
+ case PV_BAD_VOLHEADER:
+ status = PV_TRUE;
+ break;
+#endif
+ default :
+ status = PV_FALSE;
+ break;
+ }
+
+ }
+ else
+ {
+ video->shortVideoHeader = PV_TRUE;
+ }
+
+ if (video->shortVideoHeader == PV_TRUE)
+ {
+ mode = H263_MODE;
+ /* Set max width and height. In H.263 mode, we use */
+ /* volbuf_size[0] to pass in width and volbuf_size[1] */
+ /* to pass in height. 04/23/2001 */
+ video->prevVop->temporalRef = 0; /* 11/12/01 */
+ /* Compute some convenience variables: 04/23/2001 */
+ video->vol[idx]->quantType = 0;
+ video->vol[idx]->quantPrecision = 5;
+ video->vol[idx]->errorResDisable = 1;
+ video->vol[idx]->dataPartitioning = 0;
+ video->vol[idx]->useReverseVLC = 0;
+ video->intra_acdcPredDisable = 1;
+ video->vol[idx]->scalability = 0;
+ video->size = (int32)width * height;
+
+ video->displayWidth = video->width = width;
+ video->displayHeight = video->height = height;
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ video->modified_quant = 0;
+ video->advanced_INTRA = 0;
+ video->deblocking = 0;
+ video->slice_structure = 0;
+#endif
+ }
+
+ }
+ }
+
+ }
+ if (status != PV_FALSE)
+ {
+ status = PVAllocVideoData(decCtrl, width, height, nLayers);
+ video->initialized = PV_TRUE;
+ }
+ }
+ else
+ {
+ status = PV_FALSE;
+ }
+
+ if (status == PV_FALSE) PVCleanUpVideoDecoder(decCtrl);
+
+ return status;
+}
+
+Bool PVAllocVideoData(VideoDecControls *decCtrl, int width, int height, int nLayers)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ Bool status = PV_TRUE;
+ int nTotalMB;
+ int nMBPerRow;
+ int32 size;
+
+ if (video->shortVideoHeader == PV_TRUE)
+ {
+ video->displayWidth = video->width = width;
+ video->displayHeight = video->height = height;
+
+ video->nMBPerRow =
+ video->nMBinGOB = video->width / MB_SIZE;
+ video->nMBPerCol =
+ video->nGOBinVop = video->height / MB_SIZE;
+ video->nTotalMB =
+ video->nMBPerRow * video->nMBPerCol;
+ }
+
+ size = (int32)sizeof(PIXEL) * video->width * video->height;
+#ifdef PV_MEMORY_POOL
+ decCtrl->size = size;
+#else
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->currVop->yChan = IMEM_currVop_yChan; /* Allocate memory for all VOP OKA 3/2/1*/
+ if (video->currVop->yChan == NULL) status = PV_FALSE;
+ video->currVop->uChan = video->currVop->yChan + size;
+ video->currVop->vChan = video->currVop->uChan + (size >> 2);
+
+ video->prevVop->yChan = IMEM_prevVop_yChan; /* Allocate memory for all VOP OKA 3/2/1*/
+ if (video->prevVop->yChan == NULL) status = PV_FALSE;
+ video->prevVop->uChan = video->prevVop->yChan + size;
+ video->prevVop->vChan = video->prevVop->uChan + (size >> 2);
+#else
+ video->currVop->yChan = (PIXEL *) oscl_malloc(size * 3 / 2); /* Allocate memory for all VOP OKA 3/2/1*/
+ if (video->currVop->yChan == NULL) status = PV_FALSE;
+
+ video->currVop->uChan = video->currVop->yChan + size;
+ video->currVop->vChan = video->currVop->uChan + (size >> 2);
+ video->prevVop->yChan = (PIXEL *) oscl_malloc(size * 3 / 2); /* Allocate memory for all VOP OKA 3/2/1*/
+ if (video->prevVop->yChan == NULL) status = PV_FALSE;
+
+ video->prevVop->uChan = video->prevVop->yChan + size;
+ video->prevVop->vChan = video->prevVop->uChan + (size >> 2);
+#endif
+ video->memoryUsage += (size * 3);
+#endif // MEMORY_POOL
+ /* Note that baseVop, enhcVop is only used to hold enhancement */
+ /* layer header information. 05/04/2000 */
+ if (nLayers > 1)
+ {
+ video->prevEnhcVop = (Vop *) oscl_malloc(sizeof(Vop));
+ video->memoryUsage += (sizeof(Vop));
+ if (video->prevEnhcVop == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->prevEnhcVop, 0, sizeof(Vop));
+#ifndef PV_MEMORY_POOL
+ video->prevEnhcVop->yChan = (PIXEL *) oscl_malloc(size * 3 / 2); /* Allocate memory for all VOP OKA 3/2/1*/
+ if (video->prevEnhcVop->yChan == NULL) status = PV_FALSE;
+ video->prevEnhcVop->uChan = video->prevEnhcVop->yChan + size;
+ video->prevEnhcVop->vChan = video->prevEnhcVop->uChan + (size >> 2);
+ video->memoryUsage += (3 * size / 2);
+#endif
+ }
+ }
+
+ /* Allocating space for slices, AC prediction flag, and */
+ /* AC/DC prediction storage */
+ nTotalMB = video->nTotalMB;
+ nMBPerRow = video->nMBPerRow;
+
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->sliceNo = (uint8 *)(IMEM_sliceNo);
+ if (video->sliceNo == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+ video->acPredFlag = (uint8 *)(IMEM_acPredFlag);
+ if (video->acPredFlag == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB);
+ video->predDC = (typeDCStore *)(IMEM_predDC);
+ if (video->predDC == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB * sizeof(typeDCStore));
+ video->predDCAC_col = (typeDCACStore *)(IMEM_predDCAC_col);
+ if (video->predDCAC_col == NULL) status = PV_FALSE;
+ video->memoryUsage += ((nMBPerRow + 1) * sizeof(typeDCACStore));
+ video->predDCAC_row = video->predDCAC_col + 1;
+ video->headerInfo.Mode = (uint8 *)(IMEM_headerInfo_Mode);
+ if (video->headerInfo.Mode == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+ video->headerInfo.CBP = (uint8 *)(IMEM_headerInfo_CBP);
+ if (video->headerInfo.CBP == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+ video->QPMB = (int *)(IMEM_headerInfo_QPMB);
+ if (video->QPMB == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB * sizeof(int));
+ video->mblock = &IMEM_mblock;
+ if (video->mblock == NULL) status = PV_FALSE;
+ oscl_memset(video->mblock->block, 0, sizeof(int16)*6*NCOEFF_BLOCK); // Aug 23,2005
+
+ video->memoryUsage += sizeof(MacroBlock);
+ video->motX = (MOT *)(IMEM_motX);
+ if (video->motX == NULL) status = PV_FALSE;
+ video->motY = (MOT *)(IMEM_motY);
+ if (video->motY == NULL) status = PV_FALSE;
+ video->memoryUsage += (sizeof(MOT) * 8 * nTotalMB);
+#else
+ video->sliceNo = (uint8 *) oscl_malloc(nTotalMB);
+ if (video->sliceNo == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+
+ video->acPredFlag = (uint8 *) oscl_malloc(nTotalMB * sizeof(uint8));
+ if (video->acPredFlag == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB);
+
+ video->predDC = (typeDCStore *) oscl_malloc(nTotalMB * sizeof(typeDCStore));
+ if (video->predDC == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB * sizeof(typeDCStore));
+
+ video->predDCAC_col = (typeDCACStore *) oscl_malloc((nMBPerRow + 1) * sizeof(typeDCACStore));
+ if (video->predDCAC_col == NULL) status = PV_FALSE;
+ video->memoryUsage += ((nMBPerRow + 1) * sizeof(typeDCACStore));
+
+ /* element zero will be used for storing vertical (col) AC coefficients */
+ /* the rest will be used for storing horizontal (row) AC coefficients */
+ video->predDCAC_row = video->predDCAC_col + 1; /* ACDC */
+
+ /* Allocating HeaderInfo structure & Quantizer array */
+ video->headerInfo.Mode = (uint8 *) oscl_malloc(nTotalMB);
+ if (video->headerInfo.Mode == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+ video->headerInfo.CBP = (uint8 *) oscl_malloc(nTotalMB);
+ if (video->headerInfo.CBP == NULL) status = PV_FALSE;
+ video->memoryUsage += nTotalMB;
+ video->QPMB = (int16 *) oscl_malloc(nTotalMB * sizeof(int16));
+ if (video->QPMB == NULL) status = PV_FALSE;
+ video->memoryUsage += (nTotalMB * sizeof(int));
+
+ /* Allocating macroblock space */
+ video->mblock = (MacroBlock *) oscl_malloc(sizeof(MacroBlock));
+ if (video->mblock == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->mblock->block, 0, sizeof(int16)*6*NCOEFF_BLOCK); // Aug 23,2005
+
+ video->memoryUsage += sizeof(MacroBlock);
+ }
+ /* Allocating motion vector space */
+ video->motX = (MOT *) oscl_malloc(sizeof(MOT) * 4 * nTotalMB);
+ if (video->motX == NULL) status = PV_FALSE;
+ video->motY = (MOT *) oscl_malloc(sizeof(MOT) * 4 * nTotalMB);
+ if (video->motY == NULL) status = PV_FALSE;
+ video->memoryUsage += (sizeof(MOT) * 8 * nTotalMB);
+#endif
+
+#ifdef PV_POSTPROC_ON
+ /* Allocating space for post-processing Mode */
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ video->pstprcTypCur = IMEM_pstprcTypCur;
+ video->memoryUsage += (nTotalMB * 6);
+ if (video->pstprcTypCur == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->pstprcTypCur, 0, 4*nTotalMB + 2*nTotalMB);
+ }
+
+ video->pstprcTypPrv = IMEM_pstprcTypPrv;
+ video->memoryUsage += (nTotalMB * 6);
+ if (video->pstprcTypPrv == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->pstprcTypPrv, 0, nTotalMB*6);
+ }
+
+#else
+ video->pstprcTypCur = (uint8 *) oscl_malloc(nTotalMB * 6);
+ video->memoryUsage += (nTotalMB * 6);
+ if (video->pstprcTypCur == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->pstprcTypCur, 0, 4*nTotalMB + 2*nTotalMB);
+ }
+
+ video->pstprcTypPrv = (uint8 *) oscl_malloc(nTotalMB * 6);
+ video->memoryUsage += (nTotalMB * 6);
+ if (video->pstprcTypPrv == NULL)
+ {
+ status = PV_FALSE;
+ }
+ else
+ {
+ oscl_memset(video->pstprcTypPrv, 0, nTotalMB*6);
+ }
+
+#endif
+
+#endif
+
+ /* initialize the decoder library */
+ video->prevVop->predictionType = I_VOP;
+ video->prevVop->timeStamp = 0;
+#ifndef PV_MEMORY_POOL
+ oscl_memset(video->prevVop->yChan, 16, sizeof(uint8)*size); /* 10/31/01 */
+ oscl_memset(video->prevVop->uChan, 128, sizeof(uint8)*size / 2);
+
+ oscl_memset(video->currVop->yChan, 0, sizeof(uint8)*size*3 / 2);
+ if (nLayers > 1)
+ {
+ oscl_memset(video->prevEnhcVop->yChan, 0, sizeof(uint8)*size*3 / 2);
+ video->prevEnhcVop->timeStamp = 0;
+ }
+ video->concealFrame = video->prevVop->yChan; /* 07/07/2001 */
+ decCtrl->outputFrame = video->prevVop->yChan; /* 06/19/2002 */
+#endif
+
+ /* always start from base layer */
+ video->currLayer = 0;
+ return status;
+}
+
+/* ======================================================================== */
+/* Function : PVResetVideoDecoder() */
+/* Date : 01/14/2002 */
+/* Purpose : Reset video timestamps */
+/* In/out : */
+/* Return : PV_TRUE if successed, PV_FALSE if failed. */
+/* Modified : */
+/* ======================================================================== */
+Bool PVResetVideoDecoder(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ int idx;
+
+ for (idx = 0; idx < decCtrl->nLayers; idx++)
+ {
+ video->vopHeader[idx]->timeStamp = 0;
+ }
+ video->prevVop->timeStamp = 0;
+ if (decCtrl->nLayers > 1)
+ video->prevEnhcVop->timeStamp = 0;
+
+ oscl_memset(video->mblock->block, 0, sizeof(int16)*6*NCOEFF_BLOCK); // Aug 23,2005
+
+ return PV_TRUE;
+}
+
+
+/* ======================================================================== */
+/* Function : PVCleanUpVideoDecoder() */
+/* Date : 04/11/2000, 08/29/2000 */
+/* Purpose : Cleanup of the MPEG-4 video decoder library. */
+/* In/out : */
+/* Return : PV_TRUE if successed, PV_FALSE if failed. */
+/* Modified : */
+/* ======================================================================== */
+OSCL_EXPORT_REF Bool PVCleanUpVideoDecoder(VideoDecControls *decCtrl)
+{
+ int idx;
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+#ifdef DEC_INTERNAL_MEMORY_OPT
+ if (video)
+ {
+#ifdef PV_POSTPROC_ON
+ video->pstprcTypCur = NULL;
+ video->pstprcTypPrv = NULL;
+#endif
+
+ video->acPredFlag = NULL;
+ video->sliceNo = NULL;
+ video->motX = NULL;
+ video->motY = NULL;
+ video->mblock = NULL;
+ video->QPMB = NULL;
+ video->predDC = NULL;
+ video->predDCAC_row = NULL;
+ video->predDCAC_col = NULL;
+ video->headerInfo.Mode = NULL;
+ video->headerInfo.CBP = NULL;
+ if (video->numberOfLayers > 1)
+ {
+ if (video->prevEnhcVop)
+ {
+ video->prevEnhcVop->uChan = NULL;
+ video->prevEnhcVop->vChan = NULL;
+ if (video->prevEnhcVop->yChan) oscl_free(video->prevEnhcVop->yChan);
+ oscl_free(video->prevEnhcVop);
+ }
+ }
+ if (video->currVop)
+ {
+ video->currVop->uChan = NULL;
+ video->currVop->vChan = NULL;
+ if (video->currVop->yChan)
+ video->currVop->yChan = NULL;
+ video->currVop = NULL;
+ }
+ if (video->prevVop)
+ {
+ video->prevVop->uChan = NULL;
+ video->prevVop->vChan = NULL;
+ if (video->prevVop->yChan)
+ video->prevVop->yChan = NULL;
+ video->prevVop = NULL;
+ }
+
+ if (video->vol)
+ {
+ for (idx = 0; idx < video->numberOfLayers; idx++)
+ {
+ if (video->vol[idx])
+ {
+ BitstreamClose(video->vol[idx]->bitstream);
+ video->vol[idx]->bitstream = NULL;
+ video->vol[idx] = NULL;
+ }
+ video->vopHeader[idx] = NULL;
+
+ }
+ video->vol = NULL;
+ video->vopHeader = NULL;
+ }
+
+ video = NULL;
+ decCtrl->videoDecoderData = NULL;
+ }
+
+#else
+
+ if (video)
+ {
+#ifdef PV_POSTPROC_ON
+ if (video->pstprcTypCur) oscl_free(video->pstprcTypCur);
+ if (video->pstprcTypPrv) oscl_free(video->pstprcTypPrv);
+#endif
+ if (video->predDC) oscl_free(video->predDC);
+ video->predDCAC_row = NULL;
+ if (video->predDCAC_col) oscl_free(video->predDCAC_col);
+ if (video->motX) oscl_free(video->motX);
+ if (video->motY) oscl_free(video->motY);
+ if (video->mblock) oscl_free(video->mblock);
+ if (video->QPMB) oscl_free(video->QPMB);
+ if (video->headerInfo.Mode) oscl_free(video->headerInfo.Mode);
+ if (video->headerInfo.CBP) oscl_free(video->headerInfo.CBP);
+ if (video->sliceNo) oscl_free(video->sliceNo);
+ if (video->acPredFlag) oscl_free(video->acPredFlag);
+
+ if (video->numberOfLayers > 1)
+ {
+ if (video->prevEnhcVop)
+ {
+ video->prevEnhcVop->uChan = NULL;
+ video->prevEnhcVop->vChan = NULL;
+ if (video->prevEnhcVop->yChan) oscl_free(video->prevEnhcVop->yChan);
+ oscl_free(video->prevEnhcVop);
+ }
+ }
+ if (video->currVop)
+ {
+
+#ifndef PV_MEMORY_POOL
+ video->currVop->uChan = NULL;
+ video->currVop->vChan = NULL;
+ if (video->currVop->yChan)
+ oscl_free(video->currVop->yChan);
+#endif
+ oscl_free(video->currVop);
+ }
+ if (video->prevVop)
+ {
+#ifndef PV_MEMORY_POOL
+ video->prevVop->uChan = NULL;
+ video->prevVop->vChan = NULL;
+ if (video->prevVop->yChan)
+ oscl_free(video->prevVop->yChan);
+#endif
+ oscl_free(video->prevVop);
+ }
+
+ if (video->vol)
+ {
+ for (idx = 0; idx < video->numberOfLayers; idx++)
+ {
+ if (video->vol[idx])
+ {
+ if (video->vol[idx]->bitstream)
+ {
+ BitstreamClose(video->vol[idx]->bitstream);
+ oscl_free(video->vol[idx]->bitstream);
+ }
+ oscl_free(video->vol[idx]);
+ }
+
+ }
+ oscl_free(video->vol);
+ }
+
+ for (idx = 0; idx < video->numberOfLayers; idx++)
+ {
+ if (video->vopHeader[idx]) oscl_free(video->vopHeader[idx]);
+ }
+
+ if (video->vopHeader) oscl_free(video->vopHeader);
+
+ oscl_free(video);
+ decCtrl->videoDecoderData = NULL;
+ }
+#endif
+ return PV_TRUE;
+}
+/* ======================================================================== */
+/* Function : PVGetVideoDimensions() */
+/* Date : 040505 */
+/* Purpose : */
+/* In/out : */
+/* Return : the display_width and display_height of */
+/* the frame in the current layer. */
+/* Note : This is not a macro or inline function because we do */
+/* not want to expose our internal data structure. */
+/* Modified : */
+/* ======================================================================== */
+OSCL_EXPORT_REF void PVGetVideoDimensions(VideoDecControls *decCtrl, int32 *display_width, int32 *display_height)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ *display_width = video->displayWidth;
+ *display_height = video->displayHeight;
+}
+
+/* ======================================================================== */
+/* Function : PVGetVideoTimeStamp() */
+/* Date : 04/27/2000, 08/29/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : current time stamp in millisecond. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+uint32 PVGetVideoTimeStamp(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ return video->currTimestamp;
+}
+
+
+/* ======================================================================== */
+/* Function : PVSetPostProcType() */
+/* Date : 07/07/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : Set post-processing filter type. */
+/* Note : */
+/* Modified : . 08/29/2000 changes the name for consistency. */
+/* ======================================================================== */
+OSCL_EXPORT_REF void PVSetPostProcType(VideoDecControls *decCtrl, int mode)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ video->postFilterType = mode;
+}
+
+
+/* ======================================================================== */
+/* Function : PVGetDecBitrate() */
+/* Date : 08/23/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns the average bits per second. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+int PVGetDecBitrate(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ int idx;
+ int32 sum = 0;
+
+ for (idx = 0; idx < BITRATE_AVERAGE_WINDOW; idx++)
+ {
+ sum += video->nBitsPerVop[idx];
+ }
+ sum = (sum * video->frameRate) / (10 * BITRATE_AVERAGE_WINDOW);
+ return (int) sum;
+}
+
+
+/* ======================================================================== */
+/* Function : PVGetDecFramerate() */
+/* Date : 08/23/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns the average frame per 10 second. */
+/* Note : The fps can be calculated by PVGetDecFramerate()/10 */
+/* Modified : */
+/* ======================================================================== */
+int PVGetDecFramerate(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+
+ return video->frameRate;
+}
+
+/* ======================================================================== */
+/* Function : PVGetOutputFrame() */
+/* Date : 05/07/2001 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns the pointer to the output frame */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+uint8 *PVGetDecOutputFrame(VideoDecControls *decCtrl)
+{
+ return decCtrl->outputFrame;
+}
+
+/* ======================================================================== */
+/* Function : PVGetLayerID() */
+/* Date : 07/09/2001 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns decoded frame layer id (BASE/ENHANCE) */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+int PVGetLayerID(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ return video->currLayer;
+}
+/* ======================================================================== */
+/* Function : PVGetDecMemoryUsage() */
+/* Date : 08/23/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns the amount of memory used. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+int32 PVGetDecMemoryUsage(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ return video->memoryUsage;
+}
+
+
+/* ======================================================================== */
+/* Function : PVGetDecBitstreamMode() */
+/* Date : 08/23/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function returns the decoding mode of the baselayer */
+/* bitstream. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+OSCL_EXPORT_REF MP4DecodingMode PVGetDecBitstreamMode(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ if (video->shortVideoHeader)
+ {
+ return H263_MODE;
+ }
+ else
+ {
+ return MPEG4_MODE;
+ }
+}
+
+
+/* ======================================================================== */
+/* Function : PVExtractVolHeader() */
+/* Date : 08/29/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : Extract vol header of the bitstream from buffer[]. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool PVExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size)
+{
+ int idx = -1;
+ uint8 start_code_prefix[] = { 0x00, 0x00, 0x01 };
+ uint8 h263_prefix[] = { 0x00, 0x00, 0x80 };
+
+ if (oscl_memcmp(h263_prefix, video_buffer, 3) == 0) /* we have short header stream */
+ {
+ oscl_memcpy(vol_header, video_buffer, 32);
+ *vol_header_size = 32;
+ return TRUE;
+ }
+ else
+ {
+ if (oscl_memcmp(start_code_prefix, video_buffer, 3) ||
+ (video_buffer[3] != 0xb0 && video_buffer[3] >= 0x20)) return FALSE;
+
+ do
+ {
+ idx++;
+ while (oscl_memcmp(start_code_prefix, video_buffer + idx, 3))
+ {
+ idx++;
+ if (idx + 3 >= *vol_header_size) goto quit;
+ }
+ }
+ while (video_buffer[idx+3] != 0xb3 && video_buffer[idx+3] != 0xb6);
+
+ oscl_memcpy(vol_header, video_buffer, idx);
+ *vol_header_size = idx;
+ return TRUE;
+ }
+
+quit:
+ oscl_memcpy(vol_header, video_buffer, *vol_header_size);
+ return FALSE;
+}
+
+
+/* ======================================================================== */
+/* Function : PVLocateFrameHeader() */
+/* Date : 04/8/2005 */
+/* Purpose : */
+/* In/out : */
+/* Return : Return the offset to the first SC in the buffer */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+int32 PVLocateFrameHeader(uint8 *ptr, int32 size)
+{
+ int count = 0;
+ int32 i = size;
+
+ if (size < 1)
+ {
+ return 0;
+ }
+ while (i--)
+ {
+ if ((count > 1) && (*ptr == 0x01))
+ {
+ i += 2;
+ break;
+ }
+
+ if (*ptr++)
+ count = 0;
+ else
+ count++;
+ }
+ return (size - (i + 1));
+}
+
+
+/* ======================================================================== */
+/* Function : PVLocateH263FrameHeader() */
+/* Date : 04/8/2005 */
+/* Purpose : */
+/* In/out : */
+/* Return : Return the offset to the first SC in the buffer */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+int32 PVLocateH263FrameHeader(uint8 *ptr, int32 size)
+{
+ int count = 0;
+ int32 i = size;
+
+ if (size < 1)
+ {
+ return 0;
+ }
+
+ while (i--)
+ {
+ if ((count > 1) && ((*ptr & 0xFC) == 0x80))
+ {
+ i += 2;
+ break;
+ }
+
+ if (*ptr++)
+ count = 0;
+ else
+ count++;
+ }
+ return (size - (i + 1));
+}
+
+
+/* ======================================================================== */
+/* Function : PVDecodeVideoFrame() */
+/* Date : 08/29/2000 */
+/* Purpose : Decode one video frame and return a YUV-12 image. */
+/* In/out : */
+/* Return : */
+/* Note : */
+/* Modified : 04/17/2001 removed PV_EOS, PV_END_OF_BUFFER */
+/* : 08/22/2002 break up into 2 functions PVDecodeVopHeader and */
+/* PVDecodeVopBody */
+/* ======================================================================== */
+OSCL_EXPORT_REF Bool PVDecodeVideoFrame(VideoDecControls *decCtrl, uint8 *buffer[],
+ uint32 timestamp[], int32 buffer_size[], uint use_ext_timestamp[], uint8 *currYUV)
+{
+ PV_STATUS status = PV_FAIL;
+ VopHeaderInfo header_info;
+
+ status = (PV_STATUS)PVDecodeVopHeader(decCtrl, buffer, timestamp, buffer_size, &header_info, use_ext_timestamp, currYUV);
+ if (status != PV_TRUE)
+ return PV_FALSE;
+
+ if (PVDecodeVopBody(decCtrl, buffer_size) != PV_TRUE)
+ {
+ return PV_FALSE;
+ }
+
+ return PV_TRUE;
+}
+
+/* ======================================================================== */
+/* Function : PVDecodeVopHeader() */
+/* Date : 08/22/2002 */
+/* Purpose : Determine target layer and decode vop header, modified from */
+/* original PVDecodeVideoFrame. */
+/* In/out : */
+/* Return : */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool PVDecodeVopHeader(VideoDecControls *decCtrl, uint8 *buffer[],
+ uint32 timestamp[], int32 buffer_size[], VopHeaderInfo *header_info, uint use_ext_timestamp [], uint8 *currYUV)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ Vol *currVol;
+ Vop *currVop = video->currVop;
+ Vop **vopHeader = video->vopHeader;
+ BitstreamDecVideo *stream;
+
+ int target_layer;
+
+#ifdef PV_SUPPORT_TEMPORAL_SCALABILITY
+ PV_STATUS status = PV_FAIL;
+ int idx;
+ int32 display_time;
+
+ /* decide which frame to decode next */
+ if (decCtrl->nLayers > 1)
+ {
+ display_time = target_layer = -1;
+ for (idx = 0; idx < decCtrl->nLayers; idx++)
+ {
+ /* do we have data for this layer? */
+ if (buffer_size[idx] <= 0)
+ {
+ timestamp[idx] = -1;
+ continue;
+ }
+
+ /* did the application provide a timestamp for this vop? */
+ if (timestamp[idx] < 0)
+ {
+ if (vopHeader[idx]->timeStamp < 0)
+ {
+ /* decode the timestamp in the bitstream */
+ video->currLayer = idx;
+ stream = video->vol[idx]->bitstream;
+ BitstreamReset(stream, buffer[idx], buffer_size[idx]);
+
+ while ((status = DecodeVOPHeader(video, vopHeader[idx], FALSE)) != PV_SUCCESS)
+ {
+ /* Try to find a VOP header in the buffer. 08/30/2000. */
+ if (PVSearchNextM4VFrame(stream) != PV_SUCCESS)
+ {
+ /* if we don't have data for enhancement layer, */
+ /* don't just stop. 09/07/2000. */
+ buffer_size[idx] = 0;
+ break;
+ }
+ }
+ if (status == PV_SUCCESS)
+ {
+ vopHeader[idx]->timeStamp =
+ timestamp[idx] = CalcVopDisplayTime(video->vol[idx], vopHeader[idx], video->shortVideoHeader);
+ if (idx == 0) vopHeader[idx]->refSelectCode = 1;
+ }
+ }
+ else
+ {
+ /* We've decoded this vop header in the previous run already. */
+ timestamp[idx] = vopHeader[idx]->timeStamp;
+ }
+ }
+
+ /* Use timestamps to select the next VOP to be decoded */
+ if (timestamp[idx] >= 0 && (display_time < 0 || display_time > timestamp[idx]))
+ {
+ display_time = timestamp[idx];
+ target_layer = idx;
+ }
+ else if (display_time == timestamp[idx])
+ {
+ /* we have to handle either SNR or spatial scalability here. */
+ }
+ }
+ if (target_layer < 0) return PV_FALSE;
+
+ /* set up for decoding the target layer */
+ video->currLayer = target_layer;
+ currVol = video->vol[target_layer];
+ video->bitstream = stream = currVol->bitstream;
+
+ /* We need to decode the vop header if external timestamp */
+ /* is provided. 10/04/2000 */
+ if (vopHeader[target_layer]->timeStamp < 0)
+ {
+ stream = video->vol[target_layer]->bitstream;
+ BitstreamReset(stream, buffer[target_layer], buffer_size[target_layer]);
+
+ while (DecodeVOPHeader(video, vopHeader[target_layer], TRUE) != PV_SUCCESS)
+ {
+ /* Try to find a VOP header in the buffer. 08/30/2000. */
+ if (PVSearchNextM4VFrame(stream) != PV_SUCCESS)
+ {
+ /* if we don't have data for enhancement layer, */
+ /* don't just stop. 09/07/2000. */
+ buffer_size[target_layer] = 0;
+ break;
+ }
+ }
+ video->vol[target_layer]->timeInc_offset = vopHeader[target_layer]->timeInc;
+ video->vol[target_layer]->moduloTimeBase = timestamp[target_layer];
+ vopHeader[target_layer]->timeStamp = timestamp[target_layer];
+ if (target_layer == 0) vopHeader[target_layer]->refSelectCode = 1;
+ }
+ }
+ else /* base layer only decoding */
+ {
+#endif
+ video->currLayer = target_layer = 0;
+ currVol = video->vol[0];
+ video->bitstream = stream = currVol->bitstream;
+ if (buffer_size[0] <= 0) return PV_FALSE;
+ BitstreamReset(stream, buffer[0], buffer_size[0]);
+
+ if (video->shortVideoHeader)
+ {
+ while (DecodeShortHeader(video, vopHeader[0]) != PV_SUCCESS)
+ {
+ if (PVSearchNextH263Frame(stream) != PV_SUCCESS)
+ {
+ /* There is no vop header in the buffer, */
+ /* clean bitstream buffer. 2/5/2001 */
+ buffer_size[0] = 0;
+ if (video->initialized == PV_FALSE)
+ {
+ video->displayWidth = video->width = 0;
+ video->displayHeight = video->height = 0;
+ }
+ return PV_FALSE;
+ }
+ }
+
+ if (use_ext_timestamp[0])
+ {
+ /* MTB for H263 is absolute TR */
+ /* following line is equivalent to round((timestamp[0]*30)/1001); 11/13/2001 */
+ video->vol[0]->moduloTimeBase = 30 * ((timestamp[0] + 17) / 1001) + (30 * ((timestamp[0] + 17) % 1001) / 1001);
+ vopHeader[0]->timeStamp = timestamp[0];
+ }
+ else
+ vopHeader[0]->timeStamp = CalcVopDisplayTime(currVol, vopHeader[0], video->shortVideoHeader);
+ }
+ else
+ {
+ while (DecodeVOPHeader(video, vopHeader[0], FALSE) != PV_SUCCESS)
+ {
+ /* Try to find a VOP header in the buffer. 08/30/2000. */
+ if (PVSearchNextM4VFrame(stream) != PV_SUCCESS)
+ {
+ /* There is no vop header in the buffer, */
+ /* clean bitstream buffer. 2/5/2001 */
+ buffer_size[0] = 0;
+ return PV_FALSE;
+ }
+ }
+
+ if (use_ext_timestamp[0])
+ {
+ video->vol[0]->timeInc_offset = vopHeader[0]->timeInc;
+ video->vol[0]->moduloTimeBase = timestamp[0]; /* 11/12/2001 */
+ vopHeader[0]->timeStamp = timestamp[0];
+ }
+ else
+ {
+ vopHeader[0]->timeStamp = CalcVopDisplayTime(currVol, vopHeader[0], video->shortVideoHeader);
+ }
+ }
+
+ /* set up some base-layer only parameters */
+ vopHeader[0]->refSelectCode = 1;
+#ifdef PV_SUPPORT_TEMPORAL_SCALABILITY
+ }
+#endif
+ timestamp[target_layer] = video->currTimestamp = vopHeader[target_layer]->timeStamp;
+#ifdef PV_MEMORY_POOL
+ vopHeader[target_layer]->yChan = (PIXEL *)currYUV;
+ vopHeader[target_layer]->uChan = (PIXEL *)currYUV + decCtrl->size;
+ vopHeader[target_layer]->vChan = (PIXEL *)(vopHeader[target_layer]->uChan) + (decCtrl->size >> 2);
+#else
+ vopHeader[target_layer]->yChan = currVop->yChan;
+ vopHeader[target_layer]->uChan = currVop->uChan;
+ vopHeader[target_layer]->vChan = currVop->vChan;
+#endif
+ oscl_memcpy(currVop, vopHeader[target_layer], sizeof(Vop));
+
+#ifdef PV_SUPPORT_TEMPORAL_SCALABILITY
+ vopHeader[target_layer]->timeStamp = -1;
+#endif
+ /* put header info into the structure */
+ header_info->currLayer = target_layer;
+ header_info->timestamp = video->currTimestamp;
+ header_info->frameType = (MP4FrameType)currVop->predictionType;
+ header_info->refSelCode = vopHeader[target_layer]->refSelectCode;
+ header_info->quantizer = currVop->quantizer;
+ /***************************************/
+
+ return PV_TRUE;
+}
+
+
+/* ======================================================================== */
+/* Function : PVDecodeVopBody() */
+/* Date : 08/22/2002 */
+/* Purpose : Decode vop body after the header is decoded, modified from */
+/* original PVDecodeVideoFrame. */
+/* In/out : */
+/* Return : */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool PVDecodeVopBody(VideoDecControls *decCtrl, int32 buffer_size[])
+{
+ PV_STATUS status = PV_FAIL;
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ int target_layer = video->currLayer;
+ Vol *currVol = video->vol[target_layer];
+ Vop *currVop = video->currVop;
+ Vop *prevVop = video->prevVop;
+ Vop *tempVopPtr;
+ int bytes_consumed = 0; /* Record how many bits we used in the buffer. 04/24/2001 */
+
+ int idx;
+
+ if (currVop->vopCoded == 0) /* 07/03/2001 */
+ {
+ PV_BitstreamByteAlign(currVol->bitstream);
+ /* We should always clear up bitstream buffer. 10/10/2000 */
+ bytes_consumed = (getPointer(currVol->bitstream) + 7) >> 3;
+
+ if (bytes_consumed > currVol->bitstream->data_end_pos)
+ {
+ bytes_consumed = currVol->bitstream->data_end_pos;
+ }
+
+ if (bytes_consumed < buffer_size[target_layer])
+ {
+ /* If we only consume part of the bits in the buffer, take those */
+ /* out. 04/24/2001 */
+ /* oscl_memcpy(buffer[target_layer], buffer[target_layer]+bytes_consumed,
+ (buffer_size[target_layer]-=bytes_consumed)); */
+ buffer_size[target_layer] -= bytes_consumed;
+ }
+ else
+ {
+ buffer_size[target_layer] = 0;
+ }
+#ifdef PV_MEMORY_POOL
+
+ if (target_layer)
+ {
+ if (video->prevEnhcVop->timeStamp > video->prevVop->timeStamp)
+ {
+ video->prevVop = video->prevEnhcVop;
+ }
+ }
+
+ oscl_memcpy(currVop->yChan, video->prevVop->yChan, (decCtrl->size*3) / 2);
+
+ video->prevVop = prevVop;
+
+ video->concealFrame = currVop->yChan; /* 07/07/2001 */
+
+ video->vop_coding_type = currVop->predictionType; /* 07/09/01 */
+
+ decCtrl->outputFrame = currVop->yChan;
+
+ /* Swap VOP pointers. No enhc. frame oscl_memcpy() anymore! 04/24/2001 */
+ if (target_layer)
+ {
+ tempVopPtr = video->prevEnhcVop;
+ video->prevEnhcVop = video->currVop;
+ video->currVop = tempVopPtr;
+ }
+ else
+ {
+ tempVopPtr = video->prevVop;
+ video->prevVop = video->currVop;
+ video->currVop = tempVopPtr;
+ }
+#else
+ if (target_layer) /* this is necessary to avoid flashback problems 06/21/2002*/
+ {
+ video->prevEnhcVop->timeStamp = currVop->timeStamp;
+ }
+ else
+ {
+ video->prevVop->timeStamp = currVop->timeStamp;
+ }
+#endif
+ video->vop_coding_type = currVop->predictionType; /* 07/09/01 */
+ /* the following is necessary to avoid displaying an notCoded I-VOP at the beginning of a session
+ or after random positioning 07/03/02*/
+ if (currVop->predictionType == I_VOP)
+ {
+ video->vop_coding_type = P_VOP;
+ }
+
+
+ return PV_TRUE;
+ }
+ /* ======================================================= */
+ /* Decode vop body (if there is no error in the header!) */
+ /* ======================================================= */
+
+ /* first, we need to select a reference frame */
+ if (decCtrl->nLayers > 1)
+ {
+ if (currVop->predictionType == I_VOP)
+ {
+ /* do nothing here */
+ }
+ else if (currVop->predictionType == P_VOP)
+ {
+ switch (currVop->refSelectCode)
+ {
+ case 0 : /* most recently decoded enhancement vop */
+ /* Setup video->prevVop before we call PV_DecodeVop(). 04/24/2001 */
+ if (video->prevEnhcVop->timeStamp >= video->prevVop->timeStamp)
+ video->prevVop = video->prevEnhcVop;
+ break;
+
+ case 1 : /* most recently displayed base-layer vop */
+ if (target_layer)
+ {
+ if (video->prevEnhcVop->timeStamp > video->prevVop->timeStamp)
+ video->prevVop = video->prevEnhcVop;
+ }
+ break;
+
+ case 2 : /* next base-layer vop in display order */
+ break;
+
+ case 3 : /* temporally coincident base-layer vop (no MV's) */
+ break;
+ }
+ }
+ else /* we have a B-Vop */
+ {
+ mp4dec_log("DecodeVideoFrame(): B-VOP not supported.\n");
+ }
+ }
+
+ /* This is for the calculation of the frame rate and bitrate. */
+ idx = ++video->frame_idx % BITRATE_AVERAGE_WINDOW;
+
+ /* Calculate bitrate for this layer. 08/23/2000 */
+ status = PV_DecodeVop(video);
+ video->nBitsPerVop[idx] = getPointer(currVol->bitstream);
+ video->prevTimestamp[idx] = currVop->timeStamp;
+
+ /* restore video->prevVop after PV_DecodeVop(). 04/24/2001 */
+// if (currVop->refSelectCode == 0) video->prevVop = prevVop;
+ video->prevVop = prevVop;
+
+ /* Estimate the frame rate. 08/23/2000 */
+ video->duration = video->prevTimestamp[idx];
+ video->duration -= video->prevTimestamp[(++idx)%BITRATE_AVERAGE_WINDOW];
+ if (video->duration > 0)
+ { /* Only update framerate when the timestamp is right */
+ video->frameRate = (int)(FRAMERATE_SCALE) / video->duration;
+ }
+
+ /* We should always clear up bitstream buffer. 10/10/2000 */
+ bytes_consumed = (getPointer(currVol->bitstream) + 7) >> 3; /* 11/4/03 */
+
+ if (bytes_consumed > currVol->bitstream->data_end_pos)
+ {
+ bytes_consumed = currVol->bitstream->data_end_pos;
+ }
+
+ if (bytes_consumed < buffer_size[target_layer])
+ {
+ /* If we only consume part of the bits in the buffer, take those */
+ /* out. 04/24/2001 */
+ /* oscl_memcpy(buffer[target_layer], buffer[target_layer]+bytes_consumed,
+ (buffer_size[target_layer]-=bytes_consumed)); */
+ buffer_size[target_layer] -= bytes_consumed;
+ }
+ else
+ {
+ buffer_size[target_layer] = 0;
+ }
+ switch (status)
+ {
+ case PV_FAIL :
+ return PV_FALSE; /* this will take care of concealment if we lose whole frame */
+
+ case PV_END_OF_VOP :
+ /* we may want to differenciate PV_END_OF_VOP and PV_SUCCESS */
+ /* in the future. 05/10/2000 */
+
+ case PV_SUCCESS :
+ /* Nohting is wrong :). */
+
+
+ video->concealFrame = video->currVop->yChan; /* 07/07/2001 */
+
+ video->vop_coding_type = video->currVop->predictionType; /* 07/09/01 */
+
+ decCtrl->outputFrame = video->currVop->yChan;
+
+ /* Swap VOP pointers. No enhc. frame oscl_memcpy() anymore! 04/24/2001 */
+ if (target_layer)
+ {
+ tempVopPtr = video->prevEnhcVop;
+ video->prevEnhcVop = video->currVop;
+ video->currVop = tempVopPtr;
+ }
+ else
+ {
+ tempVopPtr = video->prevVop;
+ video->prevVop = video->currVop;
+ video->currVop = tempVopPtr;
+ }
+ break;
+
+ default :
+ /* This will never happen */
+ break;
+ }
+
+ return PV_TRUE;
+}
+
+#ifdef PV_MEMORY_POOL
+OSCL_EXPORT_REF void PVSetReferenceYUV(VideoDecControls *decCtrl, uint8 *YUV)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ video->prevVop->yChan = (PIXEL *)YUV;
+ video->prevVop->uChan = (PIXEL *)YUV + video->size;
+ video->prevVop->vChan = (PIXEL *)video->prevVop->uChan + (decCtrl->size >> 2);
+ oscl_memset(video->prevVop->yChan, 16, sizeof(uint8)*decCtrl->size); /* 10/31/01 */
+ oscl_memset(video->prevVop->uChan, 128, sizeof(uint8)*decCtrl->size / 2);
+ video->concealFrame = video->prevVop->yChan; /* 07/07/2001 */
+ decCtrl->outputFrame = video->prevVop->yChan; /* 06/19/2002 */
+}
+#endif
+
+
+/* ======================================================================== */
+/* Function : VideoDecoderErrorDetected() */
+/* Date : 06/20/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : This function will be called everytime an error int the */
+/* bitstream is detected. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+uint VideoDecoderErrorDetected(VideoDecData *)
+{
+ /* This is only used for trapping bitstream error for debuging */
+ return 0;
+}
+
+#ifdef ENABLE_LOG
+#include <stdio.h>
+#include <stdarg.h>
+/* ======================================================================== */
+/* Function : m4vdec_dprintf() */
+/* Date : 08/15/2000 */
+/* Purpose : This is a function that logs messages in the mpeg4 video */
+/* decoder. We can call the standard PacketVideo PVMessage */
+/* from inside this function if necessary. */
+/* In/out : */
+/* Return : */
+/* Note : To turn on the logging, LOG_MP4DEC_MESSAGE must be defined */
+/* when compiling this file (only this file). */
+/* Modified : */
+/* ======================================================================== */
+void m4vdec_dprintf(char *format, ...)
+{
+ FILE *log_fp;
+ va_list args;
+ va_start(args, format);
+
+ /* open the log file */
+ log_fp = fopen("\\mp4dec_log.txt", "a+");
+ if (log_fp == NULL) return;
+ /* output the message */
+ vfprintf(log_fp, format, args);
+ fclose(log_fp);
+
+ va_end(args);
+}
+#endif
+
+
+/* ======================================================================== */
+/* Function : IsIntraFrame() */
+/* Date : 05/29/2000 */
+/* Purpose : */
+/* In/out : */
+/* Return : The most recently decoded frame is an Intra frame. */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool IsIntraFrame(VideoDecControls *decCtrl)
+{
+ VideoDecData *video = (VideoDecData *)decCtrl->videoDecoderData;
+ return (video->vop_coding_type == I_VOP);
+}
+
+/* ======================================================================== */
+/* Function : PVDecPostProcess() */
+/* Date : 01/09/2002 */
+/* Purpose : PostProcess one video frame and return a YUV-12 image. */
+/* In/out : */
+/* Return : */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+void PVDecPostProcess(VideoDecControls *decCtrl, uint8 *outputYUV)
+{
+ uint8 *outputBuffer;
+#ifdef PV_POSTPROC_ON
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ int32 tmpvar;
+ if (outputYUV)
+ {
+ outputBuffer = outputYUV;
+ }
+ else
+ {
+ if (video->postFilterType)
+ {
+ outputBuffer = video->currVop->yChan;
+ }
+ else
+ {
+ outputBuffer = decCtrl->outputFrame;
+ }
+ }
+
+ if (video->postFilterType)
+ {
+ /* Post-processing, */
+ PostFilter(video, video->postFilterType, outputBuffer);
+ }
+ else
+ {
+ if (outputYUV)
+ {
+ /* Copy decoded frame to the output buffer. */
+ tmpvar = (int32)video->width * video->height;
+ oscl_memcpy(outputBuffer, decCtrl->outputFrame, tmpvar*3 / 2); /* 3/3/01 */
+ }
+ }
+#else
+ outputBuffer = decCtrl->outputFrame;
+ outputYUV;
+#endif
+ decCtrl->outputFrame = outputBuffer;
+ return;
+}
+
+
+/* ======================================================================== */
+/* Function : PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, */
+/* int32 timestamp) */
+/* Date : 07/22/2003 */
+/* Purpose : Get YUV reference frame from external source. */
+/* In/out : YUV 4-2-0 frame containing new reference frame in the same */
+/* : dimension as original, i.e., doesn't have to be multiple of 16 !!!. */
+/* Return : */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool PVDecSetReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ Vop *prevVop = video->prevVop;
+ int width = video->width;
+ uint8 *dstPtr, *orgPtr, *dstPtr2, *orgPtr2;
+ int32 size = (int32)width * video->height;
+
+
+ /* set new parameters */
+ prevVop->timeStamp = timestamp;
+ prevVop->predictionType = I_VOP;
+
+ dstPtr = prevVop->yChan;
+ orgPtr = refYUV;
+ oscl_memcpy(dstPtr, orgPtr, size);
+ dstPtr = prevVop->uChan;
+ dstPtr2 = prevVop->vChan;
+ orgPtr = refYUV + size;
+ orgPtr2 = orgPtr + (size >> 2);
+ oscl_memcpy(dstPtr, orgPtr, (size >> 2));
+ oscl_memcpy(dstPtr2, orgPtr2, (size >> 2));
+
+ video->concealFrame = video->prevVop->yChan;
+ video->vop_coding_type = I_VOP;
+ decCtrl->outputFrame = video->prevVop->yChan;
+
+ return PV_TRUE;
+}
+
+/* ======================================================================== */
+/* Function : PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, */
+/* int32 timestamp) */
+/* Date : 07/23/2003 */
+/* Purpose : Get YUV enhance reference frame from external source. */
+/* In/out : YUV 4-2-0 frame containing new reference frame in the same */
+/* : dimension as original, i.e., doesn't have to be multiple of 16 !!!. */
+/* Return : */
+/* Note : */
+/* Modified : */
+/* ======================================================================== */
+Bool PVDecSetEnhReference(VideoDecControls *decCtrl, uint8 *refYUV, uint32 timestamp)
+{
+ VideoDecData *video = (VideoDecData *) decCtrl->videoDecoderData;
+ Vop *prevEnhcVop = video->prevEnhcVop;
+ uint8 *dstPtr, *orgPtr, *dstPtr2, *orgPtr2;
+ int32 size = (int32) video->width * video->height;
+
+ if (video->numberOfLayers <= 1)
+ return PV_FALSE;
+
+
+ /* set new parameters */
+ prevEnhcVop->timeStamp = timestamp;
+ prevEnhcVop->predictionType = I_VOP;
+
+ dstPtr = prevEnhcVop->yChan;
+ orgPtr = refYUV;
+ oscl_memcpy(dstPtr, orgPtr, size);
+ dstPtr = prevEnhcVop->uChan;
+ dstPtr2 = prevEnhcVop->vChan;
+ orgPtr = refYUV + size;
+ orgPtr2 = orgPtr + (size >> 2);
+ oscl_memcpy(dstPtr, orgPtr, (size >> 2));
+ oscl_memcpy(dstPtr2, orgPtr2, (size >> 2));
+ video->concealFrame = video->prevEnhcVop->yChan;
+ video->vop_coding_type = I_VOP;
+ decCtrl->outputFrame = video->prevEnhcVop->yChan;
+
+ return PV_TRUE;
+}
+
+
+/* ======================================================================== */
+/* Function : PVGetVolInfo() */
+/* Date : 08/06/2003 */
+/* Purpose : Get the vol info(only base-layer). */
+/* In/out : */
+/* Return : */
+/* Note : */
+/* Modified : 06/24/2004 */
+/* ======================================================================== */
+Bool PVGetVolInfo(VideoDecControls *decCtrl, VolInfo *pVolInfo)
+{
+ Vol *currVol;
+
+ if (pVolInfo == NULL || decCtrl == NULL || decCtrl->videoDecoderData == NULL ||
+ ((VideoDecData *)decCtrl->videoDecoderData)->vol[0] == NULL) return PV_FALSE;
+
+ currVol = ((VideoDecData *)(decCtrl->videoDecoderData))->vol[0];
+
+ // get the VOL info
+ pVolInfo->shortVideoHeader = (int32)((VideoDecData *)(decCtrl->videoDecoderData))->shortVideoHeader;
+ pVolInfo->dataPartitioning = (int32)currVol->dataPartitioning;
+ pVolInfo->errorResDisable = (int32)currVol->errorResDisable;
+ pVolInfo->useReverseVLC = (int32)currVol->useReverseVLC;
+ pVolInfo->scalability = (int32)currVol->scalability;
+ pVolInfo->nbitsTimeIncRes = (int32)currVol->nbitsTimeIncRes;
+ pVolInfo->profile_level_id = (int32)currVol->profile_level_id;
+
+ return PV_TRUE;
+}
+
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/scaling.h b/media/libstagefright/codecs/m4v_h263/dec/src/scaling.h
new file mode 100644
index 0000000..26abbae
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/scaling.h
@@ -0,0 +1,52 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ extern const int32 scale[63];
+
+#define PV_GET_ROW(a,b) ((a) / (b))
+
+ /*----------------------------------------------------------------------------
+ ; SIMPLE TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; ENUMERATED TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; STRUCTURES TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; GLOBAL FUNCTION DEFINITIONS
+ ; Function Prototype declaration
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; END
+ ----------------------------------------------------------------------------*/
+#ifdef __cplusplus
+}
+#endif
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/scaling_tab.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/scaling_tab.cpp
new file mode 100644
index 0000000..a1f95aa
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/scaling_tab.cpp
@@ -0,0 +1,88 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+
+#include "mp4dec_api.h"
+#include "mp4def.h"
+#include "scaling.h"
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+
+/* this scaling can be used for dividing values up to 3292 07/10/01 */
+const int32 scale[63] = {0, 262145, 131073, 87382, 65537, 52430, 43692, 37450, 32769, 29128,
+ 26215, 23832, 21846, 20166, 18726, 17477, 16385, 15421, 14565, 13798,
+ 13108, 12484, 11917, 11399, 10924, 10487, 10083, 9710, 9363, 9040,
+ 8739, 8457, 8193, 7945, 7711, 7491, 7283, 7086, 6900, 6723, 6555, 6395,
+ 6243, 6097, 5959, 5826, 5700, 5579, 5462, 5351, 5244, 5141, 5042, 4947, 4856,
+ 4767, 4682, 4600, 4521, 4444, 4370, 4298, 4229
+ };
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Define all local variables
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Function body here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Return nothing or data or data pointer
+----------------------------------------------------------------------------*/
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dec_tab.h b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dec_tab.h
new file mode 100644
index 0000000..404cc8b
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dec_tab.h
@@ -0,0 +1,215 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+* ------------------------------------------------------------------- *
+* MPEG-4 Simple Profile Video Decoder *
+* ------------------------------------------------------------------- *
+*
+* This software module was originally developed by
+*
+* Paulo Nunes (IST / ACTS-MoMuSyS)
+*
+* and edited by
+*
+* Robert Danielsen (Telenor / ACTS-MoMuSyS)
+*
+* in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
+* This software module is an implementation of a part of one or more MPEG-4
+* Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free
+* license to this software module or modifications thereof for use in hardware
+* or software products claiming conformance to the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* Those intending to use this software module in hardware or software products
+* are advised that its use may infringe existing patents. The original
+* developer of this software module and his/her company, the subsequent
+* editors and their companies, and ISO/IEC have no liability for use of this
+* software module or modifications thereof in an implementation. Copyright is
+* not released for non MPEG-4 Video (ISO/IEC 14496-2) Standard conforming
+* products.
+*
+* ACTS-MoMuSys partners retain full right to use the code for his/her own
+* purpose, assign or donate the code to a third party and to inhibit third
+* parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) Standard
+* conforming products. This copyright notice must be included in all copies or
+* derivative works.
+*
+* Copyright (c) 1996
+*
+*****************************************************************************
+***********************************************************HeaderBegin*******
+*
+* File: vlc_dec_tab.h
+*
+* Author: Paulo Nunes (IST) - Paulo.Nunes@it.ist.utl.pt
+* Created: 1-Mar-96
+*
+* Description: This file contains the VLC tables for module which deals
+* with VLC decoding.
+*
+* Notes: This file was created based on tmndecode
+* Written by Karl Olav Lillevold <kol@nta.no>,
+* 1995 Telenor R&D.
+* Donated to the Momusys-project as background code by
+* Telenor.
+*
+* based on mpeg2decode, (C) 1994, MPEG Software Simulation Group
+* and mpeg2play, (C) 1994 Stefan Eckart
+* <stefan@lis.e-technik.tu-muenchen.de>
+*
+*
+* Modified: 9-May-96 Paulo Nunes: Reformatted. New headers.
+* 14-May-96 Paulo Nunes: Changed TMNMVtabs according to VM2.1.
+* 04.11.96 Robert Danielsen: Added three new tables for coding
+* of Intra luminance coefficients (VM 4.0)
+* 01.05.97 Luis Ducla-Soares: added VM7.0 Reversible VLC tables (RVLC).
+* 13.05.97 Minhua Zhou: added VlC tables for CBPYtab2 CBPYtab3,
+* revised CBPYtab
+*
+***********************************************************HeaderEnd*********
+
+This module is a header file for "vlc_decode.c". The table data actually
+resides in "vlc_tab.c".
+
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; CONTINUE ONLY IF NOT ALREADY DEFINED
+----------------------------------------------------------------------------*/
+#ifndef vlc_dec_tab_H
+#define vlc_dec_tab_H
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "mp4def.h"
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ extern const VLCshorttab PV_TMNMVtab0[];
+
+ extern const VLCshorttab PV_TMNMVtab1[];
+
+ extern const VLCshorttab PV_TMNMVtab2[];
+
+ extern const VLCshorttab PV_MCBPCtab[];
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ extern const VLCshorttab PV_MCBPCtab1[];
+#endif
+ extern const VLCshorttab PV_MCBPCtabintra[];
+
+ /* Table for separate mode MCBPC, for coding DQUANT-flag and CBPC */
+
+ extern const VLCshorttab MCBPCtab_sep[32];
+
+ extern const VLCshorttab PV_CBPYtab[48];
+
+ extern const VLCshorttab CBPYtab2[16];
+
+ extern const VLCshorttab CBPYtab3[64];
+
+ extern const VLCtab2 PV_DCT3Dtab0[];
+
+
+ extern const VLCtab2 PV_DCT3Dtab1[];
+
+
+ extern const VLCtab2 PV_DCT3Dtab2[];
+
+ /* New tables for Intra luminance blocks */
+
+ extern const VLCtab2 PV_DCT3Dtab3[];
+
+ extern const VLCtab2 PV_DCT3Dtab4[];
+
+ extern const VLCtab2 PV_DCT3Dtab5[];
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ /* Annex I tables */
+ extern const VLCtab2 PV_DCT3Dtab6[];
+
+ extern const VLCtab2 PV_DCT3Dtab7[];
+
+ extern const VLCtab2 PV_DCT3Dtab8[];
+#endif
+ /* RVLC tables */
+ extern const int ptrRvlcTab[];
+
+ extern const VLCtab2 RvlcDCTtabIntra[];
+
+ extern const VLCtab2 RvlcDCTtabInter[];
+
+ /*----------------------------------------------------------------------------
+ ; SIMPLE TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+
+ /*----------------------------------------------------------------------------
+ ; ENUMERATED TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; STRUCTURES TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; GLOBAL FUNCTION DEFINITIONS
+ ; Function Prototype declaration
+ ----------------------------------------------------------------------------*/
+
+
+ /*----------------------------------------------------------------------------
+ ; END
+ ----------------------------------------------------------------------------*/
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+
+
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.cpp
new file mode 100644
index 0000000..f7192b1
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.cpp
@@ -0,0 +1,1636 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+* ------------------------------------------------------------------- *
+* MPEG-4 Simple Profile Video Decoder *
+* ------------------------------------------------------------------- *
+*
+* This software module was originally developed by
+*
+* Paulo Nunes (IST / ACTS-MoMuSyS)
+* Robert Danielsen (Telenor / ACTS-MoMuSyS)
+*
+* in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
+* This software module is an implementation of a part of one or more MPEG-4
+* Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free
+* license to this software module or modifications thereof for use in hardware
+* or software products claiming conformance to the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* Those intending to use this software module in hardware or software products
+* are advised that its use may infringe existing patents. The original
+* developer of this software module and his/her company, the subsequent
+* editors and their companies, and ISO/IEC have no liability for use of this
+* software module or modifications thereof in an implementation. Copyright is
+* not released for non MPEG-4 Video (ISO/IEC 14496-2) Standard conforming
+* products.
+*
+* ACTS-MoMuSys partners retain full right to use the code for his/her own
+* purpose, assign or donate the code to a third party and to inhibit third
+* parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) Standard
+* conforming products. This copyright notice must be included in all copies or
+* derivative works.
+*
+* Copyright (c) 1996
+*
+*****************************************************************************/
+
+/***********************************************************HeaderBegin*******
+*
+* File: vlc_dec.c
+*
+* Author: Paulo Nunes (IST) - Paulo.Nunes@lx.it.pt
+* Created: 1-Mar-96
+*
+* Description: This file contains the VLC functions needed to decode a
+* bitstream.
+*
+* Notes:
+* The functions contained in this file were adapted from
+* tmndecode
+* Written by Karl Olav Lillevold <kol@nta.no>,
+* 1995 Telenor R&D.
+* Donated to the Momusys-project as background code by
+* Telenor.
+*
+* based on mpeg2decode, (C) 1994, MPEG Software Simulation Group
+* and mpeg2play, (C) 1994 Stefan Eckart
+* <stefan@lis.e-technik.tu-muenchen.de>
+*
+*
+* Modified: 9-May-96 Paulo Nunes: Reformatted. New headers.
+* 17-Jan-97 Jan De Lameillieure (HHI) : corrected in
+* 01.05.97 Luis Ducla-Soares: added RvlcDecTCOEF() to allow decoding
+* of Reversible VLCs.
+* 09.03.98 Paulo Nunes: Cleaning.
+*
+***********************************************************HeaderEnd*********/
+
+#include "mp4dec_lib.h"
+#include "vlc_dec_tab.h"
+#include "vlc_decode.h"
+#include "bitstream.h"
+#include "max_level.h"
+
+
+/* ====================================================================== /
+ Function : DecodeUserData()
+ Date : 04/10/2000
+ History :
+ Modified : 04/16/2001 : removed status checking of PV_BitstreamFlushBits
+
+ This is simply a realization of the user_data() function
+ in the ISO/IEC 14496-2 manual.
+/ ====================================================================== */
+PV_STATUS DecodeUserData(BitstreamDecVideo *stream)
+{
+ PV_STATUS status;
+ uint32 code;
+
+ BitstreamReadBits32HC(stream);
+ BitstreamShowBits32(stream, 24, &code);
+
+ while (code != 1)
+ {
+ /* Discard user data for now. 04/05/2000 */
+ BitstreamReadBits16(stream, 8);
+ BitstreamShowBits32(stream, 24, &code);
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP) return status; /* 03/19/2002 */
+ }
+ return PV_SUCCESS;
+}
+
+
+
+/***********************************************************CommentBegin******
+*
+* 3/10/00 : initial modification to the
+* new PV-Decoder Lib format.
+* 3/29/00 : added return code check to some functions and
+* optimize the code.
+*
+***********************************************************CommentEnd********/
+PV_STATUS PV_GetMBvectors(VideoDecData *video, uint mode)
+{
+ PV_STATUS status;
+ BitstreamDecVideo *stream = video->bitstream;
+ int f_code_f = video->currVop->fcodeForward;
+ int vlc_code_mag;
+
+
+ MOT *mot_x = video->motX;
+ MOT *mot_y = video->motY;
+
+ int k, offset;
+ int x_pos = video->mbnum_col;
+ int y_pos = video->mbnum_row;
+ int doubleWidth = video->nMBPerRow << 1;
+ int pos = (x_pos + y_pos * doubleWidth) << 1;
+ MOT mvx = 0, mvy = 0;
+
+
+ if (f_code_f == 1)
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (mode == MODE_INTER4V || mode == MODE_INTER4V_Q)
+#else
+ if (mode == MODE_INTER4V)
+#endif
+ {
+ for (k = 0; k < 4; k++)
+ {
+ offset = (k & 1) + (k >> 1) * doubleWidth;
+ mv_prediction(video, k, &mvx, &mvy);
+ /* decode component x */
+ status = PV_VlcDecMV(stream, &vlc_code_mag);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+ mvx += (MOT)vlc_code_mag;
+ mvx = (MOT)(((mvx + 32) & 0x3F) - 32);
+
+
+ status = PV_VlcDecMV(stream, &vlc_code_mag);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+ mvy += (MOT)vlc_code_mag;
+ mvy = (MOT)(((mvy + 32) & 0x3F) - 32);
+
+ mot_x[pos+offset] = (MOT) mvx;
+ mot_y[pos+offset] = (MOT) mvy;
+ }
+ }
+ else
+ {
+ mv_prediction(video, 0, &mvx, &mvy);
+ /* For PVOPs, field appears only in MODE_INTER & MODE_INTER_Q */
+ status = PV_VlcDecMV(stream, &vlc_code_mag);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+ mvx += (MOT)vlc_code_mag;
+ mvx = (MOT)(((mvx + 32) & 0x3F) - 32);
+
+
+ status = PV_VlcDecMV(stream, &vlc_code_mag);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+
+ mvy += (MOT)vlc_code_mag;
+ mvy = (MOT)(((mvy + 32) & 0x3F) - 32);
+
+
+ mot_x[pos] = mot_x[pos+1] = (MOT) mvx;
+ mot_y[pos] = mot_y[pos+1] = (MOT) mvy;
+ pos += doubleWidth;
+ mot_x[pos] = mot_x[pos+1] = (MOT) mvx;
+ mot_y[pos] = mot_y[pos+1] = (MOT) mvy;
+ }
+ }
+ else
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (mode == MODE_INTER4V || mode == MODE_INTER4V_Q)
+#else
+ if (mode == MODE_INTER4V)
+#endif
+ {
+ for (k = 0; k < 4; k++)
+ {
+ offset = (k & 1) + (k >> 1) * doubleWidth;
+ mv_prediction(video, k, &mvx, &mvy);
+ status = PV_DecodeMBVec(stream, &mvx, &mvy, f_code_f);
+ mot_x[pos+offset] = (MOT) mvx;
+ mot_y[pos+offset] = (MOT) mvy;
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+ }
+ }
+ else
+ {
+ mv_prediction(video, 0, &mvx, &mvy);
+ /* For PVOPs, field appears only in MODE_INTER & MODE_INTER_Q */
+ status = PV_DecodeMBVec(stream, &mvx, &mvy, f_code_f);
+ mot_x[pos] = mot_x[pos+1] = (MOT) mvx;
+ mot_y[pos] = mot_y[pos+1] = (MOT) mvy;
+ pos += doubleWidth;
+ mot_x[pos] = mot_x[pos+1] = (MOT) mvx;
+ mot_y[pos] = mot_y[pos+1] = (MOT) mvy;
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+ }
+ }
+ return PV_SUCCESS;
+}
+
+
+/***********************************************************CommentBegin******
+* 3/10/00 : initial modification to the
+* new PV-Decoder Lib format.
+* 3/29/00 : added return code check to some functions
+* 5/10/00 : check whether the decoded vector is legal.
+* 4/17/01 : use MOT type
+***********************************************************CommentEnd********/
+PV_STATUS PV_DecodeMBVec(BitstreamDecVideo *stream, MOT *mv_x, MOT *mv_y, int f_code_f)
+{
+ PV_STATUS status;
+ int vlc_code_magx, vlc_code_magy;
+ int residualx = 0, residualy = 0;
+
+ /* decode component x */
+ status = PV_VlcDecMV(stream, &vlc_code_magx);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+ if (vlc_code_magx)
+ {
+ residualx = (int) BitstreamReadBits16_INLINE(stream, (int)(f_code_f - 1));
+ }
+
+
+ /* decode component y */
+ status = PV_VlcDecMV(stream, &vlc_code_magy);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+
+ if (vlc_code_magy)
+ {
+ residualy = (int) BitstreamReadBits16_INLINE(stream, (int)(f_code_f - 1));
+ }
+
+
+ if (PV_DeScaleMVD(f_code_f, residualx, vlc_code_magx, mv_x) != PV_SUCCESS)
+ {
+ return PV_FAIL;
+ }
+
+ if (PV_DeScaleMVD(f_code_f, residualy, vlc_code_magy, mv_y) != PV_SUCCESS)
+ {
+ return PV_FAIL;
+ }
+
+ return PV_SUCCESS;
+}
+
+
+/***********************************************************CommentBegin******
+* 3/31/2000 : initial modification to the new PV-Decoder Lib format.
+* 5/10/2000 : check to see if the decoded vector falls within
+* the legal fcode range.
+*
+***********************************************************CommentEnd********/
+PV_STATUS PV_DeScaleMVD(
+ int f_code, /* <-- MV range in 1/2 units: 1=32,2=64,...,7=2048 */
+ int residual, /* <-- part of the MV Diff. FLC coded */
+ int vlc_code_mag, /* <-- part of the MV Diff. VLC coded */
+ MOT *vector /* --> Obtained MV component in 1/2 units */
+)
+{
+ int half_range = (1 << (f_code + 4));
+ int mask = (half_range << 1) - 1;
+ int diff_vector;
+
+
+ if (vlc_code_mag == 0)
+ {
+ diff_vector = vlc_code_mag;
+ }
+ else
+ {
+ diff_vector = ((PV_ABS(vlc_code_mag) - 1) << (f_code - 1)) + residual + 1;
+ if (vlc_code_mag < 0)
+ {
+ diff_vector = -diff_vector;
+ }
+ }
+
+ *vector += (MOT)(diff_vector);
+
+ *vector = (MOT)((*vector + half_range) & mask) - half_range;
+
+ return PV_SUCCESS;
+}
+
+
+
+void mv_prediction(
+ VideoDecData *video,
+ int block,
+ MOT *mvx,
+ MOT *mvy
+)
+{
+ /*----------------------------------------------------------------------------
+ ; Define all local variables
+ ----------------------------------------------------------------------------*/
+ MOT *motxdata = video->motX;
+ MOT *motydata = video->motY;
+ int mbnum_col = video->mbnum_col;
+ int mbnum_row = video->mbnum_row;
+ uint8 *slice_nb = video->sliceNo;
+ int nMBPerRow = video->nMBPerRow;
+ int nMVPerRow = nMBPerRow << 1;
+ int mbnum = video->mbnum;
+ int p1x = 0, p2x = 0, p3x = 0;
+ int p1y = 0, p2y = 0, p3y = 0;
+ int rule1 = 0, rule2 = 0, rule3 = 0;
+ int indx;
+
+ indx = ((mbnum_col << 1) + (block & 1)) + ((mbnum_row << 1) + (block >> 1)) * nMVPerRow - 1; /* left block */
+
+ if (block & 1) /* block 1, 3 */
+ {
+ p1x = motxdata[indx];
+ p1y = motydata[indx];
+ rule1 = 1;
+ }
+ else /* block 0, 2 */
+ {
+ if (mbnum_col > 0 && slice_nb[mbnum] == slice_nb[mbnum-1])
+ {
+ p1x = motxdata[indx];
+ p1y = motydata[indx];
+ rule1 = 1;
+ }
+ }
+
+ indx = indx + 1 - nMVPerRow; /* upper_block */
+ if (block >> 1)
+ {
+ indx -= (block & 1);
+ p2x = motxdata[indx];
+ p2y = motydata[indx];
+ p3x = motxdata[indx + 1];
+ p3y = motydata[indx + 1];
+ rule2 = rule3 = 1;
+ }
+ else
+ { /* block 0,1 */
+ if (mbnum_row)
+ {
+ if (slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow])
+ {
+ p2x = motxdata[indx];
+ p2y = motydata[indx];
+ rule2 = 1;
+ }
+ if (mbnum_col < nMBPerRow - 1 && slice_nb[mbnum] == slice_nb[mbnum-nMBPerRow+1])
+ {
+ indx = indx + 2 - (block & 1);
+ p3x = motxdata[indx];
+ p3y = motydata[indx];
+ rule3 = 1;
+ }
+ }
+ }
+
+ if (rule1 + rule2 + rule3 > 1)
+ {
+ *mvx = (MOT)PV_MEDIAN(p1x, p2x, p3x);
+ *mvy = (MOT)PV_MEDIAN(p1y, p2y, p3y);
+ }
+ else if (rule1 + rule2 + rule3 == 1)
+ {
+ /* two of three are zero */
+ *mvx = (MOT)(p1x + p2x + p3x);
+ *mvy = (MOT)(p1y + p2y + p3y);
+ }
+ else
+ {
+ /* all MBs are outside the VOP */
+ *mvx = *mvy = 0;
+ }
+ /*----------------------------------------------------------------------------
+ ; Return nothing or data or data pointer
+ ----------------------------------------------------------------------------*/
+ return;
+}
+
+/***********************************************************CommentBegin******
+*
+* 3/30/2000 : initial modification to the new PV-Decoder Lib format.
+* 4/16/2001 : removed checking of status for PV_BitstreamFlushBits
+***********************************************************CommentEnd********/
+
+PV_STATUS PV_VlcDecMV(BitstreamDecVideo *stream, int *mv)
+{
+ PV_STATUS status = PV_SUCCESS;
+ uint code;
+
+ BitstreamShow13Bits(stream, &code);
+
+ if (code >> 12)
+ {
+ *mv = 0; /* Vector difference = 0 */
+ PV_BitstreamFlushBits(stream, 1);
+ return PV_SUCCESS;
+ }
+
+ if (code >= 512)
+ {
+ code = (code >> 8) - 2;
+ PV_BitstreamFlushBits(stream, PV_TMNMVtab0[code].len + 1);
+ *mv = PV_TMNMVtab0[code].val;
+ return status;
+ }
+
+ if (code >= 128)
+ {
+ code = (code >> 2) - 32;
+ PV_BitstreamFlushBits(stream, PV_TMNMVtab1[code].len + 1);
+ *mv = PV_TMNMVtab1[code].val;
+ return status;
+ }
+
+ if (code < 4)
+ {
+ *mv = -1;
+ return PV_FAIL;
+ }
+
+ code -= 4;
+
+ PV_BitstreamFlushBits(stream, PV_TMNMVtab2[code].len + 1);
+
+ *mv = PV_TMNMVtab2[code].val;
+ return status;
+}
+
+
+/***********************************************************CommentBegin******
+* 3/30/2000 : initial modification to the new PV-Decoder Lib
+* format and the change of error-handling method.
+* 4/16/01 : removed status checking of PV_BitstreamFlushBits
+***********************************************************CommentEnd********/
+
+int PV_VlcDecMCBPC_com_intra(BitstreamDecVideo *stream)
+{
+ uint code;
+
+ BitstreamShowBits16(stream, 9, &code);
+
+
+ if (code < 8)
+ {
+ return VLC_CODE_ERROR;
+ }
+
+ code >>= 3;
+
+ if (code >= 32)
+ {
+ PV_BitstreamFlushBits(stream, 1);
+ return 3;
+ }
+
+ PV_BitstreamFlushBits(stream, PV_MCBPCtabintra[code].len);
+
+ return PV_MCBPCtabintra[code].val;
+}
+
+
+/***********************************************************CommentBegin******
+*
+* 3/30/2000 : initial modification to the new PV-Decoder Lib
+* format and the change of error-handling method.
+* 4/16/2001 : removed checking of return status of PV_BitstreamFlushBits
+***********************************************************CommentEnd********/
+
+int PV_VlcDecMCBPC_com_inter(BitstreamDecVideo *stream)
+{
+ uint code;
+
+ BitstreamShowBits16(stream, 9, &code);
+
+ if (code == 0)
+ {
+ return VLC_CODE_ERROR;
+ }
+ else if (code >= 256)
+ {
+ PV_BitstreamFlushBits(stream, 1);
+ return 0;
+ }
+
+ PV_BitstreamFlushBits(stream, PV_MCBPCtab[code].len);
+ return PV_MCBPCtab[code].val;
+}
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+int PV_VlcDecMCBPC_com_inter_H263(BitstreamDecVideo *stream)
+{
+ uint code;
+
+ BitstreamShow13Bits(stream, &code);
+
+ if (code == 0)
+ {
+ return VLC_CODE_ERROR;
+ }
+ else if (code >= 4096)
+ {
+ PV_BitstreamFlushBits(stream, 1);
+ return 0;
+ }
+ if (code >= 16)
+ {
+ PV_BitstreamFlushBits(stream, PV_MCBPCtab[code >> 4].len);
+ return PV_MCBPCtab[code >> 4].val;
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, PV_MCBPCtab1[code - 8].len);
+ return PV_MCBPCtab1[code - 8].val;
+ }
+}
+#endif
+/***********************************************************CommentBegin******
+* 3/30/2000 : initial modification to the new PV-Decoder Lib
+* format and the change of error-handling method.
+* 4/16/2001 : removed status checking for PV_BitstreamFlushBits
+***********************************************************CommentEnd********/
+
+int PV_VlcDecCBPY(BitstreamDecVideo *stream, int intra)
+{
+ int CBPY = 0;
+ uint code;
+
+ BitstreamShowBits16(stream, 6, &code);
+
+
+ if (code < 2)
+ {
+ return -1;
+ }
+ else if (code >= 48)
+ {
+ PV_BitstreamFlushBits(stream, 2);
+ CBPY = 15;
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, PV_CBPYtab[code].len);
+ CBPY = PV_CBPYtab[code].val;
+ }
+
+ if (intra == 0) CBPY = 15 - CBPY;
+ CBPY = CBPY & 15;
+ return CBPY;
+}
+
+
+/***********************************************************CommentBegin******
+* 3/31/2000 : initial modification to the new PV-Decoder Lib format.
+*
+* 8/23/2000 : optimize the function by removing unnecessary BitstreamShowBits()
+* function calls.
+*
+* 9/6/2000 : change the API to check for end-of-buffer for proper
+* termination of decoding process.
+***********************************************************CommentEnd********/
+PV_STATUS PV_VlcDecIntraDCPredSize(BitstreamDecVideo *stream, int compnum, uint *DC_size)
+{
+ PV_STATUS status = PV_FAIL; /* 07/09/01 */
+ uint code;
+
+ *DC_size = 0;
+ if (compnum < 4) /* luminance block */
+ {
+
+ BitstreamShowBits16(stream, 11, &code);
+
+ if (code == 1)
+ {
+ *DC_size = 12;
+ PV_BitstreamFlushBits(stream, 11);
+ return PV_SUCCESS;
+ }
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 11;
+ PV_BitstreamFlushBits(stream, 10);
+ return PV_SUCCESS;
+ }
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 10;
+ PV_BitstreamFlushBits(stream, 9);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 9;
+ PV_BitstreamFlushBits(stream, 8);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 8;
+ PV_BitstreamFlushBits(stream, 7);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 7;
+ PV_BitstreamFlushBits(stream, 6);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 6;
+ PV_BitstreamFlushBits(stream, 5);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 5;
+ PV_BitstreamFlushBits(stream, 4);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 4;
+ PV_BitstreamFlushBits(stream, 3);
+ return PV_SUCCESS;
+ }
+ else if (code == 2)
+ {
+ *DC_size = 3;
+ PV_BitstreamFlushBits(stream, 3);
+ return PV_SUCCESS;
+ }
+ else if (code == 3)
+ {
+ *DC_size = 0;
+ PV_BitstreamFlushBits(stream, 3);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 2)
+ {
+ *DC_size = 2;
+ PV_BitstreamFlushBits(stream, 2);
+ return PV_SUCCESS;
+ }
+ else if (code == 3)
+ {
+ *DC_size = 1;
+ PV_BitstreamFlushBits(stream, 2);
+ return PV_SUCCESS;
+ }
+ }
+ else /* chrominance block */
+ {
+
+ BitstreamShow13Bits(stream, &code);
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 12;
+ PV_BitstreamFlushBits(stream, 12);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 11;
+ PV_BitstreamFlushBits(stream, 11);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 10;
+ PV_BitstreamFlushBits(stream, 10);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 9;
+ PV_BitstreamFlushBits(stream, 9);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 8;
+ PV_BitstreamFlushBits(stream, 8);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 7;
+ PV_BitstreamFlushBits(stream, 7);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 6;
+ PV_BitstreamFlushBits(stream, 6);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 5;
+ PV_BitstreamFlushBits(stream, 5);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 4;
+ PV_BitstreamFlushBits(stream, 4);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ if (code == 1)
+ {
+ *DC_size = 3;
+ PV_BitstreamFlushBits(stream, 3);
+ return PV_SUCCESS;
+ }
+
+ code >>= 1;
+ {
+ *DC_size = (int)(3 - code);
+ PV_BitstreamFlushBits(stream, 2);
+ return PV_SUCCESS;
+ }
+ }
+
+ return status;
+}
+
+/***********************************************************CommentBegin******
+*
+*
+* 3/30/2000 : initial modification to the new PV-Decoder Lib
+* format and the change of error-handling method.
+*
+***********************************************************CommentEnd********/
+
+
+
+PV_STATUS VlcDecTCOEFIntra(BitstreamDecVideo *stream, Tcoef *pTcoef)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFIntra */
+ /* if(GetTcoeffIntra(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab3[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab4[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab5[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint) tab->run; //(tab->val >> 8) & 255;
+ pTcoef->level = (int) tab->level; //tab->val & 255;
+ pTcoef->last = (uint) tab->last; //(tab->val >> 16) & 1;
+
+
+ /* the following is modified for 3-mode escape -- boon */
+ if (tab->level != 0xFF)
+ {
+ return PV_SUCCESS;
+ }
+
+ //if (((tab->run<<8)|(tab->level)|(tab->last<<16)) == VLC_ESCAPE_CODE)
+
+ if (!pTcoef->sign)
+ {
+ /* first escape mode. level is offset */
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFIntra */
+ /* if(GetTcoeffIntra(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab3[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab4[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab5[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+
+ /* sign bit */
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run; //(tab->val >> 8) & 255;
+ pTcoef->level = (int)tab->level; //tab->val & 255;
+ pTcoef->last = (uint)tab->last; //(tab->val >> 16) & 1;
+
+
+ /* need to add back the max level */
+ if ((pTcoef->last == 0 && pTcoef->run > 14) || (pTcoef->last == 1 && pTcoef->run > 20))
+ {
+ return PV_FAIL;
+ }
+ pTcoef->level = pTcoef->level + intra_max_level[pTcoef->last][pTcoef->run];
+
+
+ }
+ else
+ {
+ uint run_offset;
+ run_offset = BitstreamRead1Bits_INLINE(stream);
+
+ if (!run_offset)
+ {
+ /* second escape mode. run is offset */
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFIntra */
+ /* if(GetTcoeffIntra(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab3[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab4[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab5[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ /* sign bit */
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run; //(tab->val >> 8) & 255;
+ pTcoef->level = (int)tab->level; //tab->val & 255;
+ pTcoef->last = (uint)tab->last; //(tab->val >> 16) & 1;
+
+
+
+ /* need to add back the max run */
+ if (pTcoef->last)
+ {
+ if (pTcoef->level > 8)
+ {
+ return PV_FAIL;
+ }
+ pTcoef->run = pTcoef->run + intra_max_run1[pTcoef->level] + 1;
+ }
+ else
+ {
+ if (pTcoef->level > 27)
+ {
+ return PV_FAIL;
+ }
+ pTcoef->run = pTcoef->run + intra_max_run0[pTcoef->level] + 1;
+ }
+
+
+ }
+ else
+ {
+
+ code = BitstreamReadBits16_INLINE(stream, 8);
+ pTcoef->last = code >> 7;
+ pTcoef->run = (code >> 1) & 0x3F;
+ pTcoef->level = (int)(BitstreamReadBits16_INLINE(stream, 13) >> 1);
+
+ if (pTcoef->level >= 2048)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 4096 - pTcoef->level;
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ }
+ } /* flc */
+ }
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFIntra */
+
+PV_STATUS VlcDecTCOEFInter(BitstreamDecVideo *stream, Tcoef *pTcoef)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFInter */
+ /* if(GetTcoeffInter(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab0[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab1[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab2[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run; //(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level; //tab->val & 15;
+ pTcoef->last = (uint)tab->last; //(tab->val >> 12) & 1;
+
+ /* the following is modified for 3-mode escape -- boon */
+ if (tab->run != 0xBF)
+ {
+ return PV_SUCCESS;
+ }
+ //if (((tab->run<<4)|(tab->level)|(tab->last<<12)) == VLC_ESCAPE_CODE)
+
+
+ if (!pTcoef->sign)
+ {
+ /* first escape mode. level is offset */
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFInter */
+ /* if(GetTcoeffInter(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab0[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab1[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab2[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run; //(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level; //tab->val & 15;
+ pTcoef->last = (uint)tab->last; //(tab->val >> 12) & 1;
+
+ /* need to add back the max level */
+ if ((pTcoef->last == 0 && pTcoef->run > 26) || (pTcoef->last == 1 && pTcoef->run > 40))
+ {
+ return PV_FAIL;
+ }
+ pTcoef->level = pTcoef->level + inter_max_level[pTcoef->last][pTcoef->run];
+ }
+ else
+ {
+ uint run_offset;
+ run_offset = BitstreamRead1Bits_INLINE(stream);
+
+ if (!run_offset)
+ {
+ /* second escape mode. run is offset */
+ BitstreamShow13Bits(stream, &code);
+
+ /* 10/17/2000, perform a little bit better on ARM by putting the whole function in VlcDecTCOEFFInter */
+ /*if(GetTcoeffInter(code,pTcoef,&tab,stream)!=PV_SUCCESS) return status;*/
+ if (code >= 1024)
+ {
+ tab = &PV_DCT3Dtab0[(code >> 6) - 16];
+ }
+ else
+ {
+ if (code >= 256)
+ {
+ tab = &PV_DCT3Dtab1[(code >> 3) - 32];
+ }
+ else
+ {
+ if (code >= 16)
+ {
+ tab = &PV_DCT3Dtab2[(code>>1) - 8];
+ }
+ else
+ {
+ return PV_FAIL;
+ }
+ }
+ }
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run; //(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level; //tab->val & 15;
+ pTcoef->last = (uint)tab->last; //(tab->val >> 12) & 1;
+
+ /* need to add back the max run */
+ if (pTcoef->last)
+ {
+ if (pTcoef->level > 3)
+ {
+ return PV_FAIL;
+ }
+ pTcoef->run = pTcoef->run + inter_max_run1[pTcoef->level] + 1;
+ }
+ else
+ {
+ if (pTcoef->level > 12)
+ {
+ return PV_FAIL;
+ }
+ pTcoef->run = pTcoef->run + inter_max_run0[pTcoef->level] + 1;
+ }
+ }
+ else
+ {
+
+ code = BitstreamReadBits16_INLINE(stream, 8);
+ pTcoef->last = code >> 7;
+ pTcoef->run = (code >> 1) & 0x3F;
+ pTcoef->level = (int)(BitstreamReadBits16_INLINE(stream, 13) >> 1);
+
+
+
+ if (pTcoef->level >= 2048)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 4096 - pTcoef->level;
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ }
+ } /* flc */
+ }
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFInter */
+
+/*=======================================================
+ Function: VlcDecTCOEFShortHeader()
+ Date : 04/27/99
+ Purpose : New function used in decoding of video planes
+ with short header
+ Modified: 05/23/2000
+ for new decoder structure.
+=========================================================*/
+PV_STATUS VlcDecTCOEFShortHeader(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra*/)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /*intra = 0;*/
+
+ if (code >= 1024) tab = &PV_DCT3Dtab0[(code >> 6) - 16];
+ else
+ {
+ if (code >= 256) tab = &PV_DCT3Dtab1[(code >> 3) - 32];
+ else
+ {
+ if (code >= 16) tab = &PV_DCT3Dtab2[(code>>1) - 8];
+ else return PV_FAIL;
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run;//(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level;//tab->val & 15;
+ pTcoef->last = (uint)tab->last;//(tab->val >> 12) & 1;
+
+ /* the following is modified for 3-mode escape -- boon */
+ if (((tab->run << 4) | (tab->level) | (tab->last << 12)) != VLC_ESCAPE_CODE) /* ESCAPE */
+ {
+ return PV_SUCCESS;
+ }
+
+
+ /* escape mode 4 - H.263 type */
+ pTcoef->last = pTcoef->sign; /* Last */
+ pTcoef->run = BitstreamReadBits16_INLINE(stream, 6); /* Run */
+ pTcoef->level = (int) BitstreamReadBits16_INLINE(stream, 8); /* Level */
+
+ if (pTcoef->level == 0 || pTcoef->level == 128)
+ {
+ return PV_FAIL;
+ }
+
+ if (pTcoef->level > 128)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 256 - pTcoef->level;
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ }
+
+
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFShortHeader */
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+PV_STATUS VlcDecTCOEFShortHeader_AnnexI(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra*/)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /*intra = 0;*/
+
+ if (code >= 1024) tab = &PV_DCT3Dtab6[(code >> 6) - 16];
+ else
+ {
+ if (code >= 256) tab = &PV_DCT3Dtab7[(code >> 3) - 32];
+ else
+ {
+ if (code >= 16) tab = &PV_DCT3Dtab8[(code>>1) - 8];
+ else return PV_FAIL;
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run;//(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level;//tab->val & 15;
+ pTcoef->last = (uint)tab->last;//(tab->val >> 12) & 1;
+
+ /* the following is modified for 3-mode escape -- boon */
+ if (((tab->run << 6) | (tab->level) | (tab->last << 12)) != VLC_ESCAPE_CODE) /* ESCAPE */
+ {
+ return PV_SUCCESS;
+ }
+ /* escape mode 4 - H.263 type */
+ pTcoef->last = pTcoef->sign; /* Last */
+ pTcoef->run = BitstreamReadBits16(stream, 6); /* Run */
+ pTcoef->level = (int) BitstreamReadBits16(stream, 8); /* Level */
+
+ if (pTcoef->level == 0 || pTcoef->level == 128)
+ {
+ return PV_FAIL;
+ }
+
+
+ if (pTcoef->level > 128)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 256 - pTcoef->level;
+ }
+ else pTcoef->sign = 0;
+
+
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFShortHeader_AnnexI */
+
+PV_STATUS VlcDecTCOEFShortHeader_AnnexT(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra*/)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /*intra = 0;*/
+
+ if (code >= 1024) tab = &PV_DCT3Dtab0[(code >> 6) - 16];
+ else
+ {
+ if (code >= 256) tab = &PV_DCT3Dtab1[(code >> 3) - 32];
+ else
+ {
+ if (code >= 16) tab = &PV_DCT3Dtab2[(code>>1) - 8];
+ else return PV_FAIL;
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run;//(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level;//tab->val & 15;
+ pTcoef->last = (uint)tab->last;//(tab->val >> 12) & 1;
+
+ /* the following is modified for 3-mode escape -- */
+ if (((tab->run << 4) | (tab->level) | (tab->last << 12)) != VLC_ESCAPE_CODE) /* ESCAPE */
+ {
+ return PV_SUCCESS;
+ }
+ /* escape mode 4 - H.263 type */
+ pTcoef->last = pTcoef->sign; /* Last */
+ pTcoef->run = BitstreamReadBits16(stream, 6); /* Run */
+ pTcoef->level = (int) BitstreamReadBits16(stream, 8); /* Level */
+
+ if (pTcoef->level == 0)
+ {
+ return PV_FAIL;
+ }
+
+ if (pTcoef->level >= 128)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 256 - pTcoef->level;
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ }
+
+ if (pTcoef->level == 128)
+ {
+ code = BitstreamReadBits16(stream, 11); /* ANNEX_T */
+
+ code = (code >> 6 & 0x1F) | (code << 5 & 0x7ff);
+ if (code > 1024)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = (2048 - code);
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ pTcoef->level = code;
+ }
+ }
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFShortHeader */
+
+
+PV_STATUS VlcDecTCOEFShortHeader_AnnexIT(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra*/)
+{
+ uint code;
+ const VLCtab2 *tab;
+
+ BitstreamShow13Bits(stream, &code);
+
+ /*intra = 0;*/
+
+ if (code >= 1024) tab = &PV_DCT3Dtab6[(code >> 6) - 16];
+ else
+ {
+ if (code >= 256) tab = &PV_DCT3Dtab7[(code >> 3) - 32];
+ else
+ {
+ if (code >= 16) tab = &PV_DCT3Dtab8[(code>>1) - 8];
+ else return PV_FAIL;
+ }
+ }
+
+ PV_BitstreamFlushBits(stream, tab->len + 1);
+ pTcoef->sign = (code >> (12 - tab->len)) & 1;
+ pTcoef->run = (uint)tab->run;//(tab->val >> 4) & 255;
+ pTcoef->level = (int)tab->level;//tab->val & 15;
+ pTcoef->last = (uint)tab->last;//(tab->val >> 12) & 1;
+
+ /* the following is modified for 3-mode escape -- */
+ if (((tab->run << 6) | (tab->level) | (tab->last << 12)) != VLC_ESCAPE_CODE) /* ESCAPE */
+ {
+ return PV_SUCCESS;
+ }
+ /* escape mode 4 - H.263 type */
+ pTcoef->last = pTcoef->sign; /* Last */
+ pTcoef->run = BitstreamReadBits16(stream, 6); /* Run */
+ pTcoef->level = (int) BitstreamReadBits16(stream, 8); /* Level */
+
+ if (pTcoef->level == 0)
+ {
+ return PV_FAIL;
+ }
+
+ if (pTcoef->level >= 128)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = 256 - pTcoef->level;
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ }
+
+ if (pTcoef->level == 128)
+ {
+ code = BitstreamReadBits16(stream, 11); /* ANNEX_T */
+
+ code = (code >> 6 & 0x1F) | (code << 5 & 0x7ff);
+ if (code > 1024)
+ {
+ pTcoef->sign = 1;
+ pTcoef->level = (2048 - code);
+ }
+ else
+ {
+ pTcoef->sign = 0;
+ pTcoef->level = code;
+ }
+ }
+
+
+ return PV_SUCCESS;
+
+} /* VlcDecTCOEFShortHeader_AnnexI */
+#endif
+/***********************************************************CommentBegin******
+* 3/30/2000 : initial modification to the new PV-Decoder Lib
+* format and the change of error-handling method.
+* The coefficient is now returned thru a pre-
+* initialized parameters for speedup.
+*
+***********************************************************CommentEnd********/
+
+
+PV_STATUS RvlcDecTCOEFInter(BitstreamDecVideo *stream, Tcoef *pTcoef)
+{
+ uint code, mask;
+ const VLCtab2 *tab2;
+ int count, len, num[2] = {0, 0} /* 01/30/01 */;
+
+ mask = 0x4000; /* mask 100000000000000 */
+ BitstreamShow15Bits(stream, &code); /* 03/07/01 */
+
+ len = 1;
+
+ // 09/20/99 Escape mode
+ /// Bitstream Exchange
+ if (code < 2048)
+ {
+ PV_BitstreamFlushBits(stream, 5);
+ pTcoef->last = BitstreamRead1Bits_INLINE(stream);
+ pTcoef->run = BitstreamReadBits16_INLINE(stream, 6);
+ // 09/20/99 New marker bit
+ PV_BitstreamFlushBits(stream, 1);
+ // 09/20/99 The length for LEVEL used to be 7 in the old version
+ pTcoef->level = (int)(BitstreamReadBits16_INLINE(stream, 12) >> 1);
+ // 09/20/99 Another new marker bit
+// PV_BitstreamFlushBitsCheck(stream, 1);
+ pTcoef->sign = BitstreamReadBits16_INLINE(stream, 5) & 0x1; /* fix 3/13/01 */
+ return PV_SUCCESS;
+ }
+
+ if (code & mask)
+ {
+ count = 1;
+ while (mask && count > 0) /* fix 3/28/01 */
+ {
+ mask = mask >> 1;
+ if (code & mask)
+ count--;
+ else
+ num[0]++; /* number of zeros in the middle */
+ len++;
+ }
+ }
+ else
+ {
+ count = 2;
+ while (mask && count > 0) /* fix 3/28/01 */
+ {
+ mask = mask >> 1;
+ if (!(code & mask))
+ count--;
+ else
+ num[count-1]++; /* number of ones in the middle */
+ len++;
+ }
+ }
+
+ code = code & 0x7fff;
+ code = code >> (15 - (len + 1));
+
+ /* 1/30/01, add fast decoding algorithm here */
+ /* code is in two forms : 0xxxx0xxx00 or 0xxx0xxx01
+ num[1] and num[0] x
+ or : 1xxxxx10 or 1xxxxx11
+ num[0] x */
+
+ /* len+1 is the length of the above */
+
+ if (num[1] > 10 || num[0] > 11) /* invalid RVLC code */
+ return PV_FAIL;
+
+ if (code&(1 << len))
+ tab2 = RvlcDCTtabInter + 146 + (num[0] << 1) + (code & 1);
+ else
+ tab2 = RvlcDCTtabInter + ptrRvlcTab[num[1]] + (num[0] << 1) + (code & 1);
+
+ PV_BitstreamFlushBits(stream, (int) tab2->len);
+ pTcoef->run = (uint)tab2->run;//(tab->val >> 8) & 255;
+ pTcoef->level = (int)tab2->level;//tab->val & 255;
+ pTcoef->last = (uint)tab2->last;//(tab->val >> 16) & 1;
+
+ pTcoef->sign = BitstreamRead1Bits_INLINE(stream);
+ return PV_SUCCESS;
+} /* RvlcDecTCOEFInter */
+
+PV_STATUS RvlcDecTCOEFIntra(BitstreamDecVideo *stream, Tcoef *pTcoef)
+{
+ uint code, mask;
+ const VLCtab2 *tab2;
+ int count, len, num[2] = {0, 0} /* 01/30/01 */;
+
+ mask = 0x4000; /* mask 100000000000000 */
+ BitstreamShow15Bits(stream, &code);
+
+ len = 1;
+
+ // 09/20/99 Escape mode
+ /// Bitstream Exchange
+ if (code < 2048)
+ {
+ PV_BitstreamFlushBits(stream, 5);
+ pTcoef->last = BitstreamRead1Bits_INLINE(stream);
+ pTcoef->run = BitstreamReadBits16_INLINE(stream, 6);
+ // 09/20/99 New marker bit
+ PV_BitstreamFlushBits(stream, 1);
+ // 09/20/99 The length for LEVEL used to be 7 in the old version
+ pTcoef->level = (int)(BitstreamReadBits16_INLINE(stream, 12) >> 1);
+ // 09/20/99 Another new marker bit
+// PV_BitstreamFlushBitsCheck(stream, 1);
+ pTcoef->sign = BitstreamReadBits16_INLINE(stream, 5) & 0x1; /* fix 03/13/01 */
+ return PV_SUCCESS;
+ }
+
+ if (code & mask)
+ {
+ count = 1;
+ while (mask && count > 0) /* fix 03/28/01 */
+ {
+ mask = mask >> 1;
+ if (code & mask)
+ count--;
+ else
+ num[0]++; /* number of zeros in the middle */
+ len++;
+ }
+ }
+ else
+ {
+ count = 2;
+ while (mask && count > 0) /* fix 03/28/01 */
+ {
+ mask = mask >> 1;
+ if (!(code & mask))
+ count--;
+ else
+ num[count-1]++; /* number of ones in the middle */
+ len++;
+ }
+ }
+
+ code = code & 0x7fff;
+ code = code >> (15 - (len + 1));
+
+ /* 1/30/01, add fast decoding algorithm here */
+ /* code is in two forms : 0xxxx0xxx00 or 0xxx0xxx01
+ num[1] and num[0] x
+ or : 1xxxxx10 or 1xxxxx11
+ num[0] x */
+
+ /* len+1 is the length of the above */
+
+ if (num[1] > 10 || num[0] > 11) /* invalid RVLC code */
+ return PV_FAIL;
+
+ if (code & (1 << len))
+ tab2 = RvlcDCTtabIntra + 146 + (num[0] << 1) + (code & 1);
+ else
+ tab2 = RvlcDCTtabIntra + ptrRvlcTab[num[1]] + (num[0] << 1) + (code & 1);
+
+ PV_BitstreamFlushBits(stream, (int) tab2->len);
+ pTcoef->run = (uint)tab2->run;//(tab->val >> 8) & 255;
+ pTcoef->level = (int)tab2->level;//tab->val & 255;
+ pTcoef->last = (uint)tab2->last;//(tab->val >> 16) & 1;
+
+ pTcoef->sign = BitstreamRead1Bits_INLINE(stream);
+ return PV_SUCCESS;
+} /* RvlcDecTCOEFIntra */
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.h b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.h
new file mode 100644
index 0000000..a804606
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_decode.h
@@ -0,0 +1,122 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/*
+-------------------------------------------------------------------
+ MPEG-4 Simple Profile Video Decoder
+-------------------------------------------------------------------
+*
+* This software module was originally developed by
+*
+* Paulo Nunes (IST / ACTS-MoMuSyS)
+*
+* in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
+* This software module is an implementation of a part of one or more MPEG-4
+* Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free
+* license to this software module or modifications thereof for use in hardware
+* or software products claiming conformance to the MPEG-4 Video (ISO/IEC
+* 14496-2) standard.
+*
+* Those intending to use this software module in hardware or software products
+* are advised that its use may infringe existing patents. The original
+* developer of this software module and his/her company, the subsequent
+* editors and their companies, and ISO/IEC have no liability for use of this
+* software module or modifications thereof in an implementation. Copyright is
+* not released for non MPEG-4 Video (ISO/IEC 14496-2) Standard conforming
+* products.
+*
+* ACTS-MoMuSys partners retain full right to use the code for his/her own
+* purpose, assign or donate the code to a third party and to inhibit third
+* parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) Standard
+* conforming products. This copyright notice must be included in all copies or
+* derivative works.
+*
+* Copyright (c) 1996
+*
+*****************************************************************************/
+
+/***********************************************************HeaderBegin*******
+*
+* File: vlc_dec.h
+*
+* Author: Paulo Nunes (IST) - Paulo.Nunes@lx.it.pt
+* Created:
+*
+* Description: This is the header file for the "vlcdec" module.
+*
+* Notes:
+*
+* Modified: 9-May-96 Paulo Nunes: Reformatted. New headers.
+*
+* ================= PacketVideo Modification ================================
+*
+* 3/30/00 : initial modification to the
+* new PV-Decoder Lib format.
+*
+***********************************************************CommentEnd********/
+
+
+#ifndef _VLCDECODE_H_
+#define _VLCDECODE_H_
+
+#include "mp4lib_int.h"
+
+#define VLC_ERROR_DETECTED(x) ((x) < 0)
+#define VLC_IO_ERROR -1
+#define VLC_CODE_ERROR -2
+#define VLC_MB_STUFFING -4
+#define VLC_NO_LAST_BIT -5
+
+#define VLC_ESCAPE_CODE 7167
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+ PV_STATUS DecodeUserData(BitstreamDecVideo *stream);
+ PV_STATUS PV_GetMBvectors(VideoDecData *, uint mode);
+ PV_STATUS PV_DecodeMBVec(BitstreamDecVideo *stream, MOT *mv_x, MOT *mv_y, int f_code_f);
+ PV_STATUS PV_DeScaleMVD(int f_code, int residual, int vlc_code_mag, MOT *vector);
+
+ PV_STATUS PV_VlcDecMV(BitstreamDecVideo *stream, int *mv);
+ int PV_VlcDecMCBPC_com_intra(BitstreamDecVideo *stream);
+ int PV_VlcDecMCBPC_com_inter(BitstreamDecVideo *stream);
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ int PV_VlcDecMCBPC_com_inter_H263(BitstreamDecVideo *stream);
+ PV_STATUS VlcDecTCOEFShortHeader_AnnexI(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS VlcDecTCOEFShortHeader_AnnexT(BitstreamDecVideo *stream, Tcoef *pTcoef); /* ANNEX_T */
+ PV_STATUS VlcDecTCOEFShortHeader_AnnexIT(BitstreamDecVideo *stream, Tcoef *pTcoef);
+#endif
+ int PV_VlcDecCBPY(BitstreamDecVideo *stream, int intra);
+
+ PV_STATUS VlcDecTCOEFIntra(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS VlcDecTCOEFInter(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS VlcDecTCOEFShortHeader(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS RvlcDecTCOEFIntra(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS RvlcDecTCOEFInter(BitstreamDecVideo *stream, Tcoef *pTcoef);
+ PV_STATUS PV_VlcDecIntraDCPredSize(BitstreamDecVideo *stream, int compnum, uint *DC_size);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dequant.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dequant.cpp
new file mode 100644
index 0000000..db13a48
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_dequant.cpp
@@ -0,0 +1,1152 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "vlc_decode.h"
+#include "zigzag.h"
+
+
+typedef PV_STATUS(*VlcDecFuncP)(BitstreamDecVideo *stream, Tcoef *pTcoef);
+static const uint8 AC_rowcol[64] = { 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ };
+static const uint8 mask[8] = /* for fast bitmap */
+ {128, 64, 32, 16, 8, 4, 2, 1};
+
+
+
+/***********************************************************CommentBegin******
+*
+* -- VlcDequantMpegBlock -- Decodes the DCT coefficients of one 8x8 block and perform
+ dequantization using Mpeg mode.
+ Date: 08/08/2000
+
+ Modified: 3/21/01
+ Added pre IDCT clipping, new ACDC prediction structure, ACDC prediction clipping,
+ 16-bit int case, removed multiple zigzaging
+******************************************************************************/
+
+#ifdef PV_SUPPORT_MAIN_PROFILE
+int VlcDequantMpegIntraBlock(void *vid, int comp, int switched,
+ uint8 *bitmapcol, uint8 *bitmaprow)
+{
+ VideoDecData *video = (VideoDecData*) vid;
+ Vol *currVol = video->vol[video->currLayer];
+ BitstreamDecVideo *stream = video->bitstream;
+ int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
+ int mbnum = video->mbnum;
+ uint CBP = video->headerInfo.CBP[mbnum];
+ int QP = video->QPMB[mbnum];
+ typeDCStore *DC = video->predDC + mbnum;
+ int x_pos = video->mbnum_col;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+ uint ACpred_flag = (uint) video->acPredFlag[mbnum];
+
+ /*** VLC *****/
+ int i, j, k;
+ Tcoef run_level;
+ int last, return_status;
+ VlcDecFuncP vlcDecCoeff;
+ int direction;
+ const int *inv_zigzag;
+ /*** Quantizer ****/
+ int dc_scaler;
+ int sum;
+ int *qmat;
+ int32 temp;
+
+ const int B_Xtab[6] = {0, 1, 0, 1, 2, 3};
+ const int B_Ytab[6] = {0, 0, 1, 1, 2, 3};
+
+ int16 *dcac_row, *dcac_col;
+
+ dcac_row = (*DCAC_row)[B_Xtab[comp]];
+ dcac_col = (*DCAC_col)[B_Ytab[comp]];
+
+
+ i = 1 - switched;
+
+#ifdef FAST_IDCT
+ *((uint32*)bitmapcol) = *((uint32*)(bitmapcol + 4)) = 0;
+ *bitmaprow = 0;
+#endif
+
+
+ /* select which Huffman table to be used */
+ vlcDecCoeff = video->vlcDecCoeffIntra;
+
+ dc_scaler = (comp < 4) ? video->mblock->DCScalarLum : video->mblock->DCScalarChr;
+
+ /* enter the zero run decoding loop */
+ sum = 0;
+ qmat = currVol->iqmat;
+
+ /* perform only VLC decoding */
+ /* We cannot do DCACrecon before VLC decoding. 10/17/2000 */
+ doDCACPrediction(video, comp, datablock, &direction);
+ if (!ACpred_flag) direction = 0;
+ inv_zigzag = zigzag_inv + (ACpred_flag << 6) + (direction << 6);
+ if (CBP & (1 << (5 - comp)))
+ {
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = VLC_ERROR;
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ /* i = NCOEFF_BLOCK; */ /* 11/1/00 */
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ i = VLC_NO_LAST_BIT;
+ last = 1;
+ break;
+ }
+
+ k = inv_zigzag[i];
+
+ if (run_level.sign == 1)
+ {
+ datablock[k] -= run_level.level;
+ }
+ else
+ {
+ datablock[k] += run_level.level;
+ }
+
+ if (AC_rowcol[k])
+ {
+ temp = (int32)datablock[k] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3;
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int) temp;
+
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+ sum ^= temp;
+ }
+
+ i++;
+ }
+ while (!last);
+
+ }
+ else
+ {
+ i = 1; /* 04/26/01 needed for switched case */
+ }
+ ///// NEED TO DEQUANT THOSE PREDICTED AC COEFF
+ /* dequantize the rest of AC predicted coeff that haven't been dequant */
+ if (ACpred_flag)
+ {
+
+ i = NCOEFF_BLOCK; /* otherwise, FAST IDCT won't work correctly, 10/18/2000 */
+
+ if (!direction) /* check vertical */
+ {
+ dcac_row[0] = datablock[1];
+ dcac_row[1] = datablock[2];
+ dcac_row[2] = datablock[3];
+ dcac_row[3] = datablock[4];
+ dcac_row[4] = datablock[5];
+ dcac_row[5] = datablock[6];
+ dcac_row[6] = datablock[7];
+
+ for (j = 0, k = 8; k < 64; k += 8, j++)
+ {
+ if (dcac_col[j] = datablock[k])
+ { /* ACDC clipping 03/26/01 */
+ if (datablock[k] > 2047) dcac_col[j] = 2047;
+ else if (datablock[k] < -2048) dcac_col[j] = -2048;
+
+ temp = (int32)dcac_col[j] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01*/
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp; /* 7/5/01 */
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+
+ }
+ }
+ for (k = 1; k < 8; k++)
+ {
+ if (datablock[k])
+ {
+ temp = (int32)datablock[k] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01*/
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp; /* 7/5/01 */
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+
+ }
+ }
+
+ }
+ else
+ {
+
+ dcac_col[0] = datablock[8];
+ dcac_col[1] = datablock[16];
+ dcac_col[2] = datablock[24];
+ dcac_col[3] = datablock[32];
+ dcac_col[4] = datablock[40];
+ dcac_col[5] = datablock[48];
+ dcac_col[6] = datablock[56];
+
+
+ for (j = 0, k = 1; k < 8; k++, j++)
+ {
+ if (dcac_row[j] = datablock[k])
+ { /* ACDC clipping 03/26/01 */
+ if (datablock[k] > 2047) dcac_row[j] = 2047;
+ else if (datablock[k] < -2048) dcac_row[j] = -2048;
+
+ temp = (int32)dcac_row[j] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01 */
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp;
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+
+ }
+ }
+
+ for (k = 8; k < 64; k += 8)
+ {
+ if (datablock[k])
+ {
+ temp = (int32)datablock[k] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01 */
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+ }
+ }
+
+ }
+ }
+ else
+ {
+
+ /* Store the qcoeff-values needed later for prediction */
+
+ dcac_row[0] = datablock[1]; /* ACDC, no need for clipping */
+ dcac_row[1] = datablock[2];
+ dcac_row[2] = datablock[3];
+ dcac_row[3] = datablock[4];
+ dcac_row[4] = datablock[5];
+ dcac_row[5] = datablock[6];
+ dcac_row[6] = datablock[7];
+
+ dcac_col[0] = datablock[8];
+ dcac_col[1] = datablock[16];
+ dcac_col[2] = datablock[24];
+ dcac_col[3] = datablock[32];
+ dcac_col[4] = datablock[40];
+ dcac_col[5] = datablock[48];
+ dcac_col[6] = datablock[56];
+
+ for (k = 1; k < 8; k++)
+ {
+ if (datablock[k])
+ {
+ temp = (int32)datablock[k] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01*/
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp; /* 7/5/01 */
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+
+ }
+ }
+ for (k = 8; k < 64; k += 8)
+ {
+ if (datablock[k])
+ {
+ temp = (int32)datablock[k] * qmat[k] * QP;
+ temp = (temp + (0x7 & (temp >> 31))) >> 3; /* 03/26/01 */
+ if (temp > 2047) temp = 2047;
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int)temp;
+ sum ^= temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+ }
+ }
+
+ }
+
+
+
+ if (datablock[0])
+ {
+ temp = (int32)datablock[0] * dc_scaler;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[0] = (int)temp;
+ sum ^= temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= 128;
+#endif
+ }
+
+ if ((sum & 1) == 0)
+ {
+ datablock[63] = datablock[63] ^ 0x1;
+#ifdef FAST_IDCT /* 7/5/01, need to update bitmap */
+ if (datablock[63])
+ bitmapcol[7] |= 1;
+#endif
+ i = (-64 & i) | NCOEFF_BLOCK; /* if i > -1 then i is set to NCOEFF_BLOCK */
+ }
+
+
+#ifdef FAST_IDCT
+ if (i > 10)
+ {
+ for (k = 1; k < 4; k++)
+ {
+ if (bitmapcol[k] != 0)
+ {
+ (*bitmaprow) |= mask[k];
+ }
+ }
+ }
+#endif
+
+ /* Store the qcoeff-values needed later for prediction */
+ (*DC)[comp] = datablock[0];
+ return i;
+
+}
+
+
+/***********************************************************CommentBegin******
+*
+* -- VlcDequantMpegInterBlock -- Decodes the DCT coefficients of one 8x8 block and perform
+ dequantization using Mpeg mode for INTER block.
+ Date: 08/08/2000
+ Modified: 3/21/01
+ clean up, added clipping, 16-bit int case, new ACDC prediction
+******************************************************************************/
+
+
+int VlcDequantMpegInterBlock(void *vid, int comp,
+ uint8 *bitmapcol, uint8 *bitmaprow)
+{
+ VideoDecData *video = (VideoDecData*) vid;
+ BitstreamDecVideo *stream = video->bitstream;
+ Vol *currVol = video->vol[video->currLayer];
+ int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
+ int mbnum = video->mbnum;
+ int QP = video->QPMB[mbnum];
+ /*** VLC *****/
+ int i, k;
+ Tcoef run_level;
+ int last, return_status;
+ VlcDecFuncP vlcDecCoeff;
+
+ /*** Quantizer ****/
+ int sum;
+ int *qmat;
+
+ int32 temp;
+
+ i = 0 ;
+
+#ifdef FAST_IDCT
+ *((uint32*)bitmapcol) = *((uint32*)(bitmapcol + 4)) = 0;
+ *bitmaprow = 0;
+#endif
+
+ /* select which Huffman table to be used */
+ vlcDecCoeff = video->vlcDecCoeffInter;
+
+ /* enter the zero run decoding loop */
+ sum = 0;
+ qmat = currVol->niqmat;
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = VLC_ERROR;
+ sum = 1; /* no of coefficients should not get reset 03/07/2002 */
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ /* i = NCOEFF_BLOCK; */ /* 11/1/00 */
+ //return VLC_NO_LAST_BIT;
+ i = VLC_NO_LAST_BIT;
+ last = 1;
+ sum = 1; /* no of coefficients should not get reset 03/07/2002 */
+ break;
+ }
+
+ k = zigzag_inv[i];
+
+ if (run_level.sign == 1)
+ {
+ temp = (-(int32)(2 * run_level.level + 1) * qmat[k] * QP + 15) >> 4; /* 03/23/01 */
+ if (temp < -2048) temp = - 2048;
+ }
+ else
+ {
+ temp = ((int32)(2 * run_level.level + 1) * qmat[k] * QP) >> 4; /* 03/23/01 */
+ if (temp > 2047) temp = 2047;
+ }
+
+ datablock[k] = (int)temp;
+
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+ sum ^= temp;
+
+ i++;
+ }
+ while (!last);
+
+ if ((sum & 1) == 0)
+ {
+ datablock[63] = datablock[63] ^ 0x1;
+#ifdef FAST_IDCT /* 7/5/01, need to update bitmap */
+ if (datablock[63])
+ bitmapcol[7] |= 1;
+#endif
+ i = NCOEFF_BLOCK;
+ }
+
+
+#ifdef FAST_IDCT
+ if (i > 10)
+ {
+ for (k = 1; k < 4; k++) /* 07/19/01 */
+ {
+ if (bitmapcol[k] != 0)
+ {
+ (*bitmaprow) |= mask[k];
+ }
+ }
+ }
+#endif
+
+ return i;
+}
+#endif
+/***********************************************************CommentBegin******
+*
+* -- VlcDequantIntraH263Block -- Decodes the DCT coefficients of one 8x8 block and perform
+ dequantization in H.263 mode for INTRA block.
+ Date: 08/08/2000
+ Modified: 3/21/01
+ clean up, added clipping, 16-bit int case, removed multiple zigzaging
+******************************************************************************/
+
+
+int VlcDequantH263IntraBlock(VideoDecData *video, int comp, int switched,
+ uint8 *bitmapcol, uint8 *bitmaprow)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
+ int32 temp;
+ int mbnum = video->mbnum;
+ uint CBP = video->headerInfo.CBP[mbnum];
+ int QP = video->QPMB[mbnum];
+ typeDCStore *DC = video->predDC + mbnum;
+ int x_pos = video->mbnum_col;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+ uint ACpred_flag = (uint) video->acPredFlag[mbnum];
+
+ /*** VLC *****/
+ int i, j, k;
+ Tcoef run_level;
+ int last, return_status;
+ VlcDecFuncP vlcDecCoeff;
+ int direction;
+ const int *inv_zigzag;
+
+ /*** Quantizer ****/
+ int dc_scaler;
+ int sgn_coeff;
+
+
+
+ const int B_Xtab[6] = {0, 1, 0, 1, 2, 3};
+ const int B_Ytab[6] = {0, 0, 1, 1, 2, 3};
+
+ int16 *dcac_row, *dcac_col;
+
+ dcac_row = (*DCAC_row)[B_Xtab[comp]];
+ dcac_col = (*DCAC_col)[B_Ytab[comp]];
+
+#ifdef FAST_IDCT
+ *((uint32*)bitmapcol) = *((uint32*)(bitmapcol + 4)) = 0;
+ *bitmaprow = 0;
+#endif
+ /* select which Huffman table to be used */
+ vlcDecCoeff = video->vlcDecCoeffIntra;
+
+ dc_scaler = (comp < 4) ? video->mblock->DCScalarLum : video->mblock->DCScalarChr;
+
+ /* perform only VLC decoding */
+ doDCACPrediction(video, comp, datablock, &direction);
+ if (!ACpred_flag) direction = 0;
+
+ inv_zigzag = zigzag_inv + (ACpred_flag << 6) + (direction << 6); /* 04/17/01 */
+
+ i = 1;
+ if (CBP & (1 << (5 - comp)))
+ {
+ i = 1 - switched;
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = VLC_ERROR;
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ i = VLC_NO_LAST_BIT;
+ last = 1;
+ break;
+ }
+
+ k = inv_zigzag[i];
+
+ if (run_level.sign == 1)
+ {
+ datablock[k] -= run_level.level;
+ sgn_coeff = -1;
+ }
+ else
+ {
+ datablock[k] += run_level.level;
+ sgn_coeff = 1;
+ }
+
+
+ if (AC_rowcol[k]) /* 10/25/2000 */
+ {
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+ }
+
+ i++;
+ }
+ while (!last);
+
+ }
+
+ ///// NEED TO DEQUANT THOSE PREDICTED AC COEFF
+ /* dequantize the rest of AC predicted coeff that haven't been dequant */
+ if (ACpred_flag)
+ {
+
+ i = NCOEFF_BLOCK; /* otherwise, FAST IDCT won't work correctly, 10/18/2000 */
+
+ if (!direction) /* check vertical */
+ {
+
+ dcac_row[0] = datablock[1];
+ dcac_row[1] = datablock[2];
+ dcac_row[2] = datablock[3];
+ dcac_row[3] = datablock[4];
+ dcac_row[4] = datablock[5];
+ dcac_row[5] = datablock[6];
+ dcac_row[6] = datablock[7];
+
+ for (j = 0, k = 8; k < 64; k += 8, j++)
+ {
+ dcac_col[j] = datablock[k];
+ if (dcac_col[j])
+ {
+ if (datablock[k] > 0)
+ {
+ if (datablock[k] > 2047) dcac_col[j] = 2047;
+ sgn_coeff = 1;
+ }
+ else
+ {
+ if (datablock[k] < -2048) dcac_col[j] = -2048;
+ sgn_coeff = -1;
+ }
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+
+ }
+ }
+
+ for (k = 1; k < 8; k++)
+ {
+ if (datablock[k])
+ {
+ sgn_coeff = (datablock[k] > 0) ? 1 : -1;
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+
+ }
+ }
+ }
+ else
+ {
+
+ dcac_col[0] = datablock[8];
+ dcac_col[1] = datablock[16];
+ dcac_col[2] = datablock[24];
+ dcac_col[3] = datablock[32];
+ dcac_col[4] = datablock[40];
+ dcac_col[5] = datablock[48];
+ dcac_col[6] = datablock[56];
+
+
+ for (j = 0, k = 1; k < 8; k++, j++)
+ {
+ dcac_row[j] = datablock[k];
+ if (dcac_row[j])
+ {
+ if (datablock[k] > 0)
+ {
+ if (datablock[k] > 2047) dcac_row[j] = 2047;
+ sgn_coeff = 1;
+ }
+ else
+ {
+ if (datablock[k] < -2048) dcac_row[j] = -2048;
+ sgn_coeff = -1;
+ }
+
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int) temp;
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+
+ }
+ }
+ for (k = 8; k < 64; k += 8)
+ {
+ if (datablock[k])
+ {
+ sgn_coeff = (datablock[k] > 0) ? 1 : -1;
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+ }
+ }
+
+ }
+ }
+ else
+ {
+ dcac_row[0] = datablock[1];
+ dcac_row[1] = datablock[2];
+ dcac_row[2] = datablock[3];
+ dcac_row[3] = datablock[4];
+ dcac_row[4] = datablock[5];
+ dcac_row[5] = datablock[6];
+ dcac_row[6] = datablock[7];
+
+ dcac_col[0] = datablock[8];
+ dcac_col[1] = datablock[16];
+ dcac_col[2] = datablock[24];
+ dcac_col[3] = datablock[32];
+ dcac_col[4] = datablock[40];
+ dcac_col[5] = datablock[48];
+ dcac_col[6] = datablock[56];
+
+ for (k = 1; k < 8; k++)
+ {
+ if (datablock[k])
+ {
+ sgn_coeff = (datablock[k] > 0) ? 1 : -1;
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+#ifdef FAST_IDCT
+ bitmapcol[k] |= 128;
+#endif
+ }
+ }
+ for (k = 8; k < 64; k += 8)
+ {
+ if (datablock[k])
+ {
+ sgn_coeff = (datablock[k] > 0) ? 1 : -1;
+ temp = (int32)QP * (2 * datablock[k] + sgn_coeff) - sgn_coeff + (QP & 1) * sgn_coeff;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[k] = (int16) temp;
+#ifdef FAST_IDCT
+ bitmapcol[0] |= mask[k>>3];
+#endif
+ }
+ }
+ }
+ if (datablock[0])
+ {
+#ifdef FAST_IDCT
+ bitmapcol[0] |= 128;
+#endif
+
+ temp = (int32)datablock[0] * dc_scaler;
+ if (temp > 2047) temp = 2047; /* 03/14/01 */
+ else if (temp < -2048) temp = -2048;
+ datablock[0] = (int16)temp;
+ }
+
+
+#ifdef FAST_IDCT
+ if (i > 10)
+ {
+ for (k = 1; k < 4; k++) /* if i > 10 then k = 0 does not matter */
+ {
+ if (bitmapcol[k] != 0)
+ {
+ (*bitmaprow) |= mask[k]; /* (1<<(7-i)); */
+ }
+ }
+ }
+#endif
+
+ /* Store the qcoeff-values needed later for prediction */
+ (*DC)[comp] = datablock[0];
+ return i;
+}
+
+int VlcDequantH263IntraBlock_SH(VideoDecData *video, int comp, uint8 *bitmapcol, uint8 *bitmaprow)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int16 *datablock = video->mblock->block[comp]; /*, 10/20/2000, assume it has been reset of all-zero !!!*/
+ int32 temp;
+ int mbnum = video->mbnum;
+ uint CBP = video->headerInfo.CBP[mbnum];
+ int16 QP = video->QPMB[mbnum];
+ typeDCStore *DC = video->predDC + mbnum;
+ int x_pos = video->mbnum_col;
+ typeDCACStore *DCAC_row = video->predDCAC_row + x_pos;
+ typeDCACStore *DCAC_col = video->predDCAC_col;
+ uint ACpred_flag = (uint) video->acPredFlag[mbnum];
+
+ /*** VLC *****/
+ int i, k;
+ Tcoef run_level;
+ int last, return_status;
+ VlcDecFuncP vlcDecCoeff;
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ int direction;
+ const int *inv_zigzag;
+#endif
+ /*** Quantizer ****/
+
+
+
+ const int B_Xtab[6] = {0, 1, 0, 1, 2, 3};
+ const int B_Ytab[6] = {0, 0, 1, 1, 2, 3};
+
+ int16 *dcac_row, *dcac_col;
+
+ dcac_row = (*DCAC_row)[B_Xtab[comp]];
+ dcac_col = (*DCAC_col)[B_Ytab[comp]];
+ i = 1;
+
+#ifdef FAST_IDCT
+ *((uint32*)bitmapcol) = *((uint32*)(bitmapcol + 4)) = 0;
+ *bitmaprow = 0;
+#endif
+
+ /* select which Huffman table to be used */
+ vlcDecCoeff = video->vlcDecCoeffIntra;
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (comp > 3) /* ANNEX_T */
+ {
+ QP = video->QP_CHR;
+ }
+ if (!video->advanced_INTRA)
+ {
+#endif
+
+ if ((CBP & (1 << (5 - comp))) == 0)
+ {
+#ifdef FAST_IDCT
+ bitmapcol[0] = 128;
+ bitmapcol[1] = bitmapcol[2] = bitmapcol[3] = bitmapcol[4] = bitmapcol[5] = bitmapcol[6] = bitmapcol[7] = 0;
+#endif
+ datablock[0] <<= 3; /* no need to clip */
+ return 1;//ncoeffs;
+ }
+ else
+ {
+ /* enter the zero run decoding loop */
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = VLC_ERROR;
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ /* i = NCOEFF_BLOCK; */ /* 11/1/00 */
+ i = VLC_NO_LAST_BIT;
+ last = 1;
+ break;
+ }
+ k = zigzag_inv[i];
+
+ if (run_level.sign == 0)
+ {
+ temp = (int32)QP * (2 * run_level.level + 1) - 1 + (QP & 1);
+ if (temp > 2047) temp = 2047;
+ }
+ else
+ {
+ temp = -(int32)QP * (2 * run_level.level + 1) + 1 - (QP & 1);
+ if (temp < -2048) temp = -2048;
+ }
+
+
+ datablock[k] = (int16) temp;
+
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+ i++;
+ }
+ while (!last);
+
+ }
+ /* no ACDC prediction when ACDC disable */
+ if (datablock[0])
+ {
+#ifdef FAST_IDCT
+ bitmapcol[0] |= 128;
+#endif
+ datablock[0] <<= 3; /* no need to clip 09/18/2001 */
+ }
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ }
+ else /* advanced_INTRA mode */
+ {
+ i = 1;
+ doDCACPrediction_I(video, comp, datablock);
+ /* perform only VLC decoding */
+ if (!ACpred_flag)
+ {
+ direction = 0;
+ }
+ else
+ {
+ direction = video->mblock->direction;
+ }
+
+ inv_zigzag = zigzag_inv + (ACpred_flag << 6) + (direction << 6); /* 04/17/01 */
+
+ if (CBP & (1 << (5 - comp)))
+ {
+ i = 0;
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = VLC_ERROR;
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ /* i = NCOEFF_BLOCK; */ /* 11/1/00 */
+ ACpred_flag = 0; /* no of coefficients should not get reset 03/07/2002 */
+ i = VLC_NO_LAST_BIT;
+ last = 1;
+ break;
+ }
+
+ k = inv_zigzag[i];
+
+ if (run_level.sign == 0)
+ {
+ datablock[k] += (int16)QP * 2 * run_level.level;
+ if (datablock[k] > 2047) datablock[k] = 2047;
+ }
+ else
+ {
+ datablock[k] -= (int16)QP * 2 * run_level.level;
+ if (datablock[k] < -2048) datablock[k] = -2048;
+ }
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+
+ i++;
+ }
+ while (!last);
+
+ }
+ ///// NEED TO DEQUANT THOSE PREDICTED AC COEFF
+ /* dequantize the rest of AC predicted coeff that haven't been dequant */
+
+ if (ACpred_flag)
+ {
+ i = NCOEFF_BLOCK;
+ for (k = 1; k < 8; k++)
+ {
+ if (datablock[k])
+ {
+ bitmapcol[k] |= 128;
+ }
+
+ if (datablock[k<<3])
+ {
+ bitmapcol[0] |= mask[k];
+ }
+ }
+ }
+
+ dcac_row[0] = datablock[1];
+ dcac_row[1] = datablock[2];
+ dcac_row[2] = datablock[3];
+ dcac_row[3] = datablock[4];
+ dcac_row[4] = datablock[5];
+ dcac_row[5] = datablock[6];
+ dcac_row[6] = datablock[7];
+
+ dcac_col[0] = datablock[8];
+ dcac_col[1] = datablock[16];
+ dcac_col[2] = datablock[24];
+ dcac_col[3] = datablock[32];
+ dcac_col[4] = datablock[40];
+ dcac_col[5] = datablock[48];
+ dcac_col[6] = datablock[56];
+
+ if (datablock[0])
+ {
+#ifdef FAST_IDCT
+ bitmapcol[0] |= 128;
+#endif
+
+ datablock[0] |= 1;
+ if (datablock[0] < 0)
+ {
+ datablock[0] = 0;
+ }
+ }
+ }
+#endif
+
+#ifdef FAST_IDCT
+ if (i > 10)
+ {
+ for (k = 1; k < 4; k++) /* if i > 10 then k = 0 does not matter */
+ {
+ if (bitmapcol[k] != 0)
+ {
+ (*bitmaprow) |= mask[k]; /* (1<<(7-i)); */
+ }
+ }
+ }
+#endif
+
+ /* Store the qcoeff-values needed later for prediction */
+ (*DC)[comp] = datablock[0];
+ return i;
+}
+
+/***********************************************************CommentBegin******
+*
+* -- VlcDequantInterH263Block -- Decodes the DCT coefficients of one 8x8 block and perform
+ dequantization in H.263 mode for INTER block.
+ Date: 08/08/2000
+ Modified: 3/21/01
+ clean up, added clipping, 16-bit int case
+******************************************************************************/
+
+
+int VlcDequantH263InterBlock(VideoDecData *video, int comp,
+ uint8 *bitmapcol, uint8 *bitmaprow)
+{
+ BitstreamDecVideo *stream = video->bitstream;
+ int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
+ int32 temp;
+ int mbnum = video->mbnum;
+ int QP = video->QPMB[mbnum];
+
+ /*** VLC *****/
+ int i, k;
+ Tcoef run_level;
+ int last, return_status;
+ VlcDecFuncP vlcDecCoeff;
+
+ /*** Quantizer ****/
+
+
+ i = 0;
+
+#ifdef FAST_IDCT
+ *((uint32*)bitmapcol) = *((uint32*)(bitmapcol + 4)) = 0;
+ *bitmaprow = 0;
+#endif
+
+ /* select which Huffman table to be used */
+ vlcDecCoeff = video->vlcDecCoeffInter;
+
+ /* enter the zero run decoding loop */
+ do
+ {
+ return_status = (*vlcDecCoeff)(stream, &run_level);
+ if (return_status != PV_SUCCESS)
+ {
+
+
+ last = 1;/* 11/1/2000 let it slips undetected, just like
+ in original version */
+ i = -1;
+ break;
+ }
+
+ i += run_level.run;
+ last = run_level.last;
+ if (i >= 64)
+ {
+ i = -1;
+ last = 1;
+ break;
+ }
+
+ if (run_level.sign == 0)
+ {
+ temp = (int32)QP * (2 * run_level.level + 1) - 1 + (QP & 1);
+ if (temp > 2047) temp = 2047;
+
+ }
+ else
+ {
+ temp = -(int32)QP * (2 * run_level.level + 1) + 1 - (QP & 1);
+ if (temp < -2048) temp = -2048;
+ }
+
+ k = zigzag_inv[i];
+ datablock[k] = (int16)temp;
+#ifdef FAST_IDCT
+ bitmapcol[k&0x7] |= mask[k>>3];
+#endif
+ i++;
+ }
+ while (!last);
+
+#ifdef FAST_IDCT
+ if (i > 10) /* 07/19/01 */
+ {
+ for (k = 1; k < 4; k++) /* if (i > 10 ) k = 0 does not matter */
+ {
+ if (bitmapcol[k] != 0)
+ {
+ (*bitmaprow) |= mask[k]; /* (1<<(7-i)); */
+ }
+ }
+ }
+#endif
+ return i;
+}
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vlc_tab.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_tab.cpp
new file mode 100644
index 0000000..704992f
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vlc_tab.cpp
@@ -0,0 +1,835 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_api.h"
+#include "mp4def.h"
+#include "mp4lib_int.h"
+#include "vlc_dec_tab.h"
+#include "max_level.h"
+
+
+const int intra_max_level[2][NCOEFF_BLOCK] =
+{
+ {27, 10, 5, 4, 3, 3, 3, 3,
+ 2, 2, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ },
+
+ {8, 3, 2, 2, 2, 2, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+ }
+};
+
+
+const int inter_max_level[2][NCOEFF_BLOCK] =
+{
+ {12, 6, 4, 3, 3, 3, 3, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0},
+
+ {3, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0}
+};
+
+
+const int intra_max_run0[28] = { 999, 14, 9, 7, 3, 2, 1,
+ 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0
+ };
+
+
+const int intra_max_run1[9] = { 999, 20, 6,
+ 1, 0, 0,
+ 0, 0, 0
+ };
+
+const int inter_max_run0[13] = { 999,
+ 26, 10, 6, 2, 1, 1,
+ 0, 0, 0, 0, 0, 0
+ };
+
+
+const int inter_max_run1[4] = { 999, 40, 1, 0 };
+
+const VLCshorttab PV_TMNMVtab0[] =
+{
+ {3, 4}, { -3, 4}, {2, 3}, {2, 3}, { -2, 3}, { -2, 3}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
+ { -1, 2}, { -1, 2}, { -1, 2}, { -1, 2}
+};
+
+const VLCshorttab PV_TMNMVtab1[] =
+{
+ {12, 10}, { -12, 10}, {11, 10}, { -11, 10}, {10, 9}, {10, 9}, { -10, 9}, { -10, 9},
+ {9, 9}, {9, 9}, { -9, 9}, { -9, 9}, {8, 9}, {8, 9}, { -8, 9}, { -8, 9}, {7, 7}, {7, 7},
+ {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, { -7, 7}, { -7, 7}, { -7, 7}, { -7, 7},
+ { -7, 7}, { -7, 7}, { -7, 7}, { -7, 7}, {6, 7}, {6, 7}, {6, 7}, {6, 7}, {6, 7}, {6, 7},
+ {6, 7}, {6, 7}, { -6, 7}, { -6, 7}, { -6, 7}, { -6, 7}, { -6, 7}, { -6, 7}, { -6, 7},
+ { -6, 7}, {5, 7}, {5, 7}, {5, 7}, {5, 7}, {5, 7}, {5, 7}, {5, 7}, {5, 7}, { -5, 7},
+ { -5, 7}, { -5, 7}, { -5, 7}, { -5, 7}, { -5, 7}, { -5, 7}, { -5, 7}, {4, 6}, {4, 6}, {4, 6},
+ {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6},
+ {4, 6}, {4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6},
+ { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}, { -4, 6}
+};
+
+const VLCshorttab PV_TMNMVtab2[] =
+{
+ {32, 12}, { -32, 12}, {31, 12}, { -31, 12}, {30, 11}, {30, 11}, { -30, 11}, { -30, 11},
+ {29, 11}, {29, 11}, { -29, 11}, { -29, 11}, {28, 11}, {28, 11}, { -28, 11}, { -28, 11},
+ {27, 11}, {27, 11}, { -27, 11}, { -27, 11}, {26, 11}, {26, 11}, { -26, 11}, { -26, 11},
+ {25, 11}, {25, 11}, { -25, 11}, { -25, 11}, {24, 10}, {24, 10}, {24, 10}, {24, 10},
+ { -24, 10}, { -24, 10}, { -24, 10}, { -24, 10}, {23, 10}, {23, 10}, {23, 10}, {23, 10},
+ { -23, 10}, { -23, 10}, { -23, 10}, { -23, 10}, {22, 10}, {22, 10}, {22, 10}, {22, 10},
+ { -22, 10}, { -22, 10}, { -22, 10}, { -22, 10}, {21, 10}, {21, 10}, {21, 10}, {21, 10},
+ { -21, 10}, { -21, 10}, { -21, 10}, { -21, 10}, {20, 10}, {20, 10}, {20, 10}, {20, 10},
+ { -20, 10}, { -20, 10}, { -20, 10}, { -20, 10}, {19, 10}, {19, 10}, {19, 10}, {19, 10},
+ { -19, 10}, { -19, 10}, { -19, 10}, { -19, 10}, {18, 10}, {18, 10}, {18, 10}, {18, 10},
+ { -18, 10}, { -18, 10}, { -18, 10}, { -18, 10}, {17, 10}, {17, 10}, {17, 10}, {17, 10},
+ { -17, 10}, { -17, 10}, { -17, 10}, { -17, 10}, {16, 10}, {16, 10}, {16, 10}, {16, 10},
+ { -16, 10}, { -16, 10}, { -16, 10}, { -16, 10}, {15, 10}, {15, 10}, {15, 10}, {15, 10},
+ { -15, 10}, { -15, 10}, { -15, 10}, { -15, 10}, {14, 10}, {14, 10}, {14, 10}, {14, 10},
+ { -14, 10}, { -14, 10}, { -14, 10}, { -14, 10}, {13, 10}, {13, 10}, {13, 10}, {13, 10},
+ { -13, 10}, { -13, 10}, { -13, 10}, { -13, 10}
+};
+
+const VLCshorttab PV_MCBPCtab[] =
+{
+ {VLC_ERROR, 0},
+ {255, 9}, {52, 9}, {36, 9}, {20, 9}, {49, 9}, {35, 8}, {35, 8}, {19, 8}, {19, 8},
+ {50, 8}, {50, 8}, {51, 7}, {51, 7}, {51, 7}, {51, 7}, {34, 7}, {34, 7}, {34, 7},
+ {34, 7}, {18, 7}, {18, 7}, {18, 7}, {18, 7}, {33, 7}, {33, 7}, {33, 7}, {33, 7},
+ {17, 7}, {17, 7}, {17, 7}, {17, 7}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6},
+ {4, 6}, {4, 6}, {4, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6},
+ {48, 6}, {48, 6}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5},
+ {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5},
+ {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
+ {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
+ {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
+ {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
+ {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
+ {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
+ {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
+ {16, 4}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
+ {2, 3}, {2, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
+ {1, 3}, {1, 3}, {1, 3}
+};
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+const VLCshorttab PV_MCBPCtab1[] =
+{
+ {5, 11}, {5, 11}, {5, 11}, {5, 11}, {21, 13}, {21, 13}, {37, 13}, {53, 13},
+};
+#endif
+const VLCshorttab PV_MCBPCtabintra[] =
+{
+ {VLC_ERROR, 0},
+ {20, 6}, {36, 6}, {52, 6}, {4, 4}, {4, 4}, {4, 4},
+ {4, 4}, {19, 3}, {19, 3}, {19, 3}, {19, 3}, {19, 3},
+ {19, 3}, {19, 3}, {19, 3}, {35, 3}, {35, 3}, {35, 3},
+ {35, 3}, {35, 3}, {35, 3}, {35, 3}, {35, 3}, {51, 3},
+ {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3},
+ {51, 3}
+};
+
+
+
+const VLCshorttab PV_CBPYtab[48] =
+{
+ {VLC_ERROR, 0}, {VLC_ERROR, 0}, {6, 6}, {9, 6}, {8, 5}, {8, 5}, {4, 5}, {4, 5},
+ {2, 5}, {2, 5}, {1, 5}, {1, 5}, {0, 4}, {0, 4}, {0, 4}, {0, 4},
+ {12, 4}, {12, 4}, {12, 4}, {12, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4},
+ {14, 4}, {14, 4}, {14, 4}, {14, 4}, {5, 4}, {5, 4}, {5, 4}, {5, 4},
+ {13, 4}, {13, 4}, {13, 4}, {13, 4}, {3, 4}, {3, 4}, {3, 4}, {3, 4},
+ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {7, 4}, {7, 4}, {7, 4}, {7, 4}
+};
+
+
+
+const VLCtab2 PV_DCT3Dtab0[] =
+{
+ {0x8, 1, 1, 7}, {0x7, 1, 1, 7}, {0x6, 1, 1, 7}, {0x5, 1, 1, 7}, {0xc, 1, 0, 7}, {0xb, 1, 0, 7},
+ {0xa, 1, 0, 7}, {0x0, 4, 0, 7}, {0x4, 1, 1, 6}, {0x4, 1, 1, 6}, {0x3, 1, 1, 6}, {0x3, 1, 1, 6},
+ {0x2, 1, 1, 6}, {0x2, 1, 1, 6}, {0x1, 1, 1, 6}, {0x1, 1, 1, 6}, {0x9, 1, 0, 6}, {0x9, 1, 0, 6},
+ {0x8, 1, 0, 6}, {0x8, 1, 0, 6}, {0x7, 1, 0, 6}, {0x7, 1, 0, 6}, {0x6, 1, 0, 6}, {0x6, 1, 0, 6},
+ {0x1, 2, 0, 6}, {0x1, 2, 0, 6}, {0x0, 3, 0, 6}, {0x0, 3, 0, 6}, {0x5, 1, 0, 5}, {0x5, 1, 0, 5},
+ {0x5, 1, 0, 5}, {0x5, 1, 0, 5}, {0x4, 1, 0, 5}, {0x4, 1, 0, 5}, {0x4, 1, 0, 5}, {0x4, 1, 0, 5},
+ {0x3, 1, 0, 5}, {0x3, 1, 0, 5}, {0x3, 1, 0, 5}, {0x3, 1, 0, 5}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3},
+ {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3},
+ {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3}, {0x1, 1, 0, 3},
+ {0x2, 1, 0, 4}, {0x2, 1, 0, 4}, {0x2, 1, 0, 4}, {0x2, 1, 0, 4}, {0x2, 1, 0, 4}, {0x2, 1, 0, 4},
+ {0x2, 1, 0, 4}, {0x2, 1, 0, 4}, {0x0, 2, 0, 4}, {0x0, 2, 0, 4}, {0x0, 2, 0, 4}, {0x0, 2, 0, 4},
+ {0x0, 2, 0, 4}, {0x0, 2, 0, 4}, {0x0, 2, 0, 4}, {0x0, 2, 0, 4}
+};
+
+
+const VLCtab2 PV_DCT3Dtab1[] =
+{
+ {0x0, 9, 0, 10}, {0x0, 8, 0, 10}, {0x18, 1, 1, 9}, {0x18, 1, 1, 9}, {0x17, 1, 1, 9}, {0x17, 1, 1, 9},
+ {0x16, 1, 1, 9}, {0x16, 1, 1, 9}, {0x15, 1, 1, 9}, {0x15, 1, 1, 9}, {0x14, 1, 1, 9}, {0x14, 1, 1, 9},
+ {0x13, 1, 1, 9}, {0x13, 1, 1, 9}, {0x12, 1, 1, 9}, {0x12, 1, 1, 9}, {0x11, 1, 1, 9}, {0x11, 1, 1, 9},
+ {0x0, 2, 1, 9}, {0x0, 2, 1, 9}, {0x16, 1, 0, 9}, {0x16, 1, 0, 9}, {0x15, 1, 0, 9}, {0x15, 1, 0, 9},
+ {0x14, 1, 0, 9}, {0x14, 1, 0, 9}, {0x13, 1, 0, 9}, {0x13, 1, 0, 9}, {0x12, 1, 0, 9}, {0x12, 1, 0, 9},
+ {0x11, 1, 0, 9}, {0x11, 1, 0, 9}, {0x10, 1, 0, 9}, {0x10, 1, 0, 9}, {0xf, 1, 0, 9}, {0xf, 1, 0, 9},
+ {0x4, 2, 0, 9}, {0x4, 2, 0, 9}, {0x3, 2, 0, 9}, {0x3, 2, 0, 9}, {0x0, 7, 0, 9}, {0x0, 7, 0, 9},
+ {0x0, 6, 0, 9}, {0x0, 6, 0, 9}, {0x10, 1, 1, 8}, {0x10, 1, 1, 8}, {0x10, 1, 1, 8}, {0x10, 1, 1, 8},
+ {0xf, 1, 1, 8}, {0xf, 1, 1, 8}, {0xf, 1, 1, 8}, {0xf, 1, 1, 8}, {0xe, 1, 1, 8}, {0xe, 1, 1, 8},
+ {0xe, 1, 1, 8}, {0xe, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8},
+ {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xb, 1, 1, 8}, {0xb, 1, 1, 8},
+ {0xb, 1, 1, 8}, {0xb, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8},
+ {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0xe, 1, 0, 8}, {0xe, 1, 0, 8},
+ {0xe, 1, 0, 8}, {0xe, 1, 0, 8}, {0xd, 1, 0, 8}, {0xd, 1, 0, 8}, {0xd, 1, 0, 8}, {0xd, 1, 0, 8},
+ {0x2, 2, 0, 8}, {0x2, 2, 0, 8}, {0x2, 2, 0, 8}, {0x2, 2, 0, 8}, {0x1, 3, 0, 8}, {0x1, 3, 0, 8},
+ {0x1, 3, 0, 8}, {0x1, 3, 0, 8}, {0x0, 5, 0, 8}, {0x0, 5, 0, 8}, {0x0, 5, 0, 8}, {0x0, 5, 0, 8}
+};
+
+
+const VLCtab2 PV_DCT3Dtab2[] =
+{
+ {0x1, 2, 1, 11}, {0x1, 2, 1, 11}, {0x0, 3, 1, 11}, {0x0, 3, 1, 11}, {0x0, 0xb, 0, 11}, {0x0, 0xb, 0, 11},
+ {0x0, 0xa, 0, 11}, {0x0, 0xa, 0, 11}, {0x1c, 1, 1, 10}, {0x1c, 1, 1, 10}, {0x1c, 1, 1, 10}, {0x1c, 1, 1, 10},
+ {0x1b, 1, 1, 10}, {0x1b, 1, 1, 10}, {0x1b, 1, 1, 10}, {0x1b, 1, 1, 10}, {0x1a, 1, 1, 10}, {0x1a, 1, 1, 10},
+ {0x1a, 1, 1, 10}, {0x1a, 1, 1, 10}, {0x19, 1, 1, 10}, {0x19, 1, 1, 10}, {0x19, 1, 1, 10}, {0x19, 1, 1, 10},
+ {0x9, 2, 0, 10}, {0x9, 2, 0, 10}, {0x9, 2, 0, 10}, {0x9, 2, 0, 10}, {0x8, 2, 0, 10}, {0x8, 2, 0, 10},
+ {0x8, 2, 0, 10}, {0x8, 2, 0, 10}, {0x7, 2, 0, 10}, {0x7, 2, 0, 10}, {0x7, 2, 0, 10}, {0x7, 2, 0, 10},
+ {0x6, 2, 0, 10}, {0x6, 2, 0, 10}, {0x6, 2, 0, 10}, {0x6, 2, 0, 10}, {0x5, 2, 0, 10}, {0x5, 2, 0, 10},
+ {0x5, 2, 0, 10}, {0x5, 2, 0, 10}, {0x3, 3, 0, 10}, {0x3, 3, 0, 10}, {0x3, 3, 0, 10}, {0x3, 3, 0, 10},
+ {0x2, 3, 0, 10}, {0x2, 3, 0, 10}, {0x2, 3, 0, 10}, {0x2, 3, 0, 10}, {0x1, 4, 0, 10}, {0x1, 4, 0, 10},
+ {0x1, 4, 0, 10}, {0x1, 4, 0, 10}, {0x0, 0xc, 0, 11}, {0x0, 0xc, 0, 11}, {0x1, 5, 0, 11}, {0x1, 5, 0, 11},
+ {0x17, 1, 0, 11}, {0x17, 1, 0, 11}, {0x18, 1, 0, 11}, {0x18, 1, 0, 11}, {0x1d, 1, 1, 11}, {0x1d, 1, 1, 11},
+ {0x1e, 1, 1, 11}, {0x1e, 1, 1, 11}, {0x1f, 1, 1, 11}, {0x1f, 1, 1, 11}, {0x20, 1, 1, 11}, {0x20, 1, 1, 11},
+ {0x1, 6, 0, 12}, {0x2, 4, 0, 12}, {0x4, 3, 0, 12}, {0x5, 3, 0, 12}, {0x6, 3, 0, 12}, {0xa, 2, 0, 12},
+ {0x19, 1, 0, 12}, {0x1a, 1, 0, 12}, {0x21, 1, 1, 12}, {0x22, 1, 1, 12}, {0x23, 1, 1, 12}, {0x24, 1, 1, 12},
+ {0x25, 1, 1, 12}, {0x26, 1, 1, 12}, {0x27, 1, 1, 12}, {0x28, 1, 1, 12}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7}, {0xbf, 0xf, 1, 7},
+ {0xbf, 0xf, 1, 7}
+};
+
+/* New tables for Intra luminance blocks */
+
+const VLCtab2 PV_DCT3Dtab3[] =
+{
+ {0x4, 1, 1, 7}, {0x3, 1, 1, 7}, {0x6, 1, 0, 7}, {0x5, 1, 1, 7},
+ {0x7, 1, 0, 7}, {0x2, 2, 0, 7}, {0x1, 3, 0, 7}, {0x0, 9, 0, 7},
+ {0x0, 2, 1, 6}, {0x0, 2, 1, 6}, {0x5, 1, 0, 6}, {0x5, 1, 0, 6},
+ {0x2, 1, 1, 6}, {0x2, 1, 1, 6}, {0x1, 1, 1, 6}, {0x1, 1, 1, 6},
+ {0x4, 1, 0, 6}, {0x4, 1, 0, 6}, {0x3, 1, 0, 6}, {0x3, 1, 0, 6},
+ {0x0, 8, 0, 6}, {0x0, 8, 0, 6}, {0x0, 7, 0, 6}, {0x0, 7, 0, 6},
+ {0x1, 2, 0, 6}, {0x1, 2, 0, 6}, {0x0, 6, 0, 6}, {0x0, 6, 0, 6},
+ {0x2, 1, 0, 5}, {0x2, 1, 0, 5}, {0x2, 1, 0, 5}, {0x2, 1, 0, 5},
+ {0x0, 5, 0, 5}, {0x0, 5, 0, 5}, {0x0, 5, 0, 5}, {0x0, 5, 0, 5},
+ {0x0, 4, 0, 5}, {0x0, 4, 0, 5}, {0x0, 4, 0, 5}, {0x0, 4, 0, 5},
+ {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4},
+ {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4},
+ {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4},
+ {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}
+};
+
+const VLCtab2 PV_DCT3Dtab4[] =
+{
+ {0x0, 0x12, 0, 10}, {0x0, 0x11, 0, 10}, {0xe, 1, 1, 9}, {0xe, 1, 1, 9},
+ {0xd, 1, 1, 9}, {0xd, 1, 1, 9}, {0xc, 1, 1, 9}, {0xc, 1, 1, 9},
+ {0xb, 1, 1, 9}, {0xb, 1, 1, 9}, {0xa, 1, 1, 9}, {0xa, 1, 1, 9},
+ {0x1, 2, 1, 9}, {0x1, 2, 1, 9}, {0x0, 4, 1, 9}, {0x0, 4, 1, 9},
+ {0xc, 1, 0, 9}, {0xc, 1, 0, 9}, {0xb, 1, 0, 9}, {0xb, 1, 0, 9},
+ {0x7, 2, 0, 9}, {0x7, 2, 0, 9}, {0x6, 2, 0, 9}, {0x6, 2, 0, 9},
+ {0x5, 2, 0, 9}, {0x5, 2, 0, 9}, {0x3, 3, 0, 9}, {0x3, 3, 0, 9},
+ {0x2, 3, 0, 9}, {0x2, 3, 0, 9}, {0x1, 6, 0, 9}, {0x1, 6, 0, 9},
+ {0x1, 5, 0, 9}, {0x1, 5, 0, 9}, {0x0, 0x10, 0, 9}, {0x0, 0x10, 0, 9},
+ {0x4, 2, 0, 9}, {0x4, 2, 0, 9}, {0x0, 0xf, 0, 9}, {0x0, 0xf, 0, 9},
+ {0x0, 0xe, 0, 9}, {0x0, 0xe, 0, 9}, {0x0, 0xd, 0, 9}, {0x0, 0xd, 0, 9},
+ {0x8, 1, 1, 8}, {0x8, 1, 1, 8}, {0x8, 1, 1, 8}, {0x8, 1, 1, 8},
+ {0x7, 1, 1, 8}, {0x7, 1, 1, 8}, {0x7, 1, 1, 8}, {0x7, 1, 1, 8},
+ {0x6, 1, 1, 8}, {0x6, 1, 1, 8}, {0x6, 1, 1, 8}, {0x6, 1, 1, 8},
+ {0x0, 3, 1, 8}, {0x0, 3, 1, 8}, {0x0, 3, 1, 8}, {0x0, 3, 1, 8},
+ {0xa, 1, 0, 8}, {0xa, 1, 0, 8}, {0xa, 1, 0, 8}, {0xa, 1, 0, 8},
+ {0x9, 1, 0, 8}, {0x9, 1, 0, 8}, {0x9, 1, 0, 8}, {0x9, 1, 0, 8},
+ {0x8, 1, 0, 8}, {0x8, 1, 0, 8}, {0x8, 1, 0, 8}, {0x8, 1, 0, 8},
+ {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8},
+ {0x3, 2, 0, 8}, {0x3, 2, 0, 8}, {0x3, 2, 0, 8}, {0x3, 2, 0, 8},
+ {0x1, 4, 0, 8}, {0x1, 4, 0, 8}, {0x1, 4, 0, 8}, {0x1, 4, 0, 8},
+ {0x0, 0xc, 0, 8}, {0x0, 0xc, 0, 8}, {0x0, 0xc, 0, 8}, {0x0, 0xc, 0, 8},
+ {0x0, 0xb, 0, 8}, {0x0, 0xb, 0, 8}, {0x0, 0xb, 0, 8}, {0x0, 0xb, 0, 8},
+ {0x0, 0xa, 0, 8}, {0x0, 0xa, 0, 8}, {0x0, 0xa, 0, 8}, {0x0, 0xa, 0, 8}
+};
+
+const VLCtab2 PV_DCT3Dtab5[] =
+{
+ {0x0, 7, 1, 11}, {0x0, 7, 1, 11}, {0x0, 6, 1, 11}, {0x0, 6, 1, 11},
+ {0x0, 0x16, 0, 11}, {0x0, 0x16, 0, 11}, {0x0, 0x15, 0, 11}, {0x0, 0x15, 0, 11},
+ {0x2, 2, 1, 10}, {0x2, 2, 1, 10}, {0x2, 2, 1, 10}, {0x2, 2, 1, 10},
+ {0x1, 3, 1, 10}, {0x1, 3, 1, 10}, {0x1, 3, 1, 10}, {0x1, 3, 1, 10},
+ {0x0, 5, 1, 10}, {0x0, 5, 1, 10}, {0x0, 5, 1, 10}, {0x0, 5, 1, 10},
+ {0xd, 1, 0, 10}, {0xd, 1, 0, 10}, {0xd, 1, 0, 10}, {0xd, 1, 0, 10},
+ {0x5, 3, 0, 10}, {0x5, 3, 0, 10}, {0x5, 3, 0, 10}, {0x5, 3, 0, 10},
+ {0x8, 2, 0, 10}, {0x8, 2, 0, 10}, {0x8, 2, 0, 10}, {0x8, 2, 0, 10},
+ {0x4, 3, 0, 10}, {0x4, 3, 0, 10}, {0x4, 3, 0, 10}, {0x4, 3, 0, 10},
+ {0x3, 4, 0, 10}, {0x3, 4, 0, 10}, {0x3, 4, 0, 10}, {0x3, 4, 0, 10},
+ {0x2, 4, 0, 10}, {0x2, 4, 0, 10}, {0x2, 4, 0, 10}, {0x2, 4, 0, 10},
+ {0x1, 7, 0, 10}, {0x1, 7, 0, 10}, {0x1, 7, 0, 10}, {0x1, 7, 0, 10},
+ {0x0, 0x14, 0, 10}, {0x0, 0x14, 0, 10}, {0x0, 0x14, 0, 10}, {0x0, 0x14, 0, 10},
+ {0x0, 0x13, 0, 10}, {0x0, 0x13, 0, 10}, {0x0, 0x13, 0, 10}, {0x0, 0x13, 0, 10},
+ {0x0, 0x17, 0, 11}, {0x0, 0x17, 0, 11}, {0x0, 0x18, 0, 11}, {0x0, 0x18, 0, 11},
+ {0x1, 8, 0, 11}, {0x1, 8, 0, 11}, {0x9, 2, 0, 11}, {0x9, 2, 0, 11},
+ {0x3, 2, 1, 11}, {0x3, 2, 1, 11}, {0x4, 2, 1, 11}, {0x4, 2, 1, 11},
+ {0xf, 1, 1, 11}, {0xf, 1, 1, 11}, {0x10, 1, 1, 11}, {0x10, 1, 1, 11},
+ {0, 0x19, 0, 12}, {0, 0x1a, 0, 12}, {0, 0x1b, 0, 12}, {1, 9, 0, 12},
+ {0x6, 3, 0, 12}, {0x1, 0xa, 0, 12}, {0x2, 5, 0, 12}, {0x7, 3, 0, 12},
+ {0xe, 1, 0, 12}, {0x0, 8, 1, 12}, {0x5, 2, 1, 12}, {0x6, 2, 1, 12},
+ {0x11, 1, 1, 12}, {0x12, 1, 1, 12}, {0x13, 1, 1, 12}, {0x14, 1, 1, 12},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7},
+ {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}, {0x1b, 0xff, 0, 7}
+};
+
+#ifdef PV_ANNEX_IJKT_SUPPORT
+const VLCtab2 PV_DCT3Dtab6[] =
+{
+ {0x0, 3, 1, 7}, {0x4, 1, 1, 7}, {0x6, 1, 1, 7}, {0x5, 1, 1, 7}, {0x1, 3, 0, 7}, {0x2, 2, 0, 7},
+ {0x0, 9, 0, 7}, {0x5, 1, 0, 7}, {0x0, 2, 1, 6}, {0x0, 2, 1, 6}, {0x3, 1, 1, 6}, {0x3, 1, 1, 6},
+ {0x2, 1, 1, 6}, {0x2, 1, 1, 6}, {0x1, 1, 1, 6}, {0x1, 1, 1, 6}, {0x0, 6, 0, 6}, {0x0, 6, 0, 6},
+ {0x0, 7, 0, 6}, {0x0, 7, 0, 6}, {0x0, 8, 0, 6}, {0x0, 8, 0, 6}, {0x4, 1, 0, 6}, {0x4, 1, 0, 6},
+ {0x1, 2, 0, 6}, {0x1, 2, 0, 6}, {0x3, 1, 0, 6}, {0x3, 1, 0, 6}, {0x2, 1, 0, 5}, {0x2, 1, 0, 5},
+ {0x2, 1, 0, 5}, {0x2, 1, 0, 5}, {0x0, 4, 0, 5}, {0x0, 4, 0, 5}, {0x0, 4, 0, 5}, {0x0, 4, 0, 5},
+ {0x0, 5, 0, 5}, {0x0, 5, 0, 5}, {0x0, 5, 0, 5}, {0x0, 5, 0, 5}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4}, {0x0, 1, 1, 4},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 1, 0, 2},
+ {0x0, 1, 0, 2}, {0x0, 1, 0, 2}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3}, {0x0, 2, 0, 3},
+ {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x0, 3, 0, 4},
+ {0x0, 3, 0, 4}, {0x0, 3, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4},
+ {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}, {0x1, 1, 0, 4}
+};
+
+const VLCtab2 PV_DCT3Dtab7[] =
+{
+ {0xb, 1, 0, 10}, {0xa, 1, 0, 10}, {0x0, 5, 1, 9}, {0x0, 5, 1, 9}, {0x0, 6, 1, 9}, {0x0, 6, 1, 9},
+ {0x1, 2, 1, 9}, {0x1, 2, 1, 9}, {0x2, 2, 1, 9}, {0x2, 2, 1, 9}, {0xf, 1, 1, 9}, {0xf, 1, 1, 9},
+ {0x10, 1, 1, 9}, {0x10, 1, 1, 9}, {0x12, 1, 1, 9}, {0x12, 1, 1, 9}, {0x11, 1, 1, 9}, {0x11, 1, 1, 9},
+ {0xe, 1, 1, 9}, {0xe, 1, 1, 9}, {0x0, 13, 0, 9}, {0x0, 13, 0, 9}, {0x0, 14, 0, 9}, {0x0, 14, 0, 9},
+ {0x0, 15, 0, 9}, {0x0, 15, 0, 9}, {0x0, 16, 0, 9}, {0x0, 16, 0, 9}, {0x0, 17, 0, 9}, {0x0, 17, 0, 9},
+ {0x0, 18, 0, 9}, {0x0, 18, 0, 9}, {0x0, 11, 0, 9}, {0x0, 11, 0, 9}, {0x0, 12, 0, 9}, {0x0, 12, 0, 9},
+ {0x5, 2, 0, 9}, {0x5, 2, 0, 9}, {0x4, 2, 0, 9}, {0x4, 2, 0, 9}, {0x9, 1, 0, 9}, {0x9, 1, 0, 9},
+ {0x8, 1, 0, 9}, {0x8, 1, 0, 9}, {0x0, 4, 1, 8}, {0x0, 4, 1, 8}, {0x0, 4, 1, 8}, {0x0, 4, 1, 8},
+ {0x7, 1, 1, 8}, {0x7, 1, 1, 8}, {0x7, 1, 1, 8}, {0x7, 1, 1, 8}, {0x8, 1, 1, 8}, {0x8, 1, 1, 8},
+ {0x8, 1, 1, 8}, {0x8, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8}, {0xd, 1, 1, 8},
+ {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xc, 1, 1, 8}, {0xb, 1, 1, 8}, {0xb, 1, 1, 8},
+ {0xb, 1, 1, 8}, {0xb, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8}, {0xa, 1, 1, 8},
+ {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x9, 1, 1, 8}, {0x0, 10, 0, 8}, {0x0, 10, 0, 8},
+ {0x0, 10, 0, 8}, {0x0, 10, 0, 8}, {0x6, 1, 0, 8}, {0x6, 1, 0, 8}, {0x6, 1, 0, 8}, {0x6, 1, 0, 8},
+ {0x3, 2, 0, 8}, {0x3, 2, 0, 8}, {0x3, 2, 0, 8}, {0x3, 2, 0, 8}, {0x1, 4, 0, 8}, {0x1, 4, 0, 8},
+ {0x1, 4, 0, 8}, {0x1, 4, 0, 8}, {0x7, 1, 0, 8}, {0x7, 1, 0, 8}, {0x7, 1, 0, 8}, {0x7, 1, 0, 8}
+};
+
+
+const VLCtab2 PV_DCT3Dtab8[] =
+{
+ {0x13, 0x1, 1, 11}, {0x13, 0x1, 1, 11}, {0x14, 0x1, 1, 11}, {0x14, 0x1, 1, 11}, {0x9, 0x2, 0, 11}, {0x9, 0x2, 0, 11},
+ {0x4, 0x3, 0, 11}, {0x4, 0x3, 0, 11}, {0x0, 0x7, 1, 10}, {0x0, 0x7, 1, 10}, {0x0, 0x7, 1, 10}, {0x0, 0x7, 1, 10},
+ {0x1, 0x3, 1, 10}, {0x1, 0x3, 1, 10}, {0x1, 0x3, 1, 10}, {0x1, 0x3, 1, 10}, {0x3, 0x2, 1, 10}, {0x3, 0x2, 1, 10},
+ {0x3, 0x2, 1, 10}, {0x3, 0x2, 1, 10}, {0x4, 0x2, 1, 10}, {0x4, 0x2, 1, 10}, {0x4, 0x2, 1, 10}, {0x4, 0x2, 1, 10},
+ {0xc, 0x1, 0, 10}, {0xc, 0x1, 0, 10}, {0xc, 0x1, 0, 10}, {0xc, 0x1, 0, 10}, {0x2, 0x4, 0, 10}, {0x2, 0x4, 0, 10},
+ {0x2, 0x4, 0, 10}, {0x2, 0x4, 0, 10}, {0x8, 0x2, 0, 10}, {0x8, 0x2, 0, 10}, {0x8, 0x2, 0, 10}, {0x8, 0x2, 0, 10},
+ {0x7, 0x2, 0, 10}, {0x7, 0x2, 0, 10}, {0x7, 0x2, 0, 10}, {0x7, 0x2, 0, 10}, {0x6, 0x2, 0, 10}, {0x6, 0x2, 0, 10},
+ {0x6, 0x2, 0, 10}, {0x6, 0x2, 0, 10}, {0x3, 0x3, 0, 10}, {0x3, 0x3, 0, 10}, {0x3, 0x3, 0, 10}, {0x3, 0x3, 0, 10},
+ {0x2, 0x3, 0, 10}, {0x2, 0x3, 0, 10}, {0x2, 0x3, 0, 10}, {0x2, 0x3, 0, 10}, {0x1, 0x5, 0, 10}, {0x1, 0x5, 0, 10},
+ {0x1, 0x5, 0, 10}, {0x1, 0x5, 0, 10}, {0xd, 0x1, 0, 11}, {0xd, 0x1, 0, 11}, {0x1, 0x6, 0, 11}, {0x1, 0x6, 0, 11},
+ {0x0, 0x14, 0, 11}, {0x0, 0x14, 0, 11}, {0x0, 0x13, 0, 11}, {0x0, 0x13, 0, 11}, {0x2, 0x3, 1, 11}, {0x2, 0x3, 1, 11},
+ {0x1, 0x4, 1, 11}, {0x1, 0x4, 1, 11}, {0x0, 0x9, 1, 11}, {0x0, 0x9, 1, 11}, {0x0, 0x8, 1, 11}, {0x0, 0x8, 1, 11},
+ {0x1, 0x7, 0, 12}, {0x3, 0x4, 0, 12}, {0x5, 0x3, 0, 12}, {0x0, 0x19, 0, 12}, {0x0, 0x18, 0, 12}, {0x0, 0x17, 0, 12},
+ {0x0, 0x16, 0, 12}, {0x0, 0x15, 0, 12}, {0x15, 0x1, 1, 12}, {0x16, 0x1, 1, 12}, {0x17, 0x1, 1, 12}, {0x7, 0x2, 1, 12},
+ {0x6, 0x2, 1, 12}, {0x5, 0x2, 1, 12}, {0x3, 0x3, 1, 12}, {0x0, 0xa, 1, 12}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7},
+ {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7},
+ {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7},
+ {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7},
+ {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7},
+ {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}, {0x2f, 0x3f, 1, 7}
+};
+#endif
+/* RVLC tables */
+const int ptrRvlcTab[11] = {0, 24, 46, 66, 84, 100, 114, 126, 134, 140, 144};
+
+const VLCtab2 RvlcDCTtabIntra[170] = /* 00xxxx00 or 00xxxx01 */
+{
+ {27, 255, 0, 5}, /* 0000 is escape code */
+ {1, 1, 0, 4},
+ {2, 1, 0, 5},
+ {3, 1, 0, 5},
+ {4, 1, 0, 6},
+ {5, 1, 0, 6},
+ {6, 1, 0, 7},
+ {7, 1, 0, 7},
+ {8, 1, 0, 8},
+ {9, 1, 0, 8},
+ {10, 1, 0, 9},
+ {5, 2, 0, 9},
+ {11, 1, 0, 10},
+ {12, 1, 0, 10},
+ {13, 1, 0, 11},
+ {9, 2, 0, 11},
+ {10, 2, 0, 12},
+ {4, 4, 0, 12},
+ {14, 1, 0, 13},
+ {15, 1, 0, 13},
+ {16, 1, 0, 14},
+ {17, 1, 0, 14},
+ {0, 27, 0, 15},
+ {3, 9, 0, 15},
+ /* 010xxxx00 or 010xxxx01 */
+ {1, 2, 0, 5},
+ {0, 4, 0, 5},
+ {0, 5, 0, 6},
+ {0, 6, 0, 6},
+ {2, 2, 0, 7},
+ {1, 3, 0, 7},
+ {3, 2, 0, 8},
+ {4, 2, 0, 8},
+ {2, 3, 0, 9},
+ {3, 3, 0, 9},
+ {6, 2, 0, 10},
+ {7, 2, 0, 10},
+ {5, 3, 0, 11},
+ {6, 3, 0, 11},
+ {5, 4, 0, 12},
+ {6, 4, 0, 12},
+ {11, 2, 0, 13},
+ {8, 3, 0, 13},
+ {18, 1, 0, 14},
+ {8, 4, 0, 14},
+ {6, 5, 0, 15},
+ {7, 5, 0, 15},
+ /* 0110xxxx00 or 0110xxxx01 */
+ {3, 1, 1, 6},
+ {4, 1, 1, 6},
+ {0, 7, 0, 7},
+ {7, 1, 1, 7},
+ {1, 4, 0, 8},
+ {1, 5, 0, 8},
+ {1, 6, 0, 9},
+ {0, 10, 0, 9},
+ {8, 2, 0, 10},
+ {4, 3, 0, 10},
+ {7, 3, 0, 11},
+ {3, 4, 0, 11},
+ {3, 5, 0, 12},
+ {4, 5, 0, 12},
+ {9, 3, 0, 13},
+ {7, 4, 0, 13},
+ {5, 5, 0, 14},
+ {4, 6, 0, 14},
+ {9, 4, 0, 15},
+ {12, 2, 0, 15},
+ /* 01110xxxx00 or 01110xxxx01 */
+ {8, 1, 1, 7},
+ {9, 1, 1, 7},
+ {0, 8, 0, 8},
+ {0, 9, 0, 8},
+ {0, 11, 0, 9},
+ {1, 2, 1, 9},
+ {2, 4, 0, 10},
+ {1, 7, 0, 10},
+ {2, 5, 0, 11},
+ {2, 6, 0, 11},
+ {1, 10, 0, 12},
+ {0, 18, 0, 12},
+ {3, 6, 0, 13},
+ {2, 7, 0, 13},
+ {5, 6, 0, 14},
+ {3, 7, 0, 14},
+ {19, 1, 0, 15},
+ {1, 5, 1, 15},
+ /* 011110xxxx00 or 011110xxxx01 */
+ {0, 2, 1, 8},
+ {12, 1, 1, 8},
+ {15, 1, 1, 9},
+ {16, 1, 1, 9},
+ {0, 12, 0, 10},
+ {0, 13, 0, 10},
+ {1, 8, 0, 11},
+ {1, 9, 0, 11},
+ {0, 19, 0, 12},
+ {0, 22, 0, 12},
+ {2, 8, 0, 13},
+ {2, 9, 0, 13},
+ {3, 8, 0, 14},
+ {2, 10, 0, 14},
+ {2, 3, 1, 15},
+ {13, 2, 1, 15},
+ /* 0111110xxxx00 or 0111110xxxx01 */
+ {17, 1, 1, 9},
+ {18, 1, 1, 9},
+ {0, 14, 0, 10},
+ {21, 1, 1, 10},
+ {0, 15, 0, 11},
+ {0, 16, 0, 11},
+ {1, 3, 1, 12},
+ {3, 2, 1, 12},
+ {1, 11, 0, 13},
+ {0, 20, 0, 13},
+ {2, 11, 0, 14},
+ {1, 12, 0, 14},
+ {41, 1, 1, 15},
+ {42, 1, 1, 15},
+ /* 01111110xxxx00 or 01111110xxxx01 */
+ {22, 1, 1, 10},
+ {23, 1, 1, 10},
+ {0, 17, 0, 11},
+ {0, 3, 1, 11},
+ {4, 2, 1, 12},
+ {29, 1, 1, 12},
+ {0, 21, 0, 13},
+ {0, 23, 0, 13},
+ {1, 13, 0, 14},
+ {0, 24, 0, 14},
+ {43, 1, 1, 15},
+ {44, 1, 1, 15},
+ /* 011111110xxxx00 or 011111110xxxx01 */
+ {2, 2, 1, 11},
+ {26, 1, 1, 11},
+ {30, 1, 1, 12},
+ {31, 1, 1, 12},
+ {0, 4, 1, 13},
+ {5, 2, 1, 13},
+ {0, 25, 0, 14},
+ {0, 26, 0, 14},
+ /* 0111111110xxxx00 or 0111111110xxxx01 */
+ {32, 1, 1, 12},
+ {33, 1, 1, 12},
+ {6, 2, 1, 13},
+ {7, 2, 1, 13},
+ {0, 5, 1, 14},
+ {1, 4, 1, 14},
+ /* 01111111110xxxx00 or 01111111110xxxx01 */
+ {8, 2, 1, 13},
+ {9, 2, 1, 13},
+ {10, 2, 1, 14},
+ {11, 2, 1, 14},
+ /* 011111111110xxxx00 or 011111111110xxxx01 */
+ {12, 2, 1, 14},
+ {38, 1, 1, 14},
+ /* 1xxxx10 or 1xxxx11 from 11 zeros to 0 zeros*/
+ {0, 1, 0, 3},
+ {0, 2, 0, 3},
+ {0, 3, 0, 4},
+ {0, 1, 1, 4},
+ {1, 1, 1, 5},
+ {2, 1, 1, 5},
+ {5, 1, 1, 6},
+ {6, 1, 1, 6},
+ {10, 1, 1, 7},
+ {11, 1, 1, 7},
+ {13, 1, 1, 8},
+ {14, 1, 1, 8},
+ {19, 1, 1, 9},
+ {20, 1, 1, 9},
+ {24, 1, 1, 10},
+ {25, 1, 1, 10},
+ {27, 1, 1, 11},
+ {28, 1, 1, 11},
+ {34, 1, 1, 12},
+ {35, 1, 1, 12},
+ {36, 1, 1, 13},
+ {37, 1, 1, 13},
+ {39, 1, 1, 14},
+ {40, 1, 1, 14}
+};
+
+const VLCtab2 RvlcDCTtabInter[170] = /* 00xxxx00 or 00xxxx01 */
+{
+ {27, 255, 0, 5}, /* 0000 is escape code */
+ {0, 2, 0, 4},
+ {0, 3, 0, 5},
+ {3, 1, 0, 5},
+ {1, 2, 0, 6},
+ {6, 1, 0, 6},
+ {0, 4, 0, 7},
+ {2, 2, 0, 7},
+ {0, 5, 0, 8},
+ {0, 6, 0, 8},
+ {0, 7, 0, 9},
+ {1, 4, 0, 9},
+ {0, 8, 0, 10},
+ {0, 9, 0, 10},
+ {0, 10, 0, 11},
+ {0, 11, 0, 11},
+ {0, 12, 0, 12},
+ {1, 7, 0, 12},
+ {0, 13, 0, 13},
+ {0, 14, 0, 13},
+ {0, 17, 0, 14},
+ {0, 18, 0, 14},
+ {0, 19, 0, 15},
+ {3, 7, 0, 15},
+ /* 010xxxx00 or 010xxxx01 */
+ {4, 1, 0, 5},
+ {5, 1, 0, 5},
+ {7, 1, 0, 6},
+ {8, 1, 0, 6},
+ {9, 1, 0, 7},
+ {10, 1, 0, 7},
+ {1, 3, 0, 8},
+ {3, 2, 0, 8},
+ {2, 3, 0, 9},
+ {5, 2, 0, 9},
+ {1, 5, 0, 10},
+ {3, 3, 0, 10},
+ {1, 6, 0, 11},
+ {2, 4, 0, 11},
+ {2, 5, 0, 12},
+ {3, 4, 0, 12},
+ {0, 15, 0, 13},
+ {0, 16, 0, 13},
+ {1, 9, 0, 14},
+ {1, 10, 0, 14},
+ {4, 5, 0, 15},
+ {7, 4, 0, 15},
+ /* 0110xxxx00 or 0110xxxx01 */
+ {3, 1, 1, 6},
+ {4, 1, 1, 6},
+ {11, 1, 0, 7},
+ {7, 1, 1, 7},
+ {4, 2, 0, 8},
+ {12, 1, 0, 8},
+ {15, 1, 0, 9},
+ {16, 1, 0, 9},
+ {6, 2, 0, 10},
+ {7, 2, 0, 10},
+ {4, 3, 0, 11},
+ {5, 3, 0, 11},
+ {6, 3, 0, 12},
+ {7, 3, 0, 12},
+ {1, 8, 0, 13},
+ {3, 5, 0, 13},
+ {2, 6, 0, 14},
+ {2, 7, 0, 14},
+ {17, 2, 0, 15},
+ {37, 1, 0, 15},
+ /* 01110xxxx00 or 01110xxxx01 */
+ {8, 1, 1, 7},
+ {9, 1, 1, 7},
+ {13, 1, 0, 8},
+ {14, 1, 0, 8},
+ {17, 1, 0, 9},
+ {1, 2, 1, 9},
+ {8, 2, 0, 10},
+ {9, 2, 0, 10},
+ {10, 2, 0, 11},
+ {21, 1, 0, 11},
+ {11, 2, 0, 12},
+ {27, 1, 0, 12},
+ {4, 4, 0, 13},
+ {5, 4, 0, 13},
+ {3, 6, 0, 14},
+ {6, 4, 0, 14},
+ {38, 1, 0, 15},
+ {1, 5, 1, 15},
+ /* 011110xxxx00 or 011110xxxx01 */
+ {0, 2, 1, 8},
+ {12, 1, 1, 8},
+ {15, 1, 1, 9},
+ {16, 1, 1, 9},
+ {18, 1, 0, 10},
+ {19, 1, 0, 10},
+ {22, 1, 0, 11},
+ {23, 1, 0, 11},
+ {28, 1, 0, 12},
+ {29, 1, 0, 12},
+ {8, 3, 0, 13},
+ {12, 2, 0, 13},
+ {9, 3, 0, 14},
+ {13, 2, 0, 14},
+ {2, 3, 1, 15},
+ {13, 2, 1, 15},
+ /* 0111110xxxx00 or 0111110xxxx01 */
+ {17, 1, 1, 9},
+ {18, 1, 1, 9},
+ {20, 1, 0, 10},
+ {21, 1, 1, 10},
+ {24, 1, 0, 11},
+ {25, 1, 0, 11},
+ {1, 3, 1, 12},
+ {3, 2, 1, 12},
+ {30, 1, 0, 13},
+ {31, 1, 0, 13},
+ {14, 2, 0, 14},
+ {15, 2, 0, 14},
+ {41, 1, 1, 15},
+ {42, 1, 1, 15},
+ /* 01111110xxxx00 or 01111110xxxx01 */
+ {22, 1, 1, 10},
+ {23, 1, 1, 10},
+ {26, 1, 0, 11},
+ {0, 3, 1, 11},
+ {4, 2, 1, 12},
+ {29, 1, 1, 12},
+ {32, 1, 0, 13},
+ {33, 1, 0, 13},
+ {16, 2, 0, 14},
+ {34, 1, 0, 14},
+ {43, 1, 1, 15},
+ {44, 1, 1, 15},
+ /* 011111110xxxx00 or 011111110xxxx01 */
+ {2, 2, 1, 11},
+ {26, 1, 1, 11},
+ {30, 1, 1, 12},
+ {31, 1, 1, 12},
+ {0, 4, 1, 13},
+ {5, 2, 1, 13},
+ {35, 1, 0, 14},
+ {36, 1, 0, 14},
+ /* 0111111110xxxx00 or 0111111110xxxx01 */
+ {32, 1, 1, 12},
+ {33, 1, 1, 12},
+ {6, 2, 1, 13},
+ {7, 2, 1, 13},
+ {0, 5, 1, 14},
+ {1, 4, 1, 14},
+ /* 01111111110xxxx00 or 01111111110xxxx01 */
+ {8, 2, 1, 13},
+ {9, 2, 1, 13},
+ {10, 2, 1, 14},
+ {11, 2, 1, 14},
+ /* 011111111110xxxx00 or 011111111110xxxx01 */
+ {12, 2, 1, 14},
+ {38, 1, 1, 14},
+ /* 1xxxx10 or 1xxxx11 from 11 zeros to 0 zeros*/
+ {0, 1, 0, 3},
+ {1, 1, 0, 3},
+ {2, 1, 0, 4},
+ {0, 1, 1, 4},
+ {1, 1, 1, 5},
+ {2, 1, 1, 5},
+ {5, 1, 1, 6},
+ {6, 1, 1, 6},
+ {10, 1, 1, 7},
+ {11, 1, 1, 7},
+ {13, 1, 1, 8},
+ {14, 1, 1, 8},
+ {19, 1, 1, 9},
+ {20, 1, 1, 9},
+ {24, 1, 1, 10},
+ {25, 1, 1, 10},
+ {27, 1, 1, 11},
+ {28, 1, 1, 11},
+ {34, 1, 1, 12},
+ {35, 1, 1, 12},
+ {36, 1, 1, 13},
+ {37, 1, 1, 13},
+ {39, 1, 1, 14},
+ {40, 1, 1, 14}
+};
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Define all local variables
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Function body here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Return nothing or data or data pointer
+----------------------------------------------------------------------------*/
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/vop.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/vop.cpp
new file mode 100644
index 0000000..74fe478
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/vop.cpp
@@ -0,0 +1,1643 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#include "mp4dec_lib.h"
+#include "bitstream.h"
+#include "vlc_decode.h"
+#include "zigzag.h"
+
+#define OSCL_DISABLE_WARNING_CONV_POSSIBLE_LOSS_OF_DATA
+
+#ifdef PV_SUPPORT_MAIN_PROFILE
+/* INTRA */
+const static int mpeg_iqmat_def[NCOEFF_BLOCK] =
+{
+ 8, 17, 18, 19, 21, 23, 25, 27,
+ 17, 18, 19, 21, 23, 25, 27, 28,
+ 20, 21, 22, 23, 24, 26, 28, 30,
+ 21, 22, 23, 24, 26, 28, 30, 32,
+ 22, 23, 24, 26, 28, 30, 32, 35,
+ 23, 24, 26, 28, 30, 32, 35, 38,
+ 25, 26, 28, 30, 32, 35, 38, 41,
+ 27, 28, 30, 32, 35, 38, 41, 45
+};
+
+/* INTER */
+const static int mpeg_nqmat_def[64] =
+{
+ 16, 17, 18, 19, 20, 21, 22, 23,
+ 17, 18, 19, 20, 21, 22, 23, 24,
+ 18, 19, 20, 21, 22, 23, 24, 25,
+ 19, 20, 21, 22, 23, 24, 26, 27,
+ 20, 21, 22, 23, 25, 26, 27, 28,
+ 21, 22, 23, 24, 26, 27, 28, 30,
+ 22, 23, 24, 26, 27, 28, 30, 31,
+ 23, 24, 25, 27, 28, 30, 31, 33
+};
+#endif
+
+/* ======================================================================== */
+/* Function : CalcNumBits() */
+/* Purpose : */
+/* In/out : */
+/* Return : Calculate the minimum number of bits required to */
+/* represent x. */
+/* Note : This is an equivalent implementation of */
+/* (long)ceil(log((double)x)/log(2.0)) */
+/* Modified : */
+/* ======================================================================== */
+int CalcNumBits(uint x)
+{
+ int i = 1;
+ while (x >>= 1) i++;
+ return i;
+}
+
+
+
+/***********************************************************CommentBegin******
+*
+* -- DecodeVolHeader -- Decode the header of a VOL
+*
+* 04/10/2000 : initial modification to the new PV-Decoder Lib format.
+* 10/12/2001 : reject non compliant bitstreams
+*
+***********************************************************CommentEnd********/
+PV_STATUS DecodeVOLHeader(VideoDecData *video, int layer)
+{
+ PV_STATUS status;
+ Vol *currVol;
+ BitstreamDecVideo *stream;
+ uint32 tmpvar, vol_shape;
+ uint32 startCode;
+#ifdef PV_SUPPORT_MAIN_PROFILE
+ int *qmat, i, j;
+#endif
+ int version_id = 1;
+#ifdef PV_TOLERATE_VOL_ERRORS
+ uint32 profile = 0x01;
+#endif
+ /* There's a "currLayer" variable inside videoDecData. */
+ /* However, we don't maintain it until we decode frame data. 04/05/2000 */
+ currVol = video->vol[layer];
+ stream = currVol->bitstream;
+ currVol->moduloTimeBase = 0;
+
+ /* Determine which start code for the decoder to begin with */
+ status = BitstreamShowBits32HC(stream, &startCode);
+
+ if (startCode == VISUAL_OBJECT_SEQUENCE_START_CODE)
+ { /* Bitstream Exhchange Fix 9/99 */
+ /* Bitstream Exchange requires we allow start with Video Object Sequence */
+ /* visual_object_sequence_start_code */
+ (void) BitstreamReadBits32HC(stream);
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8); /* profile */
+#ifndef PV_TOLERATE_VOL_ERRORS
+ if (layer) /* */
+ {
+ /* support SSPL0-2 */
+ if (tmpvar != 0x10 && tmpvar != 0x11 && tmpvar != 0x12 &&
+ tmpvar != 0xA1 && tmpvar != 0xA2 && tmpvar != 0xA3/* Core SP@L1-L3 */)
+ return PV_FAIL;
+ }
+ else
+ {
+ /* support SPL0-3 & SSPL0-2 */
+ if (tmpvar != 0x01 && tmpvar != 0x02 && tmpvar != 0x03 && tmpvar != 0x08 &&
+ tmpvar != 0x10 && tmpvar != 0x11 && tmpvar != 0x12 &&
+ tmpvar != 0x21 && tmpvar != 0x22 && /* Core Profile Levels */
+ tmpvar != 0xA1 && tmpvar != 0xA2 && tmpvar != 0xA3 &&
+ tmpvar != 0xF0 && tmpvar != 0xF1 && /* Advanced Simple Profile Levels*/
+ tmpvar != 0xF2 && tmpvar != 0xF3 &&
+ tmpvar != 0xF4 && tmpvar != 0xF5)
+ return PV_FAIL;
+ }
+#else
+ profile = tmpvar;
+#endif
+
+ // save the profile and level for the query
+ currVol->profile_level_id = (uint)tmpvar; // 6/10/04
+
+
+
+ status = BitstreamShowBits32HC(stream, &tmpvar);
+ if (tmpvar == USER_DATA_START_CODE)
+ {
+ /* Something has to be done with user data 11/11/99 */
+ status = DecodeUserData(stream);
+ if (status != PV_SUCCESS) return PV_FAIL;
+ }
+ /* visual_object_start_code */
+ BitstreamShowBits32HC(stream, &tmpvar);
+ if (tmpvar != VISUAL_OBJECT_START_CODE)
+ {
+ do
+ {
+ /* Search for VOL_HEADER */
+ status = PVSearchNextM4VFrame(stream); /* search 0x00 0x00 0x01 */
+ if (status != PV_SUCCESS) return PV_FAIL; /* breaks the loop */
+ BitstreamShowBits32(stream, VOL_START_CODE_LENGTH, &tmpvar);
+ PV_BitstreamFlushBits(stream, 8);
+ }
+ while (tmpvar != VOL_START_CODE);
+ goto decode_vol;
+ }
+ else
+ {
+ BitstreamReadBits32HC(stream);
+ }
+
+ /* is_visual_object_identifier */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar)
+ {
+ /* visual_object_verid */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 4);
+ /* visual_object_priority */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 3);
+ }
+ /* visual_object_type */
+ BitstreamShowBits32(stream, 4, &tmpvar);
+ if (tmpvar == 1)
+ { /* video_signal_type */
+ PV_BitstreamFlushBits(stream, 4);
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar == 1)
+ {
+ /* video_format */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 3);
+ /* video_range */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ /* color_description */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar == 1)
+ {
+ /* color_primaries */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ /* transfer_characteristics */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ /* matrix_coefficients */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ }
+ }
+ }
+ else
+ {
+ do
+ {
+ /* Search for VOL_HEADER */
+ status = PVSearchNextM4VFrame(stream); /* search 0x00 0x00 0x01 */
+ if (status != PV_SUCCESS) return PV_FAIL; /* breaks the loop */
+ BitstreamShowBits32(stream, VOL_START_CODE_LENGTH, &tmpvar);
+ PV_BitstreamFlushBits(stream, 8);
+ }
+ while (tmpvar != VOL_START_CODE);
+ goto decode_vol;
+ }
+
+ /* next_start_code() */
+ status = PV_BitstreamByteAlign(stream); /* 10/12/01 */
+ status = BitstreamShowBits32HC(stream, &tmpvar);
+
+ if (tmpvar == USER_DATA_START_CODE)
+ {
+ /* Something has to be done to deal with user data (parse it) 11/11/99 */
+ status = DecodeUserData(stream);
+ if (status != PV_SUCCESS) return PV_FAIL;
+ }
+ status = BitstreamShowBits32(stream, 27, &tmpvar); /* 10/12/01 */
+ }
+ else
+ {
+ /* tmpvar = 0; */ /* 10/12/01 */
+ status = BitstreamShowBits32(stream, 27, &tmpvar); /* uncomment this line if you want
+ to start decoding with a
+ video_object_start_code */
+ }
+
+ if (tmpvar == VO_START_CODE)
+ {
+ /*****
+ *
+ * Read the VOL header entries from the bitstream
+ *
+ *****/
+ /* video_object_start_code */
+ tmpvar = BitstreamReadBits32(stream, 27);
+ tmpvar = (uint32) BitstreamReadBits16(stream, 5);
+
+
+ /* video_object_layer_start_code */
+ BitstreamShowBits32(stream, VOL_START_CODE_LENGTH, &tmpvar);
+ if (tmpvar != VOL_START_CODE)
+ {
+ status = BitstreamCheckEndBuffer(stream);
+ if (status == PV_END_OF_VOP)
+ {
+ video->shortVideoHeader = TRUE;
+ return PV_SUCCESS;
+ }
+ else
+ {
+ do
+ {
+ /* Search for VOL_HEADER */
+ status = PVSearchNextM4VFrame(stream);/* search 0x00 0x00 0x01 */
+ if (status != PV_SUCCESS) return PV_FAIL; /* breaks the loop */
+ BitstreamShowBits32(stream, VOL_START_CODE_LENGTH, &tmpvar);
+ PV_BitstreamFlushBits(stream, 8); /* advance the byte ptr */
+ }
+ while (tmpvar != VOL_START_CODE);
+ }
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, 8);
+ }
+
+decode_vol:
+ PV_BitstreamFlushBits(stream, VOL_START_CODE_LENGTH - 8);
+ video->shortVideoHeader = 0;
+
+ /* vol_id (4 bits) */
+ currVol->volID = (int) BitstreamReadBits16(stream, 4);
+
+ /* RandomAccessible flag */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+
+ /* object type */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8); /* */
+
+#ifdef PV_TOLERATE_VOL_ERRORS
+ if (tmpvar == 0)
+ {
+ if (layer) /* */
+ {
+ /* support SSPL0-2 */
+ if (profile != 0x10 && profile != 0x11 && profile != 0x12)
+ return PV_FAIL;
+ tmpvar = 0x02;
+ }
+ else
+ {
+ /* support SPL0-3 & SSPL0-2 */
+ if (profile != 0x01 && profile != 0x02 && profile != 0x03 && profile != 0x08 &&
+ profile != 0x10 && profile != 0x11 && profile != 0x12)
+ return PV_FAIL;
+ tmpvar = 0x01;
+ }
+ profile |= 0x0100;
+ }
+#endif
+
+ if (layer)
+ {
+ if (tmpvar != 0x02) return PV_FAIL;
+ }
+ else
+ {
+ if (tmpvar != 0x01) return PV_FAIL;
+ }
+
+ /* version id specified? */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar == 1)
+ {
+ /* version ID */
+ version_id = (uint32) BitstreamReadBits16(stream, 4);
+ /* priority */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 3);
+
+ }
+
+ /* aspect ratio info */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 4);
+ if (tmpvar == 0) return PV_FAIL;
+ if (tmpvar == 0xf /* extended_par */)
+ {
+ /* width */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ /* height */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ }
+
+
+ /* control parameters present? */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+
+ /* Get the parameters (skipped) */
+ /* 03/10/99 */
+ if (tmpvar)
+ {
+ /* chroma_format */
+ tmpvar = BitstreamReadBits16(stream, 2);
+ if (tmpvar != 1) return PV_FAIL;
+ /* low_delay */
+ tmpvar = BitstreamRead1Bits(stream);
+
+ /* vbv_parameters present? */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar)
+ {
+ /* first_half_bit_rate */
+ BitstreamReadBits16(stream, 15);
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ /* latter_half_bit_rate */
+ BitstreamReadBits16(stream, 15);
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ /* first_half_vbv_buffer_size */
+ BitstreamReadBits16(stream, 15);
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ /* latter_half_vbv_buffer_size */
+ BitstreamReadBits16(stream, 3);
+ /* first_half_vbv_occupancy */
+ BitstreamReadBits16(stream, 11);
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ /* latter_half_vbv_occupancy */
+ BitstreamReadBits16(stream, 15);
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ }
+ }
+
+ /* video_object_layer_shape (2 bits), only 00 (rect) is supported for now */
+ vol_shape = (uint32) BitstreamReadBits16(stream, 2);
+ if (vol_shape) return PV_FAIL;
+
+ /* marker bit, 03/10/99 */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ /* vop_time_increment_resolution */
+ currVol->timeIncrementResolution = BitstreamReadBits16(stream, 16);
+ if (currVol->timeIncrementResolution == 0) return PV_FAIL;
+
+ /* . since nbitsTimeIncRes will be used over and over again, */
+ /* we should put it in Vol structure. 04/12/2000. */
+ currVol->nbitsTimeIncRes = CalcNumBits((uint)currVol->timeIncrementResolution - 1);
+
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ /* fixed_vop_rate */
+ currVol->fixedVopRate = (int) BitstreamRead1Bits(stream);
+ if (currVol->fixedVopRate)
+ {
+ /* fixed_vop_time_increment */
+ tmpvar = BitstreamReadBits16(stream, currVol->nbitsTimeIncRes);
+ }
+
+ /* marker bit */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ /* video_object_layer_width (13 bits) */
+ video->displayWidth = video->width = (int) BitstreamReadBits16(stream, 13);
+
+ /* round up to a multiple of MB_SIZE. 08/09/2000 */
+ video->width = (video->width + 15) & -16;
+// video->displayWidth += (video->displayWidth & 0x1); /* displayed image should be even size */
+
+ /* marker bit */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ /* video_object_layer_height (13 bits) */
+ video->displayHeight = video->height = (int) BitstreamReadBits16(stream, 13);
+
+ /* round up to a multiple of MB_SIZE. 08/09/2000 */
+ video->height = (video->height + 15) & -16;
+// video->displayHeight += (video->displayHeight & 0x1); /* displayed image should be even size */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ /* 03/10/99 */
+ /* interlaced */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar != 0)
+ {
+ mp4dec_log("DecodeVOLHeader(): Interlaced video is not supported.\n");
+ return PV_FAIL;
+ }
+
+ /* obmc_disable */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar == 0) return PV_FAIL;
+
+ if (version_id == 1)
+ {
+ /* sprite_enable (1 bits) */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ if (tmpvar)
+ {
+ mp4dec_log("DecodeVOLHeader(): Sprite is not supported.\n");
+ return PV_FAIL;
+ }
+ }
+ else
+ {
+ /* For version 2, vol_sprite_usage has two bits. */
+ /* sprite_enable */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 2);
+ if (tmpvar)
+ {
+ mp4dec_log("DecodeVOLHeader(): Sprite is not supported.\n");
+ return PV_FAIL;
+ }
+ }
+
+ /* not_8_bit */
+ if (BitstreamRead1Bits(stream))
+ {
+ /* quant_precision */
+ currVol->quantPrecision = BitstreamReadBits16(stream, 4);
+ /* bits_per_pixel */
+ currVol->bitsPerPixel = BitstreamReadBits16(stream, 4);
+ mp4dec_log("DecodeVOLHeader(): not an 8-bit stream.\n"); // For the time being we do not support != 8 bits
+
+ return PV_FAIL;
+ }
+ else
+ {
+ currVol->quantPrecision = 5;
+ currVol->bitsPerPixel = 8;
+ }
+
+ /* quant_type (1 bit) */
+ currVol->quantType = BitstreamRead1Bits(stream);
+ if (currVol->quantType)
+ {
+#ifdef PV_SUPPORT_MAIN_PROFILE
+ /* load quantization matrices. 5/22/2000 */
+ /* load_intra_quant_mat (1 bit) */
+ qmat = currVol->iqmat;
+ currVol->loadIntraQuantMat = BitstreamRead1Bits(stream);
+ if (currVol->loadIntraQuantMat)
+ {
+ /* intra_quant_mat (8*64 bits) */
+ i = 0;
+ do
+ {
+ qmat[*(zigzag_inv+i)] = (int) BitstreamReadBits16(stream, 8);
+ }
+ while ((qmat[*(zigzag_inv+i)] != 0) && (++i < 64));
+
+ for (j = i; j < 64; j++)
+ qmat[*(zigzag_inv+j)] = qmat[*(zigzag_inv+i-1)];
+ }
+ else
+ {
+ oscl_memcpy(qmat, mpeg_iqmat_def, 64*sizeof(int));
+ }
+
+ qmat[0] = 0; /* necessary for switched && MPEG quant 07/09/01 */
+
+ /* load_nonintra_quant_mat (1 bit) */
+ qmat = currVol->niqmat;
+ currVol->loadNonIntraQuantMat = BitstreamRead1Bits(stream);
+ if (currVol->loadNonIntraQuantMat)
+ {
+ /* nonintra_quant_mat (8*64 bits) */
+ i = 0;
+ do
+ {
+ qmat[*(zigzag_inv+i)] = (int) BitstreamReadBits16(stream, 8);
+ }
+ while ((qmat[*(zigzag_inv+i)] != 0) && (++i < 64));
+
+ for (j = i; j < 64; j++)
+ qmat[*(zigzag_inv+j)] = qmat[*(zigzag_inv+i-1)];
+ }
+ else
+ {
+ oscl_memcpy(qmat, mpeg_nqmat_def, 64*sizeof(int));
+ }
+#else
+ return PV_FAIL;
+#endif
+ }
+
+ if (version_id != 1)
+ {
+ /* quarter_sample enabled */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar) return PV_FAIL;
+ }
+
+ /* complexity_estimation_disable */
+ currVol->complexity_estDisable = BitstreamRead1Bits(stream);
+ if (currVol->complexity_estDisable == 0)
+ {
+ currVol->complexity_estMethod = BitstreamReadBits16(stream, 2);
+
+ if (currVol->complexity_estMethod < 2)
+ {
+ /* shape_complexity_estimation_disable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar == 0)
+ {
+ mp4dec_log("DecodeVOLHeader(): Shape Complexity estimation is not supported.\n");
+ return PV_FAIL;
+ }
+ /* texture_complexity_estimation_set_1_disable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar == 0)
+ {
+ currVol->complexity.text_1 = BitstreamReadBits16(stream, 4);
+ }
+ /* marker bit */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+ /* texture_complexity_estimation_set_2_disable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar == 0)
+ {
+ currVol->complexity.text_2 = BitstreamReadBits16(stream, 4);
+ }
+ /* motion_compensation_complexity_disable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar == 0)
+ {
+ currVol->complexity.mc = BitstreamReadBits16(stream, 6);
+ }
+ /* marker bit */
+ if (!BitstreamRead1Bits(stream)) return PV_FAIL;
+
+ if (currVol->complexity_estMethod == 1)
+ { /* version2_complexity_estimation_disable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar == 0)
+ {
+ mp4dec_log("DecodeVOLHeader(): sadct, quarter pel not supported.\n");
+ return PV_FAIL;
+ }
+ }
+ }
+ }
+
+ /* 03/10/99 */
+ /* resync_marker_disable */
+ currVol->errorResDisable = (int) BitstreamRead1Bits(stream);
+ /* data_partititioned */
+ currVol->dataPartitioning = (int) BitstreamRead1Bits(stream);
+
+ video->vlcDecCoeffIntra = &VlcDecTCOEFIntra;
+ video->vlcDecCoeffInter = &VlcDecTCOEFInter;
+
+ if (currVol->dataPartitioning)
+ {
+ if (layer) return PV_FAIL; /* */
+ /* reversible_vlc */
+ currVol->useReverseVLC = (int)BitstreamRead1Bits(stream);
+ if (currVol->useReverseVLC)
+ {
+ video->vlcDecCoeffIntra = &RvlcDecTCOEFIntra;
+ video->vlcDecCoeffInter = &RvlcDecTCOEFInter;
+ }
+ currVol->errorResDisable = 0;
+ }
+ else
+ {
+ currVol->useReverseVLC = 0;
+ }
+
+ if (version_id != 1)
+ {
+ /* newpred_enable */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar) return PV_FAIL;
+
+ /* reduced_resolution_vop */
+ tmpvar = BitstreamRead1Bits(stream);
+ if (tmpvar) return PV_FAIL;
+
+ }
+
+ /* Intra AC/DC prediction is always true */
+ video->intra_acdcPredDisable = 0;
+ /* scalability */
+ currVol->scalability = (int) BitstreamRead1Bits(stream);
+
+ if (currVol->scalability)
+ {
+ if (layer == 0) return PV_FAIL; /* */
+ /* hierarchy_type: 1 : temporal, 0 : spatial */
+ /* 03/10/99 */
+ currVol->scalType = (int) BitstreamRead1Bits(stream); /* */
+ if (!currVol->scalType) return PV_FAIL;
+
+ /* ref_layer_id (4 bits) */
+ currVol->refVolID = (int) BitstreamReadBits16(stream, 4);
+ if (layer) /* */
+ {
+ if (currVol->refVolID != video->vol[0]->volID) return PV_FAIL;
+ }
+ /* ref_layer_sampling_direc (1 bits) */
+ /* 1 : ref. layer has higher resolution */
+ /* 0 : ref. layer has equal or lower resolution */
+ currVol->refSampDir = (int) BitstreamRead1Bits(stream);
+ if (currVol->refSampDir) return PV_FAIL;
+
+ /* hor_sampling_factor_n (5 bits) */
+ currVol->horSamp_n = (int) BitstreamReadBits16(stream, 5);
+
+ /* hor_sampling_factor_m (5 bits) */
+ currVol->horSamp_m = (int) BitstreamReadBits16(stream, 5);
+
+ if (currVol->horSamp_m == 0) return PV_FAIL;
+ if (currVol->horSamp_n != currVol->horSamp_m) return PV_FAIL;
+
+ /* ver_sampling_factor_n (5 bits) */
+ currVol->verSamp_n = (int) BitstreamReadBits16(stream, 5);
+
+ /* ver_sampling_factor_m (5 bits) */
+ currVol->verSamp_m = (int) BitstreamReadBits16(stream, 5);
+
+ if (currVol->verSamp_m == 0) return PV_FAIL;
+ if (currVol->verSamp_n != currVol->verSamp_m) return PV_FAIL;
+
+
+ /* enhancement_type: 1 : partial region, 0 : full region */
+ /* 04/10/2000: we only support full region enhancement layer. */
+ if (BitstreamRead1Bits(stream)) return PV_FAIL;
+ }
+
+ PV_BitstreamByteAlign(stream);
+
+ status = BitstreamShowBits32HC(stream, &tmpvar);
+
+ /* if we hit the end of buffer, tmpvar == 0. 08/30/2000 */
+ if (tmpvar == USER_DATA_START_CODE)
+ {
+ status = DecodeUserData(stream);
+ /* you should not check for status here 03/19/2002 */
+ status = PV_SUCCESS;
+ }
+
+ /* Compute some convenience variables: 04/13/2000 */
+ video->nMBPerRow = video->width / MB_SIZE;
+ video->nMBPerCol = video->height / MB_SIZE;
+ video->nTotalMB = video->nMBPerRow * video->nMBPerCol;
+ video->nBitsForMBID = CalcNumBits((uint)video->nTotalMB - 1);
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ video->modified_quant = 0;
+ video->advanced_INTRA = 0;
+ video->deblocking = 0;
+ video->slice_structure = 0;
+#endif
+ }
+ else
+ {
+ /* SHORT_HEADER */
+ status = BitstreamShowBits32(stream, SHORT_VIDEO_START_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar == SHORT_VIDEO_START_MARKER)
+ {
+ video->shortVideoHeader = TRUE;
+ }
+ else
+ {
+ do
+ {
+ /* Search for VOL_HEADER */
+ status = PVSearchNextM4VFrame(stream); /* search 0x00 0x00 0x01 */
+ if (status != PV_SUCCESS) return PV_FAIL; /* breaks the loop */
+ BitstreamShowBits32(stream, VOL_START_CODE_LENGTH, &tmpvar);
+ PV_BitstreamFlushBits(stream, 8);
+ }
+ while (tmpvar != VOL_START_CODE);
+ goto decode_vol;
+ }
+ }
+#ifdef PV_TOLERATE_VOL_ERRORS
+ if (profile > 0xFF || profile == 0)
+ {
+ return PV_BAD_VOLHEADER;
+ }
+#endif
+
+ return status;
+}
+
+
+/***********************************************************CommentBegin******
+*
+* -- DecodeGOV -- Decodes the Group of VOPs from bitstream
+*
+* 04/20/2000 initial modification to the new PV-Decoder Lib format.
+*
+***********************************************************CommentEnd********/
+PV_STATUS DecodeGOVHeader(BitstreamDecVideo *stream, uint32 *time_base)
+{
+ uint32 tmpvar, time_s;
+ int closed_gov, broken_link;
+
+ /* group_start_code (32 bits) */
+// tmpvar = BitstreamReadBits32(stream, 32);
+
+ /* hours */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 5);
+ time_s = tmpvar * 3600;
+
+ /* minutes */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 6);
+ time_s += tmpvar * 60;
+
+ /* marker bit */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+
+ /* seconds */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 6);
+ time_s += tmpvar;
+
+ /* We have to check the timestamp here. If the sync timestamp is */
+ /* earlier than the previous timestamp or longer than 60 sec. */
+ /* after the previous timestamp, assume the GOV header is */
+ /* corrupted. 05/12/2000 */
+ *time_base = time_s; /* 02/27/2002 */
+// *time_base = *time_base/1000;
+// tmpvar = time_s - *time_base;
+// if (tmpvar <= 60) *time_base = time_s;
+// else return PV_FAIL;
+
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ closed_gov = tmpvar;
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ broken_link = tmpvar;
+
+ if ((closed_gov == 0) && (broken_link == 1))
+ {
+ return PV_SUCCESS; /* 03/15/2002 you can also return PV_FAIL */
+ }
+
+ PV_BitstreamByteAlign(stream);
+
+ BitstreamShowBits32HC(stream, &tmpvar);
+
+ while (tmpvar == USER_DATA_START_CODE) /* 03/15/2002 */
+ {
+ DecodeUserData(stream);
+ BitstreamShowBits32HC(stream, &tmpvar);
+ }
+
+ return PV_SUCCESS;
+}
+
+/***********************************************************CommentBegin******
+*
+* -- DecodeVopHeader -- Decodes the VOPheader information from the bitstream
+*
+* 04/12/2000 Initial port to the new PV decoder library format.
+* 05/10/2000 Error resilient decoding of vop header.
+*
+***********************************************************CommentEnd********/
+PV_STATUS DecodeVOPHeader(VideoDecData *video, Vop *currVop, Bool use_ext_timestamp)
+{
+ PV_STATUS status = PV_SUCCESS;
+ Vol *currVol = video->vol[video->currLayer];
+ BitstreamDecVideo *stream = currVol->bitstream;
+ uint32 tmpvar;
+ int time_base;
+
+ /*****
+ * Read the VOP header from the bitstream (No shortVideoHeader Mode here!)
+ *****/
+ BitstreamShowBits32HC(stream, &tmpvar);
+
+ /* check if we have a GOV header here. 08/30/2000 */
+ if (tmpvar == GROUP_START_CODE)
+ {
+ tmpvar = BitstreamReadBits32HC(stream);
+// rewindBitstream(stream, START_CODE_LENGTH); /* for backward compatibility */
+ status = DecodeGOVHeader(stream, &tmpvar);
+ if (status != PV_SUCCESS)
+ {
+ return status;
+ }
+// use_ext_timestamp = TRUE; /* 02/08/2002 */
+ /* We should have a VOP header following the GOV header. 03/15/2001 */
+ BitstreamShowBits32HC(stream, &tmpvar);
+ }
+#ifdef PV_SUPPORT_TEMPORAL_SCALABILITY
+ currVop->timeStamp = -1;
+#endif
+ if (tmpvar == VOP_START_CODE)
+ {
+ tmpvar = BitstreamReadBits32HC(stream);
+ }
+ else
+ {
+ PV_BitstreamFlushBits(stream, 8); // advance by a byte
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+
+
+ /* vop_prediction_type (2 bits) */
+ currVop->predictionType = (int) BitstreamReadBits16(stream, 2);
+
+ /* modulo_time_base (? bits) */
+ time_base = -1;
+ do
+ {
+ time_base++;
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+ }
+ while (tmpvar == 1);
+
+
+
+ if (!use_ext_timestamp)
+ {
+ currVol->moduloTimeBase += 1000 * time_base; /* milliseconds based MTB 11/12/01 */
+ }
+
+ /* marker_bit (1 bit) */
+ if (!BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /* vop_time_increment (1-15 bits) in Nov_Compliant (1-16 bits) */
+ /* we always assumes fixed vop rate here */
+ currVop->timeInc = BitstreamReadBits16(stream, currVol->nbitsTimeIncRes);
+
+
+ /* marker_bit (1 bit) */
+ if (!BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /* vop_coded */
+ currVop->vopCoded = (int) BitstreamRead1Bits(stream);
+
+
+ if (currVop->vopCoded == 0)
+ {
+ status = PV_SUCCESS;
+ goto return_point;
+ }
+
+
+ /* read vop_rounding_type */
+ if (currVop->predictionType == P_VOP)
+ {
+ currVop->roundingType = (int) BitstreamRead1Bits(stream);
+ }
+ else
+ {
+ currVop->roundingType = 0;
+ }
+
+ if (currVol->complexity_estDisable == 0)
+ {
+ if (currVol->complexity_estMethod < 2) /* OCT 2002 */
+ {
+ if ((currVol->complexity.text_1 >> 3) & 0x1) /* intra */
+ BitstreamReadBits16(stream, 8);
+ if (currVol->complexity.text_1 & 0x1) /* not_coded */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.text_2 >> 3) & 0x1) /* dct_coefs */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.text_2 >> 2) & 0x1) /* dct_lines */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.text_2 >> 1) & 0x1) /* vlc_symbols */
+ BitstreamReadBits16(stream, 8);
+ if (currVol->complexity.text_2 & 0x1) /* vlc_bits */
+ BitstreamReadBits16(stream, 4);
+
+ if (currVop->predictionType != I_VOP)
+ {
+ if ((currVol->complexity.text_1 >> 2) & 0x1) /* inter */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.text_1 >> 1) & 0x1) /* inter_4v */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.mc >> 5) & 0x1) /* apm */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.mc >> 4) & 0x1) /* npm */
+ BitstreamReadBits16(stream, 8);
+ /* interpolate_mc_q */
+ if ((currVol->complexity.mc >> 2) & 0x1) /* forw_back_mc_q */
+ BitstreamReadBits16(stream, 8);
+ if ((currVol->complexity.mc >> 1) & 0x1) /* halfpel2 */
+ BitstreamReadBits16(stream, 8);
+ if (currVol->complexity.mc & 0x1) /* halfpel4 */
+ BitstreamReadBits16(stream, 8);
+ }
+ if (currVop->predictionType == B_VOP)
+ {
+ if ((currVol->complexity.mc >> 3) & 0x1) /* interpolate_mc_q */
+ BitstreamReadBits16(stream, 8);
+ }
+ }
+ }
+
+ /* read intra_dc_vlc_thr */
+ currVop->intraDCVlcThr = (int) BitstreamReadBits16(stream, 3);
+
+ /* read vop_quant (currVol->quantPrecision bits) */
+ currVop->quantizer = (int16) BitstreamReadBits16(stream, currVol->quantPrecision);
+ if (currVop->quantizer == 0)
+ {
+ currVop->quantizer = video->prevVop->quantizer;
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+
+ /* read vop_fcode_forward */
+ if (currVop->predictionType != I_VOP)
+ {
+ tmpvar = (uint32) BitstreamReadBits16(stream, 3);
+ if (tmpvar < 1)
+ {
+ currVop->fcodeForward = 1;
+ status = PV_FAIL;
+ goto return_point;
+ }
+ currVop->fcodeForward = tmpvar;
+ }
+ else
+ {
+ currVop->fcodeForward = 0;
+ }
+
+ /* read vop_fcode_backward */
+ if (currVop->predictionType == B_VOP)
+ {
+ tmpvar = (uint32) BitstreamReadBits16(stream, 3);
+ if (tmpvar < 1)
+ {
+ currVop->fcodeBackward = 1;
+ status = PV_FAIL;
+ goto return_point;
+ }
+ currVop->fcodeBackward = tmpvar;
+ }
+ else
+ {
+ currVop->fcodeBackward = 0;
+ }
+
+ if (currVol->scalability)
+ {
+ currVop->refSelectCode = (int) BitstreamReadBits16(stream, 2);
+ }
+
+return_point:
+ return status;
+}
+
+
+/***********************************************************CommentBegin******
+*
+* -- VideoPlaneWithShortHeader -- Decodes the short_video_header information from the bitstream
+* Modified :
+ 04/23/2001. Remove the codes related to the
+ "first pass" decoding. We use a different function
+ to set up the decoder now.
+***********************************************************CommentEnd********/
+PV_STATUS DecodeShortHeader(VideoDecData *video, Vop *currVop)
+{
+ PV_STATUS status = PV_SUCCESS;
+ Vol *currVol = video->vol[0];
+ BitstreamDecVideo *stream = currVol->bitstream;
+ uint32 tmpvar;
+ int32 size;
+
+ int extended_PTYPE = FALSE;
+ int UFEP = 0, custom_PFMT = 0, custom_PCF = 0;
+
+ status = BitstreamShowBits32(stream, SHORT_VIDEO_START_MARKER_LENGTH, &tmpvar);
+
+ if (tmpvar != SHORT_VIDEO_START_MARKER)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+
+ PV_BitstreamFlushBits(stream, SHORT_VIDEO_START_MARKER_LENGTH);
+
+ /* Temporal reference. Using vop_time_increment_resolution = 30000 */
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8);
+ currVop->temporalRef = (int) tmpvar;
+
+
+ currVop->timeInc = 0xff & (256 + currVop->temporalRef - video->prevVop->temporalRef);
+ currVol->moduloTimeBase += currVop->timeInc; /* mseconds 11/12/01 */
+ /* Marker Bit */
+ if (!BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Market bit wrong.\n");
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /* Zero Bit */
+ if (BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Zero bit wrong.\n");
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /*split_screen_indicator*/
+ if (BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Split Screen not supported.\n");
+ VideoDecoderErrorDetected(video);
+ }
+
+ /*document_freeze_camera*/
+ if (BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Freeze Camera not supported.\n");
+ VideoDecoderErrorDetected(video);
+ }
+
+ /*freeze_picture_release*/
+ if (BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Freeze Release not supported.\n");
+ VideoDecoderErrorDetected(video);
+ }
+ /* source format */
+ switch (BitstreamReadBits16(stream, 3))
+ {
+ case 1:
+ if (video->size < 128*96)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 128;
+ video->displayHeight = video->height = 96;
+ break;
+
+ case 2:
+ if (video->size < 176*144)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 176;
+ video->displayHeight = video->height = 144;
+ break;
+
+ case 3:
+ if (video->size < 352*288)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 352;
+ video->displayHeight = video->height = 288;
+ break;
+
+ case 4:
+ if (video->size < 704*576)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 704;
+ video->displayHeight = video->height = 576;
+ break;
+
+ case 5:
+ if (video->size < 1408*1152)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 1408;
+ video->displayHeight = video->height = 1152;
+ break;
+
+ case 7:
+ extended_PTYPE = TRUE;
+ break;
+
+ default:
+ /* Msg("H.263 source format not legal\n"); */
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+
+ currVop->roundingType = 0;
+
+ if (extended_PTYPE == FALSE)
+ {
+ currVop->predictionType = (int) BitstreamRead1Bits(stream);
+
+ /* four_reserved_zero_bits */
+ if (BitstreamReadBits16(stream, 4))
+ {
+ mp4dec_log("DecodeShortHeader(): Reserved bits wrong.\n");
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+ else
+ {
+ UFEP = BitstreamReadBits16(stream, 3);
+ if (UFEP == 1)
+ {
+ /* source format */
+ switch (BitstreamReadBits16(stream, 3))
+ {
+ case 1:
+ if (video->size < 128*96)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 128;
+ video->displayHeight = video->height = 96;
+ break;
+
+ case 2:
+ if (video->size < 176*144)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 176;
+ video->displayHeight = video->height = 144;
+ break;
+
+ case 3:
+ if (video->size < 352*288)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 352;
+ video->displayHeight = video->height = 288;
+ break;
+
+ case 4:
+ if (video->size < 704*576)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 704;
+ video->displayHeight = video->height = 576;
+ break;
+
+ case 5:
+ if (video->size < 1408*1152)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayWidth = video->width = 1408;
+ video->displayHeight = video->height = 1152;
+ break;
+
+ case 6:
+ custom_PFMT = TRUE;
+ break;
+
+ default:
+ /* Msg("H.263 source format not legal\n"); */
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ custom_PCF = BitstreamRead1Bits(stream);
+ /* unrestricted MV */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ /* SAC */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /* AP */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ video->advanced_INTRA = BitstreamRead1Bits(stream);
+
+ video->deblocking = BitstreamRead1Bits(stream);
+
+ video->slice_structure = BitstreamRead1Bits(stream);
+
+ /* RPS, ISD, AIV */
+ if (BitstreamReadBits16(stream, 3))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->modified_quant = BitstreamRead1Bits(stream);
+
+ /* Marker Bit and reserved*/
+ if (BitstreamReadBits16(stream, 4) != 8)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+#ifndef PV_ANNEX_IJKT_SUPPORT
+ if (video->advanced_INTRA | video->deblocking | video->modified_quant | video->modified_quant)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+#endif
+
+ if (UFEP == 0 || UFEP == 1)
+ {
+ tmpvar = BitstreamReadBits16(stream, 3);
+ if (tmpvar > 1)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ currVop->predictionType = tmpvar;
+ /* RPR */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ /* RRU */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ currVop->roundingType = (int) BitstreamRead1Bits(stream);
+ if (BitstreamReadBits16(stream, 3) != 1)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+ else
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ /* CPM */
+ if (BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ /* CPFMT */
+ if (custom_PFMT == 1 && UFEP == 1)
+ {
+ /* aspect ratio */
+ tmpvar = BitstreamReadBits16(stream, 4);
+ if (tmpvar == 0)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ /* Extended PAR */
+ if (tmpvar == 0xF)
+ {
+ /* Read par_width and par_height but do nothing */
+ /* par_width */
+ tmpvar = BitstreamReadBits16(stream, 8);
+
+ /* par_height */
+ tmpvar = BitstreamReadBits16(stream, 8);
+ }
+ tmpvar = BitstreamReadBits16(stream, 9);
+
+ video->displayWidth = (tmpvar + 1) << 2;
+ video->width = (video->displayWidth + 15) & -16;
+ /* marker bit */
+ if (!BitstreamRead1Bits(stream))
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ tmpvar = BitstreamReadBits16(stream, 9);
+ if (tmpvar == 0)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->displayHeight = tmpvar << 2;
+ video->height = (video->displayHeight + 15) & -16;
+
+ if (video->height * video->width > video->size)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ video->nTotalMB = video->width / MB_SIZE * video->height / MB_SIZE;
+
+ if (video->nTotalMB <= 48)
+ {
+ video->nBitsForMBID = 6;
+ }
+ else if (video->nTotalMB <= 99)
+ {
+ video->nBitsForMBID = 7;
+ }
+ else if (video->nTotalMB <= 396)
+ {
+ video->nBitsForMBID = 9;
+ }
+ else if (video->nTotalMB <= 1584)
+ {
+ video->nBitsForMBID = 11;
+ }
+ else if (video->nTotalMB <= 6336)
+ {
+ video->nBitsForMBID = 13 ;
+ }
+ else if (video->nTotalMB <= 9216)
+ {
+ video->nBitsForMBID = 14 ;
+ }
+ else
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+ if (UFEP == 1 && custom_PCF == 1)
+ {
+ BitstreamRead1Bits(stream);
+
+ tmpvar = BitstreamReadBits16(stream, 7);
+ if (tmpvar == 0)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+
+ if (custom_PCF == 1)
+ {
+ currVop->ETR = BitstreamReadBits16(stream, 2);
+ }
+
+ if (UFEP == 1 && video->slice_structure == 1)
+ {
+ /* SSS */
+ tmpvar = BitstreamReadBits16(stream, 2);
+ if (tmpvar != 0)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+ }
+
+ /* Recalculate number of macroblocks per row & col since */
+ /* the frame size can change. 04/23/2001. */
+ video->nMBinGOB = video->nMBPerRow = video->width / MB_SIZE;
+ video->nGOBinVop = video->nMBPerCol = video->height / MB_SIZE;
+ video->nTotalMB = video->nMBPerRow * video->nMBPerCol;
+ if (custom_PFMT == 0 || UFEP == 0)
+ {
+ video->nBitsForMBID = CalcNumBits((uint)video->nTotalMB - 1); /* otherwise calculate above */
+ }
+ size = (int32)video->width * video->height;
+ if (video->currVop->predictionType == P_VOP && size > video->videoDecControls->size)
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+ video->videoDecControls->size = size;
+ video->currVop->uChan = video->currVop->yChan + size;
+ video->currVop->vChan = video->currVop->uChan + (size >> 2);
+ video->prevVop->uChan = video->prevVop->yChan + size;
+ video->prevVop->vChan = video->prevVop->uChan + (size >> 2);
+
+
+ currVop->quantizer = (int16) BitstreamReadBits16(stream, 5);
+
+ if (currVop->quantizer == 0) /* 04/03/01 */
+ {
+ currVop->quantizer = video->prevVop->quantizer;
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+
+ /* Zero bit */
+ if (extended_PTYPE == FALSE)
+ {
+ if (BitstreamRead1Bits(stream))
+ {
+ mp4dec_log("DecodeShortHeader(): Zero bit wrong.\n");
+ status = PV_FAIL;
+ goto return_point;
+ }
+ }
+ /* pei */
+ tmpvar = (uint32) BitstreamRead1Bits(stream);
+
+ while (tmpvar)
+ {
+ tmpvar = (uint32) BitstreamReadBits16(stream, 8); /* "PSPARE" */
+ tmpvar = (uint32) BitstreamRead1Bits(stream); /* "PEI" */
+ }
+
+ if (video->slice_structure) /* ANNEX_K */
+ {
+ if (!BitstreamRead1Bits(stream)) /* SEPB1 */
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ // if (currVol->nBitsForMBID //
+ if (BitstreamReadBits16(stream, video->nBitsForMBID))
+ {
+ status = PV_FAIL; /* no ASO, RS support for Annex K */
+ goto return_point;
+ }
+
+ if (!BitstreamRead1Bits(stream)) /*SEPB3 */
+ {
+ status = PV_FAIL;
+ goto return_point;
+ }
+
+ }
+ /* Setting of other VOP-header parameters */
+ currVop->gobNumber = 0;
+ currVop->vopCoded = 1;
+
+ currVop->intraDCVlcThr = 0;
+ currVop->gobFrameID = 0; /* initial value, 05/22/00 */
+ currVol->errorResDisable = 0;
+ /*PutVopInterlaced(0,curr_vop); no implemented yet */
+ if (currVop->predictionType != I_VOP)
+ currVop->fcodeForward = 1;
+ else
+ currVop->fcodeForward = 0;
+
+return_point:
+
+ return status;
+}
+/***********************************************************CommentBegin******
+*
+* -- PV_DecodeVop -- Decodes the VOP information from the bitstream
+*
+* 04/12/2000
+* Initial port to the new PV decoder library format.
+* This function is different from the one in MoMuSys MPEG-4
+* visual decoder. We handle combined mode with or withput
+* error resilience and H.263 mode through the sam path now.
+*
+* 05/04/2000
+* Added temporal scalability to the decoder.
+*
+***********************************************************CommentEnd********/
+PV_STATUS PV_DecodeVop(VideoDecData *video)
+{
+ Vol *currVol = video->vol[video->currLayer];
+ PV_STATUS status;
+ uint32 tmpvar;
+
+ /*****
+ * Do scalable or non-scalable decoding of the current VOP
+ *****/
+
+ if (!currVol->scalability)
+ {
+ if (currVol->dataPartitioning)
+ {
+ /* Data partitioning mode comes here */
+ status = DecodeFrameDataPartMode(video);
+ }
+ else
+ {
+ /* Combined mode with or without error resilience */
+ /* and short video header comes here. */
+ status = DecodeFrameCombinedMode(video);
+ }
+ }
+ else
+ {
+#ifdef DO_NOT_FOLLOW_STANDARD
+ /* according to the standard, only combined mode is allowed */
+ /* in the enhancement layer. 06/01/2000. */
+ if (currVol->dataPartitioning)
+ {
+ /* Data partitioning mode comes here */
+ status = DecodeFrameDataPartMode(video);
+ }
+ else
+ {
+ /* Combined mode with or without error resilience */
+ /* and short video header comes here. */
+ status = DecodeFrameCombinedMode(video);
+ }
+#else
+ status = DecodeFrameCombinedMode(video);
+#endif
+ }
+
+ /* This part is for consuming Visual_object_sequence_end_code and EOS Code */ /* 10/15/01 */
+ if (!video->shortVideoHeader)
+ {
+ /* at this point bitstream is expected to be byte aligned */
+ BitstreamByteAlignNoForceStuffing(currVol->bitstream);
+
+ status = BitstreamShowBits32HC(currVol->bitstream, &tmpvar); /* 07/07/01 */
+ if (tmpvar == VISUAL_OBJECT_SEQUENCE_END_CODE)/* VOS_END_CODE */
+ {
+ PV_BitstreamFlushBits(currVol->bitstream, 16);
+ PV_BitstreamFlushBits(currVol->bitstream, 16);
+ }
+
+ }
+ else
+ {
+#ifdef PV_ANNEX_IJKT_SUPPORT
+ if (video->deblocking)
+ {
+ H263_Deblock(video->currVop->yChan, video->width, video->height, video->QPMB, video->headerInfo.Mode, 0, 0);
+ H263_Deblock(video->currVop->uChan, video->width >> 1, video->height >> 1, video->QPMB, video->headerInfo.Mode, 1, video->modified_quant);
+ H263_Deblock(video->currVop->vChan, video->width >> 1, video->height >> 1, video->QPMB, video->headerInfo.Mode, 1, video->modified_quant);
+ }
+#endif
+ /* Read EOS code for shortheader bitstreams */
+ status = BitstreamShowBits32(currVol->bitstream, 22, &tmpvar);
+ if (tmpvar == SHORT_VIDEO_END_MARKER)
+ {
+ PV_BitstreamFlushBits(currVol->bitstream, 22);
+ }
+ else
+ {
+ status = PV_BitstreamShowBitsByteAlign(currVol->bitstream, 22, &tmpvar);
+ if (tmpvar == SHORT_VIDEO_END_MARKER)
+ {
+ PV_BitstreamByteAlign(currVol->bitstream);
+ PV_BitstreamFlushBits(currVol->bitstream, 22);
+ }
+ }
+ }
+ return status;
+}
+
+
+/***********************************************************CommentBegin******
+*
+* -- CalcVopDisplayTime -- calculate absolute time when VOP is to be displayed
+*
+* 04/12/2000 Initial port to the new PV decoder library format.
+*
+***********************************************************CommentEnd********/
+uint32 CalcVopDisplayTime(Vol *currVol, Vop *currVop, int shortVideoHeader)
+{
+ uint32 display_time;
+
+
+ /*****
+ * Calculate the time when the VOP is to be displayed next
+ *****/
+
+ if (!shortVideoHeader)
+ {
+ display_time = (uint32)(currVol->moduloTimeBase + (((int32)currVop->timeInc - (int32)currVol->timeInc_offset) * 1000) / ((int32)currVol->timeIncrementResolution)); /* 11/12/2001 */
+ if (currVop->timeStamp >= display_time)
+ {
+ display_time += 1000; /* this case is valid if GOVHeader timestamp is ignored */
+ }
+ }
+ else
+ {
+ display_time = (uint32)(currVol->moduloTimeBase * 33 + (currVol->moduloTimeBase * 11) / 30); /* 11/12/2001 */
+ }
+
+ return(display_time);
+}
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/zigzag.h b/media/libstagefright/codecs/m4v_h263/dec/src/zigzag.h
new file mode 100644
index 0000000..4690a18
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/zigzag.h
@@ -0,0 +1,72 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef zigzag_H
+#define zigzag_H
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; EXTERNAL VARIABLES REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ extern const int zigzag_inv[3*NCOEFF_BLOCK];
+ /*----------------------------------------------------------------------------
+ ; SIMPLE TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; ENUMERATED TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; STRUCTURES TYPEDEF'S
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; GLOBAL FUNCTION DEFINITIONS
+ ; Function Prototype declaration
+ ----------------------------------------------------------------------------*/
+
+ /*----------------------------------------------------------------------------
+ ; END
+ ----------------------------------------------------------------------------*/
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/zigzag_tab.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/zigzag_tab.cpp
new file mode 100644
index 0000000..33dbb14
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/dec/src/zigzag_tab.cpp
@@ -0,0 +1,110 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "mp4dec_api.h"
+#include "mp4def.h"
+#include "zigzag.h"
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
+const int zigzag_inv[3*NCOEFF_BLOCK] =
+{
+ 0, 1, 8, 16, 9, 2, 3, 10,
+ 17, 24, 32, 25, 18, 11, 4, 5,
+ 12, 19, 26, 33, 40, 48, 41, 34,
+ 27, 20, 13, 6, 7, 14, 21, 28,
+ 35, 42, 49, 56, 57, 50, 43, 36,
+ 29, 22, 15, 23, 30, 37, 44, 51,
+ 58, 59, 52, 45, 38, 31, 39, 46,
+ 53, 60, 61, 54, 47, 55, 62, 63,
+//};
+
+ /* Vertical inverse zigzag */
+//const static Int zigzag_v_inv[NCOEFF_BLOCK] = {
+ 0, 8, 16, 24, 1, 9, 2, 10,
+ 17, 25, 32, 40, 48, 56, 57, 49,
+ 41, 33, 26, 18, 3, 11, 4, 12,
+ 19, 27, 34, 42, 50, 58, 35, 43,
+ 51, 59, 20, 28, 5, 13, 6, 14,
+ 21, 29, 36, 44, 52, 60, 37, 45,
+ 53, 61, 22, 30, 7, 15, 23, 31,
+ 38, 46, 54, 62, 39, 47, 55, 63,
+//};
+ /* Horizontal inverse zigzag*/
+//const static Int zizag_h_inv[NCOEFF_BLOCK] = {
+ 0, 1, 2, 3, 8, 9, 16, 17,
+ 10, 11, 4, 5, 6, 7, 15, 14,
+ 13, 12, 19, 18, 24, 25, 32, 33,
+ 26, 27, 20, 21, 22, 23, 28, 29,
+ 30, 31, 34, 35, 40, 41, 48, 49,
+ 42, 43, 36, 37, 38, 39, 44, 45,
+ 46, 47, 50, 51, 56, 57, 58, 59,
+ 52, 53, 54, 55, 60, 61, 62, 63
+};
+
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; FUNCTION CODE
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Define all local variables
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Function body here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; Return nothing or data or data pointer
+----------------------------------------------------------------------------*/
+
+
diff --git a/media/libstagefright/codecs/m4v_h263/patent_disclaimer.txt b/media/libstagefright/codecs/m4v_h263/patent_disclaimer.txt
new file mode 100644
index 0000000..b4bf11d
--- /dev/null
+++ b/media/libstagefright/codecs/m4v_h263/patent_disclaimer.txt
@@ -0,0 +1,9 @@
+
+THIS IS NOT A GRANT OF PATENT RIGHTS.
+
+Google makes no representation or warranty that the codecs for which
+source code is made available hereunder are unencumbered by
+third-party patents. Those intending to use this source code in
+hardware or software products are advised that implementations of
+these codecs, including in open source software or shareware, may
+require patent licenses from the relevant patent holders.
diff --git a/media/libstagefright/include/M4vH263Decoder.h b/media/libstagefright/include/M4vH263Decoder.h
new file mode 100644
index 0000000..880ec7c
--- /dev/null
+++ b/media/libstagefright/include/M4vH263Decoder.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef M4V_H263_DECODER_H_
+
+#define M4V_H263_DECODER_H_
+
+#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/MediaSource.h>
+
+struct tagvideoDecControls;
+
+namespace android {
+
+struct M4vH263Decoder : public MediaSource,
+ public MediaBufferObserver {
+ M4vH263Decoder(const sp<MediaSource> &source);
+
+ virtual status_t start(MetaData *params);
+ virtual status_t stop();
+
+ virtual sp<MetaData> getFormat();
+
+ virtual status_t read(
+ MediaBuffer **buffer, const ReadOptions *options);
+
+ virtual void signalBufferReturned(MediaBuffer *buffer);
+
+protected:
+ virtual ~M4vH263Decoder();
+
+private:
+ sp<MediaSource> mSource;
+ bool mStarted;
+ int32_t mWidth, mHeight;
+
+ sp<MetaData> mFormat;
+
+ tagvideoDecControls *mHandle;
+ MediaBuffer *mFrames[2];
+ MediaBuffer *mInputBuffer;
+
+ int64_t mNumSamplesOutput;
+
+ void releaseFrames();
+
+ M4vH263Decoder(const M4vH263Decoder &);
+ M4vH263Decoder &operator=(const M4vH263Decoder &);
+};
+
+} // namespace android
+
+#endif // M4V_H263_DECODER_H_
diff --git a/media/libstagefright/include/MP3Extractor.h b/media/libstagefright/include/MP3Extractor.h
index 074973b..b5a6b3c 100644
--- a/media/libstagefright/include/MP3Extractor.h
+++ b/media/libstagefright/include/MP3Extractor.h
@@ -42,6 +42,8 @@
off_t mFirstFramePos;
sp<MetaData> mMeta;
uint32_t mFixedHeader;
+ int32_t mByteNumber; // total number of bytes in this MP3
+ char mTableOfContents[99]; // TOC entries in XING header
MP3Extractor(const MP3Extractor &);
MP3Extractor &operator=(const MP3Extractor &);
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 185398b..471625e 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -1066,6 +1066,8 @@
GL10 gl = null;
boolean createEglSurface = false;
boolean sizeChanged = false;
+ boolean wantRenderNotification = false;
+ boolean doRenderNotification = false;
int w = 0;
int h = 0;
Runnable event = null;
@@ -1111,6 +1113,13 @@
sGLThreadManager.notifyAll();
}
+ if (doRenderNotification) {
+ wantRenderNotification = false;
+ doRenderNotification = false;
+ mRenderComplete = true;
+ sGLThreadManager.notifyAll();
+ }
+
// Ready to draw?
if ((!mPaused) && mHasSurface
&& (mWidth > 0) && (mHeight > 0)
@@ -1130,6 +1139,8 @@
sizeChanged = true;
w = mWidth;
h = mHeight;
+ wantRenderNotification = true;
+
if (DRAW_TWICE_AFTER_SIZE_CHANGED) {
// We keep mRequestRender true so that we draw twice after the size changes.
// (Once because of mSizeChanged, the second time because of mRequestRender.)
@@ -1187,6 +1198,10 @@
Log.i("GLThread", "egl surface lost tid=" + getId());
}
}
+
+ if (wantRenderNotification) {
+ doRenderNotification = true;
+ }
}
} finally {
/*
@@ -1269,7 +1284,20 @@
mHeight = h;
mSizeChanged = true;
mRequestRender = true;
+ mRenderComplete = false;
sGLThreadManager.notifyAll();
+
+ // Wait for thread to react to resize and render a frame
+ while (! mExited && !mPaused && !mRenderComplete ) {
+ if (LOG_SURFACE) {
+ Log.i("Main thread", "onWindowResize waiting for render complete.");
+ }
+ try {
+ sGLThreadManager.wait();
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
@@ -1315,6 +1343,7 @@
private int mHeight;
private int mRenderMode;
private boolean mRequestRender;
+ private boolean mRenderComplete;
private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>();
// End of member variables protected by the sGLThreadManager monitor.
@@ -1376,14 +1405,10 @@
}
/*
-<<<<<<< HEAD
- * Tries to acquire the right to use an EGL
- * surface. Does not block.
-=======
* Tries once to acquire the right to use an EGL
* surface. Does not block. Requires that we are already
* in the sGLThreadManager monitor when this is called.
->>>>>>> dc49acb0
+ *
* @return true if the right to use an EGL surface was acquired.
*/
public boolean tryAcquireEglSurfaceLocked(GLThread thread) {
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 2981599..0f5330b 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -667,8 +667,8 @@
}
if (usedNetworkType != networkType) {
Integer currentPid = new Integer(pid);
- reassessPidDns(pid, true);
mNetRequestersPids[usedNetworkType].remove(currentPid);
+ reassessPidDns(pid, true);
if (mNetRequestersPids[usedNetworkType].size() != 0) {
if (DBG) Log.d(TAG, "not tearing down special network - " +
"others still using it");
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index e11c312..d740ce1 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -2137,6 +2137,24 @@
}
}
+ /**
+ * Crash the runtime (causing a complete restart of the Android framework).
+ * Requires REBOOT permission. Mostly for testing. Should not return.
+ */
+ public void crash(final String message)
+ {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
+ Thread t = new Thread("PowerManagerService.crash()") {
+ public void run() { throw new RuntimeException(message); }
+ };
+ try {
+ t.start();
+ t.join();
+ } catch (InterruptedException e) {
+ Log.wtf(TAG, e);
+ }
+ }
+
private void goToSleepLocked(long time, int reason) {
if (mLastEventTime <= time) {
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index e61cb94..9270a82 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -2020,7 +2020,7 @@
// to hold off on removing the window until the animation is done.
// If the display is frozen, just remove immediately, since the
// animation wouldn't be seen.
- if (win.mSurface != null && !mDisplayFrozen) {
+ if (win.mSurface != null && !mDisplayFrozen && mPolicy.isScreenOn()) {
// If we are not currently running the exit animation, we
// need to see about starting one.
if (wasVisible=win.isWinVisibleLw()) {
@@ -2336,7 +2336,8 @@
win.mEnterAnimationPending = true;
}
if (displayed && win.mSurface != null && !win.mDrawPending
- && !win.mCommitDrawPending && !mDisplayFrozen) {
+ && !win.mCommitDrawPending && !mDisplayFrozen
+ && mPolicy.isScreenOn()) {
applyEnterAnimationLocked(win);
}
if (displayed && (win.mAttrs.flags
@@ -2376,6 +2377,18 @@
mInputMethodWindow = win;
imMayMove = true;
}
+ if (win.mAttrs.type == TYPE_BASE_APPLICATION
+ && win.mAppToken != null
+ && win.mAppToken.startingWindow != null) {
+ // Special handling of starting window over the base
+ // window of the app: propagate lock screen flags to it,
+ // to provide the correct semantics while starting.
+ final int mask =
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
+ WindowManager.LayoutParams sa = win.mAppToken.startingWindow.mAttrs;
+ sa.flags = (sa.flags&~mask) | (win.mAttrs.flags&mask);
+ }
} else {
win.mEnterAnimationPending = false;
if (win.mSurface != null) {
@@ -2576,7 +2589,7 @@
// frozen, there is no reason to animate and it can cause strange
// artifacts when we unfreeze the display if some different animation
// is running.
- if (!mDisplayFrozen) {
+ if (!mDisplayFrozen && mPolicy.isScreenOn()) {
int anim = mPolicy.selectAnimationLw(win, transit);
int attr = -1;
Animation a = null;
@@ -2659,7 +2672,7 @@
// frozen, there is no reason to animate and it can cause strange
// artifacts when we unfreeze the display if some different animation
// is running.
- if (!mDisplayFrozen) {
+ if (!mDisplayFrozen && mPolicy.isScreenOn()) {
Animation a;
if (lp != null && (lp.flags & FLAG_COMPATIBLE_WINDOW) != 0) {
a = new FadeInOutAnimation(enter);
@@ -3250,7 +3263,7 @@
// If the display is frozen, we won't do anything until the
// actual window is displayed so there is no reason to put in
// the starting window.
- if (mDisplayFrozen) {
+ if (mDisplayFrozen || !mPolicy.isScreenOn()) {
return;
}
@@ -7479,7 +7492,7 @@
// This must be called while inside a transaction. Returns true if
// there is more animation to run.
boolean stepAnimationLocked(long currentTime, int dw, int dh) {
- if (!mDisplayFrozen) {
+ if (!mDisplayFrozen && mPolicy.isScreenOn()) {
// We will run animations as long as the display isn't frozen.
if (!mDrawPending && !mCommitDrawPending && mAnimation != null) {
@@ -8409,7 +8422,7 @@
// This must be called while inside a transaction.
boolean stepAnimationLocked(long currentTime, int dw, int dh) {
- if (!mDisplayFrozen) {
+ if (!mDisplayFrozen && mPolicy.isScreenOn()) {
// We will run animations as long as the display isn't frozen.
if (animation == sDummyAnimation) {
@@ -8498,7 +8511,8 @@
final int N = allAppWindows.size();
for (int i=0; i<N; i++) {
WindowState win = allAppWindows.get(i);
- if (win == startingWindow || win.mAppFreezing) {
+ if (win == startingWindow || win.mAppFreezing
+ || win.mViewVisibility != View.VISIBLE) {
continue;
}
if (DEBUG_VISIBILITY) {
@@ -9379,6 +9393,7 @@
try {
boolean restart;
boolean forceHiding = false;
+ boolean wallpaperForceHidingChanged = false;
do {
final int transactionSequence = ++mTransactionSequence;
@@ -9399,13 +9414,16 @@
}
}
+ if (DEBUG_APP_TRANSITIONS) Log.v(TAG, "*** ANIM STEP: seq="
+ + transactionSequence + " tokensAnimating="
+ + tokensAnimating);
+
animating = tokensAnimating;
restart = false;
boolean tokenMayBeDrawn = false;
boolean wallpaperMayChange = false;
boolean focusMayChange = false;
- boolean wallpaperForceHidingChanged = false;
mPolicy.beginAnimationLw(dw, dh);
@@ -9718,6 +9736,14 @@
mLastEnterAnimParams = null;
}
+ // If all closing windows are obscured, then there is
+ // no need to do an animation. This is the case, for
+ // example, when this transition is being done behind
+ // the lock screen.
+ if (!mPolicy.allowAppAnimationsLw()) {
+ animLp = null;
+ }
+
NN = mOpeningApps.size();
for (i=0; i<NN; i++) {
AppWindowToken wtoken = mOpeningApps.get(i);
@@ -9790,7 +9816,7 @@
int adjResult = 0;
- if (wallpaperForceHidingChanged) {
+ if (wallpaperForceHidingChanged && !restart && !mAppTransitionReady) {
// At this point, there was a window with a wallpaper that
// was force hiding other windows behind it, but now it
// is going away. This may be simple -- just animate
@@ -9798,10 +9824,28 @@
// hard -- the wallpaper now needs to be shown behind
// something that was hidden.
WindowState oldWallpaper = mWallpaperTarget;
+ if (mLowerWallpaperTarget != null
+ && mLowerWallpaperTarget.mAppToken != null) {
+ if (DEBUG_WALLPAPER) Log.v(TAG,
+ "wallpaperForceHiding changed with lower="
+ + mLowerWallpaperTarget);
+ if (DEBUG_WALLPAPER) Log.v(TAG,
+ "hidden=" + mLowerWallpaperTarget.mAppToken.hidden +
+ " hiddenRequested=" + mLowerWallpaperTarget.mAppToken.hiddenRequested);
+ if (mLowerWallpaperTarget.mAppToken.hidden) {
+ // The lower target has become hidden before we
+ // actually started the animation... let's completely
+ // re-evaluate everything.
+ mLowerWallpaperTarget = mUpperWallpaperTarget = null;
+ restart = true;
+ }
+ }
adjResult = adjustWallpaperWindowsLocked();
wallpaperMayChange = false;
- if (false) Log.v(TAG, "****** OLD: " + oldWallpaper
- + " NEW: " + mWallpaperTarget);
+ wallpaperForceHidingChanged = false;
+ if (DEBUG_WALLPAPER) Log.v(TAG, "****** OLD: " + oldWallpaper
+ + " NEW: " + mWallpaperTarget
+ + " LOWER: " + mLowerWallpaperTarget);
if (mLowerWallpaperTarget == null) {
// Whoops, we don't need a special wallpaper animation.
// Clear them out.
@@ -9856,6 +9900,9 @@
performLayoutLockedInner();
}
+ if (DEBUG_APP_TRANSITIONS) Log.v(TAG, "*** ANIM STEP: restart="
+ + restart);
+
} while (restart);
// THIRD LOOP: Update the surfaces of all windows.
@@ -10245,7 +10292,8 @@
}
if (mDimAnimator != null && mDimAnimator.mDimShown) {
- animating |= mDimAnimator.updateSurface(dimming, currentTime, mDisplayFrozen);
+ animating |= mDimAnimator.updateSurface(dimming, currentTime,
+ mDisplayFrozen || !mPolicy.isScreenOn());
}
if (!blurring && mBlurShown) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 266f213..bf436b6 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -71,7 +71,9 @@
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
+import android.os.Build;
import android.os.Debug;
+import android.os.DropBoxManager;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler;
@@ -1208,10 +1210,6 @@
if (MONITOR_CPU_USAGE) {
ServiceManager.addService("cpuinfo", new CpuBinder(m));
}
- ServiceManager.addService("activity.broadcasts", new BroadcastsBinder(m));
- ServiceManager.addService("activity.services", new ServicesBinder(m));
- ServiceManager.addService("activity.senders", new SendersBinder(m));
- ServiceManager.addService("activity.providers", new ProvidersBinder(m));
ServiceManager.addService("permission", new PermissionController(m));
ApplicationInfo info =
@@ -1319,54 +1317,6 @@
}
}
- static class BroadcastsBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- BroadcastsBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpBroadcasts(pw);
- }
- }
-
- static class ServicesBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- ServicesBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpServices(pw);
- }
- }
-
- static class SendersBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- SendersBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpSenders(pw);
- }
- }
-
- static class ProvidersBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- ProvidersBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpProviders(pw);
- }
- }
-
static class MemBinder extends Binder {
ActivityManagerService mActivityManagerService;
MemBinder(ActivityManagerService activityManagerService) {
@@ -8580,11 +8530,10 @@
}
private boolean makeAppCrashingLocked(ProcessRecord app,
- String tag, String shortMsg, String longMsg, String stackTrace) {
+ String shortMsg, String longMsg, String stackTrace) {
app.crashing = true;
app.crashingReport = generateProcessError(app,
- ActivityManager.ProcessErrorStateInfo.CRASHED, tag, shortMsg, longMsg,
- stackTrace);
+ ActivityManager.ProcessErrorStateInfo.CRASHED, null, shortMsg, longMsg, stackTrace);
startAppProblemLocked(app);
app.stopFreezingAllLocked();
return handleAppCrashLocked(app);
@@ -8658,10 +8607,11 @@
}
private void makeAppNotRespondingLocked(ProcessRecord app,
- String tag, String shortMsg, String longMsg) {
+ String activity, String shortMsg, String longMsg) {
app.notResponding = true;
app.notRespondingReport = generateProcessError(app,
- ActivityManager.ProcessErrorStateInfo.NOT_RESPONDING, tag, shortMsg, longMsg, null);
+ ActivityManager.ProcessErrorStateInfo.NOT_RESPONDING,
+ activity, shortMsg, longMsg, null);
startAppProblemLocked(app);
app.stopFreezingAllLocked();
}
@@ -8672,7 +8622,7 @@
* @param app The ProcessRecord in which the error occurred.
* @param condition Crashing, Application Not Responding, etc. Values are defined in
* ActivityManager.AppErrorStateInfo
- * @param tag The tag that was passed into handleApplicationError(). Typically the classname.
+ * @param activity The activity associated with the crash, if known.
* @param shortMsg Short message describing the crash.
* @param longMsg Long message describing the crash.
* @param stackTrace Full crash stack trace, may be null.
@@ -8680,14 +8630,14 @@
* @return Returns a fully-formed AppErrorStateInfo record.
*/
private ActivityManager.ProcessErrorStateInfo generateProcessError(ProcessRecord app,
- int condition, String tag, String shortMsg, String longMsg, String stackTrace) {
+ int condition, String activity, String shortMsg, String longMsg, String stackTrace) {
ActivityManager.ProcessErrorStateInfo report = new ActivityManager.ProcessErrorStateInfo();
report.condition = condition;
report.processName = app.processName;
report.pid = app.pid;
report.uid = app.info.uid;
- report.tag = tag;
+ report.tag = activity;
report.shortMsg = shortMsg;
report.longMsg = longMsg;
report.stackTrace = stackTrace;
@@ -8804,10 +8754,126 @@
}
}
- public void handleApplicationError(IBinder app, String tag,
+ /**
+ * Used by {@link com.android.internal.os.RuntimeInit} to report when an application crashes.
+ * The application process will exit immediately after this call returns.
+ * @param app object of the crashing app, null for the system server
+ * @param crashInfo describing the exception
+ */
+ public void handleApplicationCrash(IBinder app, ApplicationErrorReport.CrashInfo crashInfo) {
+ ProcessRecord r = findAppProcess(app);
+
+ EventLog.writeEvent(EventLogTags.AM_CRASH, Binder.getCallingPid(),
+ app == null ? "system" : (r == null ? "unknown" : r.processName),
+ crashInfo.exceptionClassName,
+ crashInfo.exceptionMessage,
+ crashInfo.throwFileName,
+ crashInfo.throwLineNumber);
+
+ addExceptionToDropBox("crash", r, null, crashInfo);
+
+ crashApplication(r, crashInfo);
+ }
+
+ /**
+ * Used by {@link Log} via {@link com.android.internal.os.RuntimeInit} to report serious errors.
+ * @param app object of the crashing app, null for the system server
+ * @param tag reported by the caller
+ * @param crashInfo describing the context of the error
+ * @return true if the process should exit immediately (WTF is fatal)
+ */
+ public boolean handleApplicationWtf(IBinder app, String tag,
ApplicationErrorReport.CrashInfo crashInfo) {
- AppErrorResult result = new AppErrorResult();
- ProcessRecord r = null;
+ ProcessRecord r = findAppProcess(app);
+
+ EventLog.writeEvent(EventLogTags.AM_WTF, Binder.getCallingPid(),
+ app == null ? "system" : (r == null ? "unknown" : r.processName),
+ tag, crashInfo.exceptionMessage);
+
+ addExceptionToDropBox("wtf", r, tag, crashInfo);
+
+ if (Settings.Gservices.getInt(mContext.getContentResolver(),
+ Settings.Gservices.WTF_IS_FATAL, 0) != 0) {
+ crashApplication(r, crashInfo);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @param app object of some object (as stored in {@link com.android.internal.os.RuntimeInit})
+ * @return the corresponding {@link ProcessRecord} object, or null if none could be found
+ */
+ private ProcessRecord findAppProcess(IBinder app) {
+ if (app == null) {
+ return null;
+ }
+
+ synchronized (this) {
+ for (SparseArray<ProcessRecord> apps : mProcessNames.getMap().values()) {
+ final int NA = apps.size();
+ for (int ia=0; ia<NA; ia++) {
+ ProcessRecord p = apps.valueAt(ia);
+ if (p.thread != null && p.thread.asBinder() == app) {
+ return p;
+ }
+ }
+ }
+
+ Log.w(TAG, "Can't find mystery application: " + app);
+ return null;
+ }
+ }
+
+ /**
+ * Write a description of an exception (from a crash or WTF report) to the drop box.
+ * @param eventType to include in the drop box tag ("crash", "wtf", etc.)
+ * @param r the process which crashed, null for the system server
+ * @param tag supplied by the application (in the case of WTF), or null
+ * @param crashInfo describing the exception
+ */
+ private void addExceptionToDropBox(String eventType, ProcessRecord r, String tag,
+ ApplicationErrorReport.CrashInfo crashInfo) {
+ String dropboxTag, processName;
+ if (r == null) {
+ dropboxTag = "system_server_" + eventType;
+ } else if ((r.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ dropboxTag = "system_app_" + eventType;
+ } else {
+ dropboxTag = "data_app_" + eventType;
+ }
+
+ DropBoxManager dbox = (DropBoxManager) mContext.getSystemService(Context.DROPBOX_SERVICE);
+ if (dbox != null && dbox.isTagEnabled(dropboxTag)) {
+ StringBuilder sb = new StringBuilder(1024);
+ sb.append("Build: ").append(Build.FINGERPRINT).append("\n");
+ if (r == null) {
+ sb.append("Process: system_server\n");
+ } else {
+ sb.append("Package: ").append(r.info.packageName).append("\n");
+ if (!r.processName.equals(r.info.packageName)) {
+ sb.append("Process: ").append(r.processName).append("\n");
+ }
+ }
+ if (tag != null) {
+ sb.append("Tag: ").append(tag).append("\n");
+ }
+ if (crashInfo != null && crashInfo.stackTrace != null) {
+ sb.append("\n").append(crashInfo.stackTrace);
+ }
+ dbox.addText(dropboxTag, sb.toString());
+ }
+ }
+
+ /**
+ * Bring up the "unexpected error" dialog box for a crashing app.
+ * Deal with edge cases (intercepts from instrumented applications,
+ * ActivityController, error intent receivers, that sort of thing).
+ * @param r the application crashing
+ * @param crashInfo describing the failure
+ */
+ private void crashApplication(ProcessRecord r, ApplicationErrorReport.CrashInfo crashInfo) {
long timeMillis = System.currentTimeMillis();
String shortMsg = crashInfo.exceptionClassName;
String longMsg = crashInfo.exceptionMessage;
@@ -8818,20 +8884,8 @@
longMsg = shortMsg;
}
+ AppErrorResult result = new AppErrorResult();
synchronized (this) {
- if (app != null) {
- for (SparseArray<ProcessRecord> apps : mProcessNames.getMap().values()) {
- final int NA = apps.size();
- for (int ia=0; ia<NA; ia++) {
- ProcessRecord p = apps.valueAt(ia);
- if (p.thread != null && p.thread.asBinder() == app) {
- r = p;
- break;
- }
- }
- }
- }
-
if (r != null) {
// The application has crashed. Send the SIGQUIT to the process so
// that it can dump its state.
@@ -8844,7 +8898,7 @@
try {
String name = r != null ? r.processName : null;
int pid = r != null ? r.pid : Binder.getCallingPid();
- if (!mController.appCrashed(name, pid, tag,
+ if (!mController.appCrashed(name, pid,
shortMsg, longMsg, timeMillis, crashInfo.stackTrace)) {
Log.w(TAG, "Force-killing crashed app " + name
+ " at watcher's request");
@@ -8872,15 +8926,9 @@
return;
}
- if (r != null) {
- if (!makeAppCrashingLocked(r, tag, shortMsg, longMsg, stackTrace)) {
- return;
- }
- } else {
- Log.w(TAG, "Some application object " + app + " tag " + tag
- + " has crashed, but I don't know who it is.");
- Log.w(TAG, "ShortMsg:" + shortMsg);
- Log.w(TAG, "LongMsg:" + longMsg);
+ // If we can't identify the process or it's already exceeded its crash quota,
+ // quit right away without showing a crash dialog.
+ if (r == null || !makeAppCrashingLocked(r, shortMsg, longMsg, stackTrace)) {
Binder.restoreCallingIdentity(origId);
return;
}
@@ -9051,69 +9099,190 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
+ if (checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump ActivityManager from from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid()
+ + " without permission "
+ + android.Manifest.permission.DUMP);
+ return;
+ }
+
+ boolean dumpAll = false;
+
+ int opti = 0;
+ while (opti < args.length) {
+ String opt = args[opti];
+ if (opt == null || opt.length() <= 0 || opt.charAt(0) != '-') {
+ break;
+ }
+ opti++;
+ if ("-a".equals(opt)) {
+ dumpAll = true;
+ } else if ("-h".equals(opt)) {
+ pw.println("Activity manager dump options:");
+ pw.println(" [-a] [h- [cmd] ...");
+ pw.println(" cmd may be one of:");
+ pw.println(" activities: activity stack state");
+ pw.println(" broadcasts: broadcast state");
+ pw.println(" intents: pending intent state");
+ pw.println(" processes: process state");
+ pw.println(" providers: content provider state");
+ pw.println(" services: service state");
+ pw.println(" service [name]: service client-side state");
return;
+ } else {
+ pw.println("Unknown argument: " + opt + "; use -h for help");
}
- if (args.length != 0 && "service".equals(args[0])) {
- dumpService(fd, pw, args);
- return;
- }
- pw.println("Activities in Current Activity Manager State:");
- dumpHistoryList(pw, mHistory, " ", "Hist", true);
- pw.println(" ");
- pw.println(" Running activities (most recent first):");
- dumpHistoryList(pw, mLRUActivities, " ", "Run", false);
- if (mWaitingVisibleActivities.size() > 0) {
- pw.println(" ");
- pw.println(" Activities waiting for another to become visible:");
- dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Wait", false);
- }
- if (mStoppingActivities.size() > 0) {
- pw.println(" ");
- pw.println(" Activities waiting to stop:");
- dumpHistoryList(pw, mStoppingActivities, " ", "Stop", false);
- }
- if (mFinishingActivities.size() > 0) {
- pw.println(" ");
- pw.println(" Activities waiting to finish:");
- dumpHistoryList(pw, mFinishingActivities, " ", "Fin", false);
- }
-
- pw.println(" ");
- pw.println(" mPausingActivity: " + mPausingActivity);
- pw.println(" mResumedActivity: " + mResumedActivity);
- pw.println(" mFocusedActivity: " + mFocusedActivity);
- pw.println(" mLastPausedActivity: " + mLastPausedActivity);
-
- if (mRecentTasks.size() > 0) {
- pw.println(" ");
- pw.println("Recent tasks in Current Activity Manager State:");
-
- final int N = mRecentTasks.size();
- for (int i=0; i<N; i++) {
- TaskRecord tr = mRecentTasks.get(i);
- pw.print(" * Recent #"); pw.print(i); pw.print(": ");
- pw.println(tr);
- mRecentTasks.get(i).dump(pw, " ");
+ }
+
+ // Is the caller requesting to dump a particular piece of data?
+ if (opti < args.length) {
+ String cmd = args[opti];
+ opti++;
+ if ("activities".equals(cmd) || "a".equals(cmd)) {
+ synchronized (this) {
+ dumpActivitiesLocked(fd, pw, args, opti, true, true);
}
+ return;
+ } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
+ synchronized (this) {
+ dumpBroadcastsLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("intents".equals(cmd) || "i".equals(cmd)) {
+ synchronized (this) {
+ dumpPendingIntentsLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("processes".equals(cmd) || "p".equals(cmd)) {
+ synchronized (this) {
+ dumpProcessesLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
+ synchronized (this) {
+ dumpProvidersLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("service".equals(cmd)) {
+ dumpService(fd, pw, args, opti, true);
+ return;
+ } else if ("services".equals(cmd) || "s".equals(cmd)) {
+ synchronized (this) {
+ dumpServicesLocked(fd, pw, args, opti, true);
+ }
+ return;
}
-
+ }
+
+ // No piece of data specified, dump everything.
+ synchronized (this) {
+ boolean needSep;
+ if (dumpAll) {
+ pw.println("Providers in Current Activity Manager State:");
+ }
+ needSep = dumpProvidersLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Broadcasts in Current Activity Manager State:");
+ }
+ needSep = dumpBroadcastsLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Services in Current Activity Manager State:");
+ }
+ needSep = dumpServicesLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("PendingIntents in Current Activity Manager State:");
+ }
+ needSep = dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Activities in Current Activity Manager State:");
+ }
+ needSep = dumpActivitiesLocked(fd, pw, args, opti, dumpAll, !dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Processes in Current Activity Manager State:");
+ }
+ dumpProcessesLocked(fd, pw, args, opti, dumpAll);
+ }
+ }
+
+ boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll, boolean needHeader) {
+ if (needHeader) {
+ pw.println(" Activity stack:");
+ }
+ dumpHistoryList(pw, mHistory, " ", "Hist", true);
+ pw.println(" ");
+ pw.println(" Running activities (most recent first):");
+ dumpHistoryList(pw, mLRUActivities, " ", "Run", false);
+ if (mWaitingVisibleActivities.size() > 0) {
pw.println(" ");
- pw.println(" mCurTask: " + mCurTask);
-
+ pw.println(" Activities waiting for another to become visible:");
+ dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Wait", false);
+ }
+ if (mStoppingActivities.size() > 0) {
pw.println(" ");
- pw.println("Processes in Current Activity Manager State:");
+ pw.println(" Activities waiting to stop:");
+ dumpHistoryList(pw, mStoppingActivities, " ", "Stop", false);
+ }
+ if (mFinishingActivities.size() > 0) {
+ pw.println(" ");
+ pw.println(" Activities waiting to finish:");
+ dumpHistoryList(pw, mFinishingActivities, " ", "Fin", false);
+ }
- boolean needSep = false;
- int numPers = 0;
+ pw.println(" ");
+ pw.println(" mPausingActivity: " + mPausingActivity);
+ pw.println(" mResumedActivity: " + mResumedActivity);
+ pw.println(" mFocusedActivity: " + mFocusedActivity);
+ pw.println(" mLastPausedActivity: " + mLastPausedActivity);
+ if (dumpAll && mRecentTasks.size() > 0) {
+ pw.println(" ");
+ pw.println("Recent tasks in Current Activity Manager State:");
+
+ final int N = mRecentTasks.size();
+ for (int i=0; i<N; i++) {
+ TaskRecord tr = mRecentTasks.get(i);
+ pw.print(" * Recent #"); pw.print(i); pw.print(": ");
+ pw.println(tr);
+ mRecentTasks.get(i).dump(pw, " ");
+ }
+ }
+
+ pw.println(" ");
+ pw.println(" mCurTask: " + mCurTask);
+
+ return true;
+ }
+
+ boolean dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+ int numPers = 0;
+
+ if (dumpAll) {
for (SparseArray<ProcessRecord> procs : mProcessNames.getMap().values()) {
final int NA = procs.size();
for (int ia=0; ia<NA; ia++) {
@@ -9131,142 +9300,151 @@
}
}
}
-
- if (mLruProcesses.size() > 0) {
+ }
+
+ if (mLruProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Running processes (most recent first):");
+ dumpProcessList(pw, this, mLruProcesses, " ",
+ "App ", "PERS", true);
+ needSep = true;
+ }
+
+ synchronized (mPidsSelfLocked) {
+ if (mPidsSelfLocked.size() > 0) {
if (needSep) pw.println(" ");
needSep = true;
- pw.println(" Running processes (most recent first):");
- dumpProcessList(pw, this, mLruProcesses, " ",
- "App ", "PERS", true);
- needSep = true;
- }
-
- synchronized (mPidsSelfLocked) {
- if (mPidsSelfLocked.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" PID mappings:");
- for (int i=0; i<mPidsSelfLocked.size(); i++) {
- pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i));
- pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
- }
+ pw.println(" PID mappings:");
+ for (int i=0; i<mPidsSelfLocked.size(); i++) {
+ pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i));
+ pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
}
}
-
- if (mForegroundProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Foreground Processes:");
- for (int i=0; i<mForegroundProcesses.size(); i++) {
- pw.print(" PID #"); pw.print(mForegroundProcesses.keyAt(i));
- pw.print(": "); pw.println(mForegroundProcesses.valueAt(i));
- }
+ }
+
+ if (mForegroundProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Foreground Processes:");
+ for (int i=0; i<mForegroundProcesses.size(); i++) {
+ pw.print(" PID #"); pw.print(mForegroundProcesses.keyAt(i));
+ pw.print(": "); pw.println(mForegroundProcesses.valueAt(i));
}
-
- if (mPersistentStartingProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Persisent processes that are starting:");
- dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
- "Starting Norm", "Restarting PERS", false);
- }
+ }
+
+ if (mPersistentStartingProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Persisent processes that are starting:");
+ dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
+ "Starting Norm", "Restarting PERS", false);
+ }
- if (mStartingProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are starting:");
- dumpProcessList(pw, this, mStartingProcesses, " ",
- "Starting Norm", "Starting PERS", false);
- }
+ if (mStartingProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are starting:");
+ dumpProcessList(pw, this, mStartingProcesses, " ",
+ "Starting Norm", "Starting PERS", false);
+ }
- if (mRemovedProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are being removed:");
- dumpProcessList(pw, this, mRemovedProcesses, " ",
- "Removed Norm", "Removed PERS", false);
- }
-
- if (mProcessesOnHold.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are on old until the system is ready:");
- dumpProcessList(pw, this, mProcessesOnHold, " ",
- "OnHold Norm", "OnHold PERS", false);
- }
+ if (mRemovedProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are being removed:");
+ dumpProcessList(pw, this, mRemovedProcesses, " ",
+ "Removed Norm", "Removed PERS", false);
+ }
+
+ if (mProcessesOnHold.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are on old until the system is ready:");
+ dumpProcessList(pw, this, mProcessesOnHold, " ",
+ "OnHold Norm", "OnHold PERS", false);
+ }
- if (mProcessesToGc.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are waiting to GC:");
- long now = SystemClock.uptimeMillis();
- for (int i=0; i<mProcessesToGc.size(); i++) {
- ProcessRecord proc = mProcessesToGc.get(i);
- pw.print(" Process "); pw.println(proc);
- pw.print(" lowMem="); pw.print(proc.reportLowMemory);
- pw.print(", last gced=");
- pw.print(now-proc.lastRequestedGc);
- pw.print(" ms ago, last lowMem=");
- pw.print(now-proc.lastLowMemory);
+ if (mProcessesToGc.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are waiting to GC:");
+ long now = SystemClock.uptimeMillis();
+ for (int i=0; i<mProcessesToGc.size(); i++) {
+ ProcessRecord proc = mProcessesToGc.get(i);
+ pw.print(" Process "); pw.println(proc);
+ pw.print(" lowMem="); pw.print(proc.reportLowMemory);
+ pw.print(", last gced=");
+ pw.print(now-proc.lastRequestedGc);
+ pw.print(" ms ago, last lowMem=");
+ pw.print(now-proc.lastLowMemory);
+ pw.println(" ms ago");
+
+ }
+ }
+
+ if (mProcessCrashTimes.getMap().size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Time since processes crashed:");
+ long now = SystemClock.uptimeMillis();
+ for (Map.Entry<String, SparseArray<Long>> procs
+ : mProcessCrashTimes.getMap().entrySet()) {
+ SparseArray<Long> uids = procs.getValue();
+ final int N = uids.size();
+ for (int i=0; i<N; i++) {
+ pw.print(" Process "); pw.print(procs.getKey());
+ pw.print(" uid "); pw.print(uids.keyAt(i));
+ pw.print(": last crashed ");
+ pw.print((now-uids.valueAt(i)));
pw.println(" ms ago");
-
}
}
-
- if (mProcessCrashTimes.getMap().size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Time since processes crashed:");
- long now = SystemClock.uptimeMillis();
- for (Map.Entry<String, SparseArray<Long>> procs
- : mProcessCrashTimes.getMap().entrySet()) {
- SparseArray<Long> uids = procs.getValue();
- final int N = uids.size();
- for (int i=0; i<N; i++) {
- pw.print(" Process "); pw.print(procs.getKey());
- pw.print(" uid "); pw.print(uids.keyAt(i));
- pw.print(": last crashed ");
- pw.print((now-uids.valueAt(i)));
- pw.println(" ms ago");
- }
- }
- }
+ }
- if (mBadProcesses.getMap().size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Bad processes:");
- for (Map.Entry<String, SparseArray<Long>> procs
- : mBadProcesses.getMap().entrySet()) {
- SparseArray<Long> uids = procs.getValue();
- final int N = uids.size();
- for (int i=0; i<N; i++) {
- pw.print(" Bad process "); pw.print(procs.getKey());
- pw.print(" uid "); pw.print(uids.keyAt(i));
- pw.print(": crashed at time ");
- pw.println(uids.valueAt(i));
- }
+ if (mBadProcesses.getMap().size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Bad processes:");
+ for (Map.Entry<String, SparseArray<Long>> procs
+ : mBadProcesses.getMap().entrySet()) {
+ SparseArray<Long> uids = procs.getValue();
+ final int N = uids.size();
+ for (int i=0; i<N; i++) {
+ pw.print(" Bad process "); pw.print(procs.getKey());
+ pw.print(" uid "); pw.print(uids.keyAt(i));
+ pw.print(": crashed at time ");
+ pw.println(uids.valueAt(i));
}
}
+ }
- pw.println(" ");
+ pw.println(" ");
+ pw.println(" mHomeProcess: " + mHomeProcess);
+ pw.println(" mConfiguration: " + mConfiguration);
+ pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown);
+ if (mDebugApp != null || mOrigDebugApp != null || mDebugTransient
+ || mOrigWaitForDebugger) {
+ pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
+ + " mDebugTransient=" + mDebugTransient
+ + " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
+ }
+ if (mAlwaysFinishActivities || mController != null) {
+ pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
+ + " mController=" + mController);
+ }
+ if (dumpAll) {
pw.println(" Total persistent processes: " + numPers);
- pw.println(" mHomeProcess: " + mHomeProcess);
- pw.println(" mConfiguration: " + mConfiguration);
pw.println(" mStartRunning=" + mStartRunning
+ " mSystemReady=" + mSystemReady
+ " mBooting=" + mBooting
+ " mBooted=" + mBooted
+ " mFactoryTest=" + mFactoryTest);
- pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown);
pw.println(" mGoingToSleep=" + mGoingToSleep);
pw.println(" mLaunchingActivity=" + mLaunchingActivity);
- pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
- + " mDebugTransient=" + mDebugTransient
- + " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
- pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
- + " mController=" + mController);
}
+
+ return true;
}
/**
@@ -9277,20 +9455,22 @@
* - the first arg isn't the flattened component name of an existing service:
* dump all services whose component contains the first arg as a substring
*/
- protected void dumpService(FileDescriptor fd, PrintWriter pw, String[] args) {
+ protected void dumpService(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
String[] newArgs;
String componentNameString;
ServiceRecord r;
- if (args.length == 1) {
+ if (opti <= args.length) {
componentNameString = null;
newArgs = EMPTY_STRING_ARRAY;
r = null;
} else {
- componentNameString = args[1];
+ componentNameString = args[opti];
+ opti++;
ComponentName componentName = ComponentName.unflattenFromString(componentNameString);
r = componentName != null ? mServices.get(componentName) : null;
- newArgs = new String[args.length - 2];
- if (args.length > 2) System.arraycopy(args, 2, newArgs, 0, args.length - 2);
+ newArgs = new String[args.length - opti];
+ if (args.length > 2) System.arraycopy(args, opti, newArgs, 0, args.length - opti);
}
if (r != null) {
@@ -9324,19 +9504,11 @@
}
}
- void dumpBroadcasts(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
- pw.println("Broadcasts in Current Activity Manager State:");
-
+ boolean dumpBroadcastsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+
+ if (dumpAll) {
if (mRegisteredReceivers.size() > 0) {
pw.println(" ");
pw.println(" Registered Receivers:");
@@ -9347,38 +9519,42 @@
r.dump(pw, " ");
}
}
-
+
pw.println(" ");
pw.println("Receiver Resolver Table:");
mReceiverResolver.dump(pw, " ");
-
- if (mParallelBroadcasts.size() > 0 || mOrderedBroadcasts.size() > 0
- || mPendingBroadcast != null) {
- if (mParallelBroadcasts.size() > 0) {
- pw.println(" ");
- pw.println(" Active broadcasts:");
- }
- for (int i=mParallelBroadcasts.size()-1; i>=0; i--) {
- pw.println(" Broadcast #" + i + ":");
- mParallelBroadcasts.get(i).dump(pw, " ");
- }
- if (mOrderedBroadcasts.size() > 0) {
- pw.println(" ");
- pw.println(" Active serialized broadcasts:");
- }
- for (int i=mOrderedBroadcasts.size()-1; i>=0; i--) {
- pw.println(" Serialized Broadcast #" + i + ":");
- mOrderedBroadcasts.get(i).dump(pw, " ");
- }
+ needSep = true;
+ }
+
+ if (mParallelBroadcasts.size() > 0 || mOrderedBroadcasts.size() > 0
+ || mPendingBroadcast != null) {
+ if (mParallelBroadcasts.size() > 0) {
pw.println(" ");
- pw.println(" Pending broadcast:");
- if (mPendingBroadcast != null) {
- mPendingBroadcast.dump(pw, " ");
- } else {
- pw.println(" (null)");
- }
+ pw.println(" Active broadcasts:");
}
+ for (int i=mParallelBroadcasts.size()-1; i>=0; i--) {
+ pw.println(" Broadcast #" + i + ":");
+ mParallelBroadcasts.get(i).dump(pw, " ");
+ }
+ if (mOrderedBroadcasts.size() > 0) {
+ pw.println(" ");
+ pw.println(" Active serialized broadcasts:");
+ }
+ for (int i=mOrderedBroadcasts.size()-1; i>=0; i--) {
+ pw.println(" Serialized Broadcast #" + i + ":");
+ mOrderedBroadcasts.get(i).dump(pw, " ");
+ }
+ pw.println(" ");
+ pw.println(" Pending broadcast:");
+ if (mPendingBroadcast != null) {
+ mPendingBroadcast.dump(pw, " ");
+ } else {
+ pw.println(" (null)");
+ }
+ needSep = true;
+ }
+ if (dumpAll) {
pw.println(" ");
pw.println(" Historical broadcasts:");
for (int i=0; i<MAX_BROADCAST_HISTORY; i++) {
@@ -9389,54 +9565,50 @@
pw.println(" Historical Broadcast #" + i + ":");
r.dump(pw, " ");
}
-
+ needSep = true;
+ }
+
+ if (mStickyBroadcasts != null) {
pw.println(" ");
- pw.println(" mBroadcastsScheduled=" + mBroadcastsScheduled);
- if (mStickyBroadcasts != null) {
- pw.println(" ");
- pw.println(" Sticky broadcasts:");
- StringBuilder sb = new StringBuilder(128);
- for (Map.Entry<String, ArrayList<Intent>> ent
- : mStickyBroadcasts.entrySet()) {
- pw.print(" * Sticky action "); pw.print(ent.getKey());
- pw.println(":");
- ArrayList<Intent> intents = ent.getValue();
- final int N = intents.size();
- for (int i=0; i<N; i++) {
- sb.setLength(0);
- sb.append(" Intent: ");
- intents.get(i).toShortString(sb, true, false);
- pw.println(sb.toString());
- Bundle bundle = intents.get(i).getExtras();
- if (bundle != null) {
- pw.print(" ");
- pw.println(bundle.toString());
- }
+ pw.println(" Sticky broadcasts:");
+ StringBuilder sb = new StringBuilder(128);
+ for (Map.Entry<String, ArrayList<Intent>> ent
+ : mStickyBroadcasts.entrySet()) {
+ pw.print(" * Sticky action "); pw.print(ent.getKey());
+ pw.println(":");
+ ArrayList<Intent> intents = ent.getValue();
+ final int N = intents.size();
+ for (int i=0; i<N; i++) {
+ sb.setLength(0);
+ sb.append(" Intent: ");
+ intents.get(i).toShortString(sb, true, false);
+ pw.println(sb.toString());
+ Bundle bundle = intents.get(i).getExtras();
+ if (bundle != null) {
+ pw.print(" ");
+ pw.println(bundle.toString());
}
}
}
-
+ needSep = true;
+ }
+
+ if (dumpAll) {
pw.println(" ");
+ pw.println(" mBroadcastsScheduled=" + mBroadcastsScheduled);
pw.println(" mHandler:");
mHandler.dump(new PrintWriterPrinter(pw), " ");
+ needSep = true;
}
+
+ return needSep;
}
- void dumpServices(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
- pw.println("Services in Current Activity Manager State:");
+ boolean dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
- boolean needSep = false;
-
+ if (dumpAll) {
if (mServices.size() > 0) {
pw.println(" Active services:");
Iterator<ServiceRecord> it = mServices.values().iterator();
@@ -9447,40 +9619,42 @@
}
needSep = true;
}
+ }
- if (mPendingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Pending services:");
- for (int i=0; i<mPendingServices.size(); i++) {
- ServiceRecord r = mPendingServices.get(i);
- pw.print(" * Pending "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mPendingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Pending services:");
+ for (int i=0; i<mPendingServices.size(); i++) {
+ ServiceRecord r = mPendingServices.get(i);
+ pw.print(" * Pending "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
- if (mRestartingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Restarting services:");
- for (int i=0; i<mRestartingServices.size(); i++) {
- ServiceRecord r = mRestartingServices.get(i);
- pw.print(" * Restarting "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mRestartingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Restarting services:");
+ for (int i=0; i<mRestartingServices.size(); i++) {
+ ServiceRecord r = mRestartingServices.get(i);
+ pw.print(" * Restarting "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
- if (mStoppingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Stopping services:");
- for (int i=0; i<mStoppingServices.size(); i++) {
- ServiceRecord r = mStoppingServices.get(i);
- pw.print(" * Stopping "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mStoppingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Stopping services:");
+ for (int i=0; i<mStoppingServices.size(); i++) {
+ ServiceRecord r = mStoppingServices.get(i);
+ pw.print(" * Stopping "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
+ if (dumpAll) {
if (mServiceConnections.size() > 0) {
if (needSep) pw.println(" ");
pw.println(" Connection bindings to services:");
@@ -9491,26 +9665,18 @@
pw.print(" * "); pw.println(r);
r.dump(pw, " ");
}
+ needSep = true;
}
}
+
+ return needSep;
}
- void dumpProviders(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
+ boolean dumpProvidersLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
- pw.println("Content Providers in Current Activity Manager State:");
-
- boolean needSep = false;
-
+ if (dumpAll) {
if (mProvidersByClass.size() > 0) {
if (needSep) pw.println(" ");
pw.println(" Published content providers (by class):");
@@ -9523,7 +9689,7 @@
}
needSep = true;
}
-
+
if (mProvidersByName.size() > 0) {
pw.println(" ");
pw.println(" Authority to provider mappings:");
@@ -9536,55 +9702,50 @@
}
needSep = true;
}
-
- if (mLaunchingProviders.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Launching content providers:");
- for (int i=mLaunchingProviders.size()-1; i>=0; i--) {
- pw.print(" Launching #"); pw.print(i); pw.print(": ");
- pw.println(mLaunchingProviders.get(i));
- }
- needSep = true;
- }
-
- if (mGrantedUriPermissions.size() > 0) {
- pw.println();
- pw.println("Granted Uri Permissions:");
- for (int i=0; i<mGrantedUriPermissions.size(); i++) {
- int uid = mGrantedUriPermissions.keyAt(i);
- HashMap<Uri, UriPermission> perms
- = mGrantedUriPermissions.valueAt(i);
- pw.print(" * UID "); pw.print(uid);
- pw.println(" holds:");
- for (UriPermission perm : perms.values()) {
- pw.print(" "); pw.println(perm);
- perm.dump(pw, " ");
- }
- }
- }
}
+
+ if (mLaunchingProviders.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Launching content providers:");
+ for (int i=mLaunchingProviders.size()-1; i>=0; i--) {
+ pw.print(" Launching #"); pw.print(i); pw.print(": ");
+ pw.println(mLaunchingProviders.get(i));
+ }
+ needSep = true;
+ }
+
+ if (mGrantedUriPermissions.size() > 0) {
+ pw.println();
+ pw.println("Granted Uri Permissions:");
+ for (int i=0; i<mGrantedUriPermissions.size(); i++) {
+ int uid = mGrantedUriPermissions.keyAt(i);
+ HashMap<Uri, UriPermission> perms
+ = mGrantedUriPermissions.valueAt(i);
+ pw.print(" * UID "); pw.print(uid);
+ pw.println(" holds:");
+ for (UriPermission perm : perms.values()) {
+ pw.print(" "); pw.println(perm);
+ perm.dump(pw, " ");
+ }
+ }
+ needSep = true;
+ }
+
+ return needSep;
}
- void dumpSenders(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
-
- pw.println("Pending Intents in Current Activity Manager State:");
-
+ boolean dumpPendingIntentsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+
+ if (dumpAll) {
if (this.mIntentSenderRecords.size() > 0) {
Iterator<WeakReference<PendingIntentRecord>> it
= mIntentSenderRecords.values().iterator();
while (it.hasNext()) {
WeakReference<PendingIntentRecord> ref = it.next();
PendingIntentRecord rec = ref != null ? ref.get(): null;
+ needSep = true;
if (rec != null) {
pw.print(" * "); pw.println(rec);
rec.dump(pw, " ");
@@ -9594,6 +9755,8 @@
}
}
}
+
+ return needSep;
}
private static final void dumpHistoryList(PrintWriter pw, List list,
diff --git a/services/java/com/android/server/am/EventLogTags.logtags b/services/java/com/android/server/am/EventLogTags.logtags
index 7e4ea35..952555b 100644
--- a/services/java/com/android/server/am/EventLogTags.logtags
+++ b/services/java/com/android/server/am/EventLogTags.logtags
@@ -79,4 +79,7 @@
# The activity manager gave up on a new process taking too long to start
30037 am_process_start_timeout (PID|1|5),(UID|1|5),(Process Name|3)
-
+# Unhandled exception
+30039 am_crash (PID|1|5),(Process Name|3),(Exception|3),(Message|3),(File|3),(Line|1|5)
+# Log.wtf() called
+30040 am_wtf (PID|1|5),(Process Name|3),(Tag|3),(Message|3)
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
index aee45bff..ed93aea 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
@@ -167,7 +167,8 @@
// not yet been handled and also do not correspond to the two
// kinds that are processed below.
if ((SmsEnvelope.TELESERVICE_WMT != teleService) &&
- (SmsEnvelope.TELESERVICE_WEMT != teleService)) {
+ (SmsEnvelope.TELESERVICE_WEMT != teleService) &&
+ (SmsEnvelope.MESSAGE_TYPE_BROADCAST != sms.getMessageType())) {
return Intents.RESULT_SMS_UNSUPPORTED;
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index 3e491d1..403b7a1 100755
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -458,11 +458,22 @@
* {@link com.android.internal.telephony.cdma.sms.SmsEnvelope#TELESERVICE_VMN},
* {@link com.android.internal.telephony.cdma.sms.SmsEnvelope#TELESERVICE_WAP}
*/
- public int getTeleService() {
+ /* package */ int getTeleService() {
return mEnvelope.teleService;
}
/**
+ * Returns the message type of the message.
+ * @return the message type:
+ * {@link com.android.internal.telephony.cdma.sms.SmsEnvelope#MESSAGE_TYPE_POINT_TO_POINT},
+ * {@link com.android.internal.telephony.cdma.sms.SmsEnvelope#MESSAGE_TYPE_BROADCAST},
+ * {@link com.android.internal.telephony.cdma.sms.SmsEnvelope#MESSAGE_TYPE_ACKNOWLEDGE},
+ */
+ /* package */ int getMessageType() {
+ return mEnvelope.messageType;
+ }
+
+ /**
* Decodes pdu to an empty SMS object.
* In the CDMA case the pdu is just an internal byte stream representation
* of the SMS Java-object.
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 494d0e0..fb7aa3d 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -748,7 +748,6 @@
}
private void notifyDefaultData(String reason) {
- setupDnsProperties();
setState(State.CONNECTED);
phone.notifyDataConnection(reason);
startNetStatPoll();
@@ -757,42 +756,6 @@
mReregisterOnReconnectFailure = false;
}
- private void setupDnsProperties() {
- int mypid = android.os.Process.myPid();
- String[] servers = getDnsServers(null);
- String propName;
- String propVal;
- int count;
-
- count = 0;
- for (int i = 0; i < servers.length; i++) {
- String serverAddr = servers[i];
- if (!TextUtils.equals(serverAddr, "0.0.0.0")) {
- SystemProperties.set("net.dns" + (i+1) + "." + mypid, serverAddr);
- count++;
- }
- }
- for (int i = count+1; i <= 4; i++) {
- propName = "net.dns" + i + "." + mypid;
- propVal = SystemProperties.get(propName);
- if (propVal.length() != 0) {
- SystemProperties.set(propName, "");
- }
- }
- /*
- * Bump the property that tells the name resolver library
- * to reread the DNS server list from the properties.
- */
- propVal = SystemProperties.get("net.dnschange");
- if (propVal.length() != 0) {
- try {
- int n = Integer.parseInt(propVal);
- SystemProperties.set("net.dnschange", "" + (n+1));
- } catch (NumberFormatException e) {
- }
- }
- }
-
/**
* This is a kludge to deal with the fact that
* the PDP state change notification doesn't always work
diff --git a/telephony/java/com/android/internal/telephony/gsm/stk/StkService.java b/telephony/java/com/android/internal/telephony/gsm/stk/StkService.java
index 9268037..29ed95c 100644
--- a/telephony/java/com/android/internal/telephony/gsm/stk/StkService.java
+++ b/telephony/java/com/android/internal/telephony/gsm/stk/StkService.java
@@ -467,8 +467,7 @@
sInstance = new StkService(ci, sr, context, fh, sc);
StkLog.d(sInstance, "NEW sInstance");
} else if ((sr != null) && (mSimRecords != sr)) {
- StkLog.d(sInstance, String.format(
- "Reinitialize the Service with SIMRecords sr=0x%x.", sr));
+ StkLog.d(sInstance, "Reinitialize the Service with SIMRecords");
mSimRecords = sr;
// re-Register for SIM ready event.
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SimplePullParserTest.java b/tests/AndroidTests/src/com/android/unit_tests/SimplePullParserTest.java
deleted file mode 100644
index 9758298..0000000
--- a/tests/AndroidTests/src/com/android/unit_tests/SimplePullParserTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.unit_tests;
-
-import com.google.android.util.SimplePullParser;
-import junit.framework.TestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-public class SimplePullParserTest extends TestCase {
- @SmallTest
- public void testTwoLevels() throws Exception {
- String xml = ""
- + "<top a='1' b='hello'>\n"
- + " <next c='2' d='there'/>\n"
- + " <next c='3' d='bye'/>\n"
- + "</top>";
- SimplePullParser parser = new SimplePullParser(xml);
- int depth0 = parser.getDepth();
- assertEquals(0, depth0);
- assertEquals("top", parser.nextTag(depth0));
- assertEquals(1, parser.getIntAttribute(null, "a"));
- assertEquals("hello", parser.getStringAttribute(null, "b"));
-
- int depth1 = parser.getDepth();
- assertEquals(1, depth1);
- assertEquals("next", parser.nextTag(depth1));
- assertEquals(2, parser.getIntAttribute(null, "c"));
- assertEquals("there", parser.getStringAttribute(null, "d"));
- assertEquals("next", parser.nextTag(depth1));
- assertEquals(3, parser.getIntAttribute(null, "c"));
- assertEquals("bye", parser.getStringAttribute(null, "d"));
- assertNull(parser.nextTag(depth1));
-
- assertNull(parser.nextTag(depth0));
- }
-
- @SmallTest
- public void testAttributes() throws Exception {
- String xml = "<top a='1' b='hello'/>";
- SimplePullParser parser = new SimplePullParser(xml);
- int depth = parser.getDepth();
- parser.nextTag(depth);
-
- assertEquals(2, parser.numAttributes());
- assertEquals("a", parser.getAttributeName(0));
- assertEquals("b", parser.getAttributeName(1));
-
- assertEquals(1, parser.getIntAttribute(null, "a"));
- assertEquals(5, parser.getIntAttribute(null, "c", 5));
- assertEquals("hello", parser.getStringAttribute(null, "b"));
- assertEquals("not", parser.getStringAttribute(null, "d", "not"));
- }
-
- @SmallTest
- public void testRecovery() throws Exception {
- String xml = ""
- + "<top a='1' b='hello'>\n"
- + " <middle c='2' d='there'>\n"
- + " <inner/>\n"
- + " <inner2/>\n"
- + " <inner3/>\n"
- + " </middle>\n"
- + " <middle2/>\n"
- + "</top>";
- SimplePullParser parser = new SimplePullParser(xml);
- assertEquals(0, parser.getDepth());
- assertEquals("top", parser.nextTag(0));
- assertEquals(1, parser.getDepth());
- assertEquals("middle", parser.nextTag(1));
- assertEquals(2, parser.getDepth());
- assertEquals("inner", parser.nextTag(2));
- // Now skip some elements.
- assertEquals("middle2", parser.nextTag(1));
- }
-
- @SmallTest
- public void testCdata() throws Exception {
- StringBuilder cdataBuilder;
- String xml = ""
- + "<top>"
- + "<![CDATA[data0]]>"
- + "<next0/>"
- + "<![CDATA[data1]]>"
- + "<next1/>"
- + "<![CDATA[data2]]>"
- + "<next2/>"
- + "<![CDATA[data3]]>"
- + "<next3/>"
- + "<![CDATA[data4]]>"
- + "<next4/>"
- + "<![CDATA[data5]]>"
- + "</top>";
- SimplePullParser parser = new SimplePullParser(xml);
- assertEquals("top", parser.nextTag(0));
-
- // We can ignore cdata by not passing a cdata builder.
- assertEquals("next0", parser.nextTag(1));
-
- // We can get the most recent cdata by passing an empty cdata builder.
- cdataBuilder = new StringBuilder();
- assertSame(SimplePullParser.TEXT_TAG, parser.nextTagOrText(1, cdataBuilder));
- assertEquals("data1", cdataBuilder.toString());
- assertEquals("next1", parser.nextTag(1));
-
- // We can join multiple cdatas by reusing a builder.
- cdataBuilder = new StringBuilder();
- assertSame(SimplePullParser.TEXT_TAG, parser.nextTagOrText(1, cdataBuilder));
- assertEquals("next2", parser.nextTag(1));
- assertSame(SimplePullParser.TEXT_TAG, parser.nextTagOrText(1, cdataBuilder));
- assertEquals("data2data3", cdataBuilder.toString());
- assertEquals("next3", parser.nextTag(1));
-
- // We can read all of the remaining cdata while ignoring any elements.
- cdataBuilder = new StringBuilder();
- parser.readRemainingText(1, cdataBuilder);
- assertEquals("data4data5", cdataBuilder.toString());
- }
-}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java b/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java
index 110caa4..3b33a99 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java
@@ -20,6 +20,7 @@
import android.test.suitebuilder.annotation.Suppress;
import android.text.format.Time;
import android.util.Log;
+import android.util.TimeFormatException;
import junit.framework.TestCase;
@@ -354,6 +355,86 @@
}
@SmallTest
+ public void testParse33390() throws Exception {
+ Time t = new Time(Time.TIMEZONE_UTC);
+
+ t.parse3339("1980-05-23");
+ if (!t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23) {
+ fail("Did not parse all-day date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != 0) {
+ fail("Did not parse timezone-offset-less date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50Z");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != 0) {
+ fail("Did not parse UTC date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50.0Z");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != 0) {
+ fail("Did not parse UTC date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50.12Z");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != 0) {
+ fail("Did not parse UTC date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50.123Z");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != 0) {
+ fail("Did not parse UTC date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50-06:00");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != -6*3600) {
+ fail("Did not parse timezone-offset date correctly");
+ }
+
+ t.parse3339("1980-05-23T09:50:50.123-06:00");
+ if (t.allDay || t.year != 1980 || t.month != 05 || t.monthDay != 23 ||
+ t.hour != 9 || t.minute != 50 || t.second != 50 ||
+ t.gmtoff != -6*3600) {
+ fail("Did not parse timezone-offset date correctly");
+ }
+
+ try {
+ t.parse3339("1980");
+ fail("Did not throw error on truncated input length");
+ } catch (TimeFormatException e) {
+ // Successful
+ }
+
+ try {
+ t.parse3339("1980-05-23T09:50:50.123+");
+ fail("Did not throw error on truncated timezone offset");
+ } catch (TimeFormatException e1) {
+ // Successful
+ }
+
+ try {
+ t.parse3339("1980-05-23T09:50:50.123+05:0");
+ fail("Did not throw error on truncated timezone offset");
+ } catch (TimeFormatException e1) {
+ // Successful
+ }
+ }
+
+ @SmallTest
public void testSet0() throws Exception {
Time t = new Time(Time.TIMEZONE_UTC);
t.set(1000L);
diff --git a/tests/FrameworkTest/tests/src/com/android/frameworktest/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java b/tests/FrameworkTest/tests/src/com/android/frameworktest/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
index cc8fa6e..d11a39ba 100644
--- a/tests/FrameworkTest/tests/src/com/android/frameworktest/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
+++ b/tests/FrameworkTest/tests/src/com/android/frameworktest/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
@@ -16,6 +16,7 @@
package com.android.frameworktest.gridview.touch;
+import android.content.Context;
import android.test.ActivityInstrumentationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
@@ -30,6 +31,7 @@
public class GridTouchVerticalSpacingStackFromBottomTest extends ActivityInstrumentationTestCase<GridVerticalSpacingStackFromBottom> {
private GridVerticalSpacingStackFromBottom mActivity;
private GridView mGridView;
+ private ViewConfiguration mViewConfig;
public GridTouchVerticalSpacingStackFromBottomTest() {
super("com.android.frameworktest", GridVerticalSpacingStackFromBottom.class);
@@ -41,6 +43,8 @@
mActivity = getActivity();
mGridView = getActivity().getGridView();
+ final Context context = mActivity.getApplicationContext();
+ mViewConfig = ViewConfiguration.get(context);
}
@MediumTest
@@ -83,7 +87,7 @@
int lastTop = lastChild.getTop();
TouchUtils.dragViewBy(this, firstChild, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0,
- ViewConfiguration.getTouchSlop() + 1 + 10);
+ mViewConfig.getScaledTouchSlop() + 1 + 10);
View newLastChild = mGridView.getChildAt(mGridView.getChildCount() - 1);
@@ -107,7 +111,7 @@
(int) (mActivity.getWindowManager().getDefaultDisplay().getHeight() * 0.75f));
assertEquals("View scrolled to wrong position", firstTop
- + (distance - ViewConfiguration.getTouchSlop() - 1), firstChild.getTop());
+ + (distance - mViewConfig.getScaledTouchSlop() - 1), firstChild.getTop());
}
@LargeTest
diff --git a/tests/framework-tests/src/com/android/internal/os/LoggingPrintStreamTest.java b/tests/framework-tests/src/com/android/internal/os/LoggingPrintStreamTest.java
index 8e3a034..4d016d1 100644
--- a/tests/framework-tests/src/com/android/internal/os/LoggingPrintStreamTest.java
+++ b/tests/framework-tests/src/com/android/internal/os/LoggingPrintStreamTest.java
@@ -18,12 +18,12 @@
import junit.framework.TestCase;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.io.StringWriter;
import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
public class LoggingPrintStreamTest extends TestCase {
@@ -121,6 +121,58 @@
assertEquals(Arrays.asList("Foo", "4", "a"), out.lines);
}
+ public void testMultiByteCharactersSpanningBuffers() throws Exception {
+ // assume 3*1000 bytes won't fit in LoggingPrintStream's internal buffer
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < 1000; i++) {
+ builder.append("\u20AC"); // a Euro character; 3 bytes in UTF-8
+ }
+ String expected = builder.toString();
+
+ out.write(expected.getBytes("UTF-8"));
+ out.flush();
+ assertEquals(Arrays.asList(expected), out.lines);
+ }
+
+ public void testWriteOneByteAtATimeMultibyteCharacters() throws Exception {
+ String expected = " \u20AC \u20AC \u20AC \u20AC ";
+ for (byte b : expected.getBytes()) {
+ out.write(b);
+ }
+ out.flush();
+ assertEquals(Arrays.asList(expected), out.lines);
+ }
+
+ public void testWriteByteArrayAtATimeMultibyteCharacters() throws Exception {
+ String expected = " \u20AC \u20AC \u20AC \u20AC ";
+ out.write(expected.getBytes());
+ out.flush();
+ assertEquals(Arrays.asList(expected), out.lines);
+ }
+
+ public void testWriteWithOffsetsMultibyteCharacters() throws Exception {
+ String expected = " \u20AC \u20AC \u20AC \u20AC ";
+ byte[] bytes = expected.getBytes();
+ int i = 0;
+ while (i < bytes.length - 5) {
+ out.write(bytes, i, 5);
+ i += 5;
+ }
+ out.write(bytes, i, bytes.length - i);
+ out.flush();
+ assertEquals(Arrays.asList(expected), out.lines);
+ }
+
+ public void testWriteFlushesOnNewlines() throws Exception {
+ String a = " \u20AC \u20AC ";
+ String b = " \u20AC \u20AC ";
+ String c = " ";
+ String toWrite = a + "\n" + b + "\n" + c;
+ out.write(toWrite.getBytes());
+ out.flush();
+ assertEquals(Arrays.asList(a, b, c), out.lines);
+ }
+
static class TestPrintStream extends LoggingPrintStream {
final List<String> lines = new ArrayList<String>();
@@ -129,5 +181,4 @@
lines.add(line);
}
}
-
}