am 7c464c07: am a0e1c391: Merge changes Ia684fde5,I58fcb526

* commit '7c464c0783ab2917572fdc565056ca677abf90ba':
  Fix the help text
  screenrecord fixes
diff --git a/cmds/screenrecord/Android.mk b/cmds/screenrecord/Android.mk
index 17523c3..d77fdb6 100644
--- a/cmds/screenrecord/Android.mk
+++ b/cmds/screenrecord/Android.mk
@@ -34,6 +34,7 @@
 	external/jpeg
 
 LOCAL_CFLAGS += -Wno-multichar
+#LOCAL_CFLAGS += -UNDEBUG
 
 LOCAL_MODULE_TAGS := optional
 
diff --git a/cmds/screenrecord/Overlay.cpp b/cmds/screenrecord/Overlay.cpp
index f2d8b59..96e25b8 100644
--- a/cmds/screenrecord/Overlay.cpp
+++ b/cmds/screenrecord/Overlay.cpp
@@ -28,6 +28,7 @@
 #include <GLES2/gl2ext.h>
 
 #include <stdlib.h>
+#include <assert.h>
 
 #include "screenrecord.h"
 #include "Overlay.h"
@@ -66,10 +67,11 @@
     mStartMonotonicNsecs = systemTime(CLOCK_MONOTONIC);
     mStartRealtimeNsecs = systemTime(CLOCK_REALTIME);
 
+    Mutex::Autolock _l(mMutex);
+
     // Start the thread.  Traffic begins immediately.
     run("overlay");
 
-    Mutex::Autolock _l(mMutex);
     mState = INIT;
     while (mState == INIT) {
         mStartCond.wait(mMutex);
@@ -79,7 +81,7 @@
         ALOGE("Failed to start overlay thread: err=%d", mThreadResult);
         return mThreadResult;
     }
-    assert(mState == READY);
+    assert(mState == RUNNING);
 
     ALOGV("Overlay::start successful");
     *pBufferProducer = mBufferQueue;
diff --git a/cmds/screenrecord/TextRenderer.cpp b/cmds/screenrecord/TextRenderer.cpp
index 048d382..784055c 100644
--- a/cmds/screenrecord/TextRenderer.cpp
+++ b/cmds/screenrecord/TextRenderer.cpp
@@ -102,8 +102,9 @@
     }
 
     uint32_t potHeight = powerOfTwoCeil(FontBitmap::height);
-    uint32_t* rgbaPixels = new uint32_t[FontBitmap::width * potHeight];
+    uint8_t* rgbaPixels = new uint8_t[FontBitmap::width * potHeight * 4];
     memset(rgbaPixels, 0, FontBitmap::width * potHeight * 4);
+    uint8_t* pix = rgbaPixels;
 
     for (unsigned int i = 0; i < FontBitmap::width * FontBitmap::height; i++) {
         uint8_t alpha, color;
@@ -116,7 +117,10 @@
             color = FontBitmap::pixels[i] & ~1;
             alpha = 0xff;
         }
-        rgbaPixels[i] = (alpha << 24) | (color << 16) | (color << 8) | color;
+        *pix++ = color;
+        *pix++ = color;
+        *pix++ = color;
+        *pix++ = alpha;
     }
 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FontBitmap::width, potHeight, 0,
@@ -151,11 +155,20 @@
     return computeScaledStringWidth(str, strlen(str));
 }
 
+size_t TextRenderer::glyphIndex(char ch) const {
+    size_t chi = ch - FontBitmap::firstGlyphChar;
+    if (chi >= FontBitmap::numGlyphs) {
+        chi = '?' - FontBitmap::firstGlyphChar;
+    }
+    assert(chi < FontBitmap::numGlyphs);
+    return chi;
+}
+
 float TextRenderer::computeScaledStringWidth(const char* str,
         size_t len) const {
     float width = 0.0f;
     for (size_t i = 0; i < len; i++) {
-        size_t chi = str[i] - FontBitmap::firstGlyphChar;
+        size_t chi = glyphIndex(str[i]);
         float glyphWidth = FontBitmap::glyphWidth[chi];
         width += (glyphWidth - 1 - FontBitmap::outlineWidth) * mScale;
     }
@@ -182,11 +195,7 @@
     float fullTexWidth = FontBitmap::width;
     float fullTexHeight = powerOfTwoCeil(FontBitmap::height);
     for (size_t i = 0; i < len; i++) {
-        size_t chi = str[i] - FontBitmap::firstGlyphChar;
-        if (chi >= FontBitmap::numGlyphs) {
-            chi = '?' - FontBitmap::firstGlyphChar;
-            assert(chi < FontBitmap::numGlyphs);
-        }
+        size_t chi = glyphIndex(str[i]);
         float glyphWidth = FontBitmap::glyphWidth[chi];
         float glyphHeight = FontBitmap::maxGlyphHeight;
 
diff --git a/cmds/screenrecord/TextRenderer.h b/cmds/screenrecord/TextRenderer.h
index 9a28fcb..03dd2fb 100644
--- a/cmds/screenrecord/TextRenderer.h
+++ b/cmds/screenrecord/TextRenderer.h
@@ -109,6 +109,10 @@
     // Like getGlyphHeight(), but result is scaled.
     float getScaledGlyphHeight() const { return getGlyphHeight() * mScale; }
 
+    // Convert an ASCII character to a glyph index.  Returns the glyph for
+    // '?' if we have no glyph for the specified character.
+    size_t glyphIndex(char ch) const;
+
     GLuint mTextureName;
     float mScale;
 
diff --git a/cmds/screenrecord/screenrecord.cpp b/cmds/screenrecord/screenrecord.cpp
index b13333c..61f83e3 100644
--- a/cmds/screenrecord/screenrecord.cpp
+++ b/cmds/screenrecord/screenrecord.cpp
@@ -45,6 +45,7 @@
 #include <signal.h>
 #include <getopt.h>
 #include <sys/wait.h>
+#include <assert.h>
 
 #include "screenrecord.h"
 #include "Overlay.h"
@@ -532,9 +533,10 @@
 
     // Configure optional overlay.
     sp<IGraphicBufferProducer> bufferProducer;
-    sp<Overlay> overlay = new Overlay();
+    sp<Overlay> overlay;
     if (gWantFrameTime) {
         // Send virtual display frames to an external texture.
+        overlay = new Overlay();
         err = overlay->start(encoderInputSurface, &bufferProducer);
         if (err != NO_ERROR) {
             encoder->release();
@@ -578,7 +580,9 @@
     // Shut everything down, starting with the producer side.
     encoderInputSurface = NULL;
     SurfaceComposerClient::destroyDisplay(dpy);
-    overlay->stop();
+    if (overlay != NULL) {
+        overlay->stop();
+    }
     encoder->stop();
     // If we don't stop muxer explicitly, i.e. let the destructor run,
     // it may hang (b/11050628).
@@ -717,8 +721,8 @@
         "    display resolution (if supported), 1280x720 if not.  For best results,\n"
         "    use a size supported by the AVC encoder.\n"
         "--bit-rate RATE\n"
-        "    Set the video bit rate, in megabits per second.  Value may be specified\n"
-        "    in bits or megabits, e.g. '4000000' is equivalent to '4M'.  Default %dMbps.\n"
+        "    Set the video bit rate, in bits per second.  Value may be specified as\n"
+        "    bits or megabits, e.g. '4000000' is equivalent to '4M'.  Default %dMbps.\n"
         "--bugreport\n"
         "    Add additional information, such as a timestamp overlay, that is helpful\n"
         "    in videos captured to illustrate bugs.\n"