Merge "QCamera2: HAL3: Extend available request/result/charact. keys" into oc-mr1-dev
diff --git a/apns-full-conf.xml b/apns-full-conf.xml
index 6080daa..99a8d3d 100644
--- a/apns-full-conf.xml
+++ b/apns-full-conf.xml
@@ -7259,6 +7259,7 @@
       apn="pda.bell.ca"
       type="default,mms,supl"
       mmsc="http://mms.bell.ca/mms/wapenc"
+      protocol="IPV4V6"
   />
 
   <apn carrier="Virgin Mobile"
@@ -7269,6 +7270,7 @@
       mmsc="http://mms.bell.ca/mms/wapenc"
       mvno_match_data="3E"
       mvno_type="gid"
+      protocol="IPV4V6"
   />
 
   <apn carrier="MTS"
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index cb31953..bfeb46a 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -1974,6 +1974,8 @@
 
         uint32_t raw16_stride = ((uint32_t)dim.width + 15U) & ~15U;
         uint16_t* raw16_buffer = (uint16_t *)frame->buffer;
+        uint8_t first_quintuple[5];
+        memcpy(first_quintuple, raw16_buffer, sizeof(first_quintuple));
 
         // Some raw processing may be needed prior to conversion.
         static bool raw_proc_lib_load_attempted = false;
@@ -2007,13 +2009,19 @@
             for (int32_t xs = dim.width - 1; xs >= 0; xs--) {
                 uint32_t x = (uint32_t)xs;
                 uint8_t upper_8bit = row_start[5*(x/4)+x%4];
-                uint8_t lower_2bit = ((row_start[5*(x/4)+4] >> (x%4)) & 0x3);
+                uint8_t lower_2bit = ((row_start[5*(x/4)+4] >> ((x%4) << 1)) & 0x3);
                 uint16_t raw16_pixel =
                         (uint16_t)(((uint16_t)upper_8bit)<<2 |
                         (uint16_t)lower_2bit);
                 raw16_buffer[y*raw16_stride+x] = raw16_pixel;
             }
         }
+
+        // Re-convert the first 2 pixels of the buffer because the loop above messes
+        // them up by reading the first quintuple while modifying it.
+        raw16_buffer[0] = ((uint16_t)first_quintuple[0]<<2) | (first_quintuple[4] & 0x3);
+        raw16_buffer[1] = ((uint16_t)first_quintuple[1]<<2) | ((first_quintuple[4] >> 2) & 0x3);
+
     } else {
         ALOGE("%s: Could not find stream", __func__);
     }
diff --git a/camera/QCamera2/HAL3/QCamera3Stream.cpp b/camera/QCamera2/HAL3/QCamera3Stream.cpp
index 399e73d..e87d1ec 100644
--- a/camera/QCamera2/HAL3/QCamera3Stream.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Stream.cpp
@@ -588,9 +588,9 @@
             break;
         case CAMERA_CMD_TYPE_EXIT:
             CDBG_HIGH("%s: Exit", __func__);
+            pme->flushFreeBatchBufQ();
             /* flush data buf queue */
             pme->mDataQ.flush();
-            pme->flushFreeBatchBufQ();
             running = 0;
             break;
         default:
diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml
index 8712039..72abe44 100644
--- a/media_codecs_performance.xml
+++ b/media_codecs_performance.xml
@@ -14,8 +14,9 @@
      limitations under the License.
 -->
 
-<!-- Generated file for bullhead using measurements between OPR1.170623.009/OPR1.170623.010 and OPM1.170908.002 -->
+<!-- Generated file for bullhead using measurements between OPR1.170623.011 and OPM1.170912.002 -->
 <MediaCodecs>
+    <!-- Measurements between OPR1.170623.010 and OPM1.170908.002 -->
     <Encoders>
         <MediaCodec name="OMX.qcom.video.encoder.h263" type="video/3gpp" update="true">
             <!-- measured 98%:101-511 med:187/183 variance:2.2 -->
@@ -24,16 +25,18 @@
             <Limit name="measured-frame-rate-352x288" range="235-248" /> <!-- TWEAKED N=118 v98%=1.7 -->
             <Limit name="measured-frame-rate-704x576" range="128-128" /> <!-- N=114 v98%=1.4 -->
         </MediaCodec>
+        <!-- Measurements between OPR1.170623.011 and OPM1.170908.002 -->
         <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="212-255" /> <!-- N=118 v98%=1.9 -->
-            <Limit name="measured-frame-rate-720x480" range="143-143" /> <!-- N=116 v98%=1.5 (OPR1.170623.011-) -->
-            <Limit name="measured-frame-rate-1280x720" range="72-72" /> <!-- N=118 v98%=1.4 -->
-            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=116 v98%=1.3 (OPR1.170623.011-) -->
+            <Limit name="measured-frame-rate-320x240" range="212-255" /> <!-- N=118 v98%=1.9 (OPR1.170623.010-) -->
+            <Limit name="measured-frame-rate-720x480" range="143-143" /> <!-- N=116 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1280x720" range="72-72" /> <!-- N=118 v98%=1.4 (OPR1.170623.010-) -->
+            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=116 v98%=1.3 -->
         </MediaCodec>
+        <!-- Measurements between OPR1.170623.011 and OPM1.170908.002 -->
         <MediaCodec name="OMX.qcom.video.encoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="178-198" /> <!-- N=118 v98%=1.8 -->
-            <Limit name="measured-frame-rate-352x288" range="199-199" /> <!-- N=116 v98%=1.2 (OPR1.170623.011-) -->
-            <Limit name="measured-frame-rate-640x480" range="77-77" /> <!-- N=116 v98%=1.0 (OPR1.170623.011-) -->
+            <Limit name="measured-frame-rate-176x144" range="178-198" /> <!-- N=118 v98%=1.8 (OPR1.170623.010-) -->
+            <Limit name="measured-frame-rate-352x288" range="199-199" /> <!-- N=116 v98%=1.2 -->
+            <Limit name="measured-frame-rate-640x480" range="77-77" /> <!-- N=116 v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" update="true">
             <Limit name="measured-frame-rate-320x180" range="112-112" /> <!-- N=118 v98%=1.1 -->
@@ -44,59 +47,59 @@
         <MediaCodec name="OMX.google.h263.encoder" type="video/3gpp" update="true">
             <Limit name="measured-frame-rate-176x144" range="230-230" /> <!-- N=118 v98%=1.3 -->
         </MediaCodec>
+        <!-- Measurements between OPR1.170623.011 and OPM1.170908.002 -->
         <MediaCodec name="OMX.google.h264.encoder" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="234-234" /> <!-- N=116 v98%=1.4 (OPR1.170623.011-) -->
-            <Limit name="measured-frame-rate-720x480" range="99-99" /> <!-- N=116 v98%=1.3 (OPR1.170623.011-) -->
-            <Limit name="measured-frame-rate-1280x720" range="50-50" /> <!-- N=118 v98%=1.5 -->
-            <Limit name="measured-frame-rate-1920x1080" range="19-20" /> <!-- N=116 v98%=1.3 (OPR1.170623.011-) -->
+            <Limit name="measured-frame-rate-320x240" range="234-234" /> <!-- N=116 v98%=1.4 -->
+            <Limit name="measured-frame-rate-720x480" range="99-99" /> <!-- N=116 v98%=1.3 -->
+            <Limit name="measured-frame-rate-1280x720" range="50-50" /> <!-- N=118 v98%=1.5 (OPR1.170623.010-) -->
+            <Limit name="measured-frame-rate-1920x1080" range="19-20" /> <!-- N=116 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.encoder" type="video/mp4v-es" update="true">
             <Limit name="measured-frame-rate-176x144" range="256-257" /> <!-- N=118 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
             <Limit name="measured-frame-rate-320x180" range="99-99" /> <!-- N=116 v98%=1.0 (OPR1.170623.011-) -->
-            <Limit name="measured-frame-rate-640x360" range="37-37" /> <!-- N=114 v98%=1.0 -->
+            <Limit name="measured-frame-rate-640x360" range="37-37" /> <!-- N=114 v98%=1.0 (OPR1.170623.009-) -->
             <Limit name="measured-frame-rate-1280x720" range="31-31" /> <!-- N=116 v98%=1.2 -->
             <Limit name="measured-frame-rate-1920x1080" range="14-14" /> <!-- N=118 v98%=1.3 -->
         </MediaCodec>
+        <!-- Measurements between OPR1.170208.003 and OPM1.170908.002 -->
         <MediaCodec name="OMX.google.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
             <!-- measured 98%:86-119 med:107/107 N=76 FLAKY(mn=45.9 < 54 - 214) -->
-            <Limit name="measured-frame-rate-320x180" range="107-107" /> <!-- v98%=1.2 (OPR1.170208.003-) -->
+            <Limit name="measured-frame-rate-320x180" range="107-107" /> <!-- v98%=1.2 -->
             <!-- measured 98%:14-45 med:43/41 N=74 -->
-            <Limit name="measured-frame-rate-640x360" range="24-41" /> <!-- v98%=1.8 (OPR1.170208.003-) -->
+            <Limit name="measured-frame-rate-640x360" range="24-41" /> <!-- v98%=1.8 -->
             <!-- measured 98%:4-12 med:10/9 N=78 -->
-            <Limit name="measured-frame-rate-1280x720" range="5-9" /> <!-- v98%=1.7 (OPR1.170208.003-) -->
-            <!-- measured 98%:1-6 med:5/4 N=64 -->
-            <Limit name="measured-frame-rate-1920x1080" range="2-4" /> <!-- v98%=1.9 (OPR1.170208.003-OPM1.170814.001) -->
+            <Limit name="measured-frame-rate-1280x720" range="5-9" /> <!-- v98%=1.7 -->
         </MediaCodec>
     </Encoders>
     <Decoders>
         <MediaCodec name="OMX.qcom.video.decoder.h263" type="video/3gpp" update="true">
-            <!-- measured 98%:522-741 med:675/676 N=98 -->
-            <Limit name="measured-frame-rate-176x144" range="675-676" /> <!-- v98%=1.2 -->
-            <Limit name="measured-frame-rate-352x288" range="643-643" /> <!-- N=100 v98%=1.2 -->
+            <!-- measured 98%:500-737 med:673/673 N=98 -->
+            <Limit name="measured-frame-rate-176x144" range="673-673" /> <!-- v98%=1.2 -->
+            <Limit name="measured-frame-rate-352x288" range="640-640" /> <!-- N=100 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" update="true">
             <Limit name="measured-frame-rate-320x240" range="382-382" /> <!-- N=100 v98%=1.1 -->
             <Limit name="measured-frame-rate-720x480" range="211-211" /> <!-- N=102 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="285-285" /> <!-- N=100 v98%=1.1 -->
+            <Limit name="measured-frame-rate-1280x720" range="284-285" /> <!-- N=100 v98%=1.1 -->
             <Limit name="measured-frame-rate-1920x1080" range="141-141" /> <!-- N=100 v98%=1.1 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="408-409" /> <!-- N=100 v98%=1.2 -->
+            <Limit name="measured-frame-rate-352x288" range="410-411" /> <!-- N=100 v98%=1.2 -->
             <Limit name="measured-frame-rate-640x360" range="367-368" /> <!-- N=102 v98%=1.1 -->
             <Limit name="measured-frame-rate-720x480" range="331-331" /> <!-- N=102 v98%=1.1 -->
-            <Limit name="measured-frame-rate-1280x720" range="371-372" /> <!-- N=100 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="374-374" /> <!-- N=100 v98%=1.2 -->
             <Limit name="measured-frame-rate-1920x1080" range="253-253" /> <!-- N=100 v98%=1.1 -->
             <Limit name="measured-frame-rate-3840x2160" range="43-43" /> <!-- N=102 v98%=1.0 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.mpeg4" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="664-664" /> <!-- N=102 v98%=1.1 -->
-            <Limit name="measured-frame-rate-480x360" range="568-568" /> <!-- N=102 v98%=1.1 -->
+            <Limit name="measured-frame-rate-176x144" range="663-663" /> <!-- N=102 v98%=1.2 -->
+            <Limit name="measured-frame-rate-480x360" range="567-567" /> <!-- N=102 v98%=1.1 -->
         </MediaCodec>
         <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" update="true">
             <Limit name="measured-frame-rate-320x180" range="382-382" /> <!-- N=102 v98%=1.0 -->
-            <!-- measured 98%:336-376 med:357/357 FLAKY(mn=0.5 < 179 - 714) -->
+            <!-- measured 98%:333-376 med:357/357 FLAKY(mn=0.5 < 179 - 714) -->
             <Limit name="measured-frame-rate-640x360" range="357-357" /> <!-- N=102 v98%=1.1 -->
             <Limit name="measured-frame-rate-1280x720" range="387-387" /> <!-- N=102 v98%=1.1 -->
             <Limit name="measured-frame-rate-1920x1080" range="248-248" /> <!-- N=102 v98%=1.0 -->
@@ -106,35 +109,35 @@
             <Limit name="measured-frame-rate-176x144" range="101-124" /> <!-- TWEAKED N=100 v98%=1.7 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.h264.decoder" type="video/avc" update="true">
-            <Limit name="measured-frame-rate-320x240" range="329-329" /> <!-- N=100 v98%=1.1 -->
-            <Limit name="measured-frame-rate-720x480" range="106-107" /> <!-- N=100 v98%=1.1 -->
+            <Limit name="measured-frame-rate-320x240" range="327-327" /> <!-- N=100 v98%=1.1 -->
+            <Limit name="measured-frame-rate-720x480" range="106-106" /> <!-- N=100 v98%=1.1 -->
             <Limit name="measured-frame-rate-1280x720" range="44-44" /> <!-- N=102 v98%=1.1 -->
             <Limit name="measured-frame-rate-1920x1080" range="18-18" /> <!-- N=102 v98%=1.3 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.hevc.decoder" type="video/hevc" update="true">
-            <Limit name="measured-frame-rate-352x288" range="271-271" /> <!-- N=100 v98%=1.4 -->
-            <Limit name="measured-frame-rate-640x360" range="174-174" /> <!-- N=100 v98%=1.3 -->
+            <Limit name="measured-frame-rate-352x288" range="270-270" /> <!-- N=100 v98%=1.4 -->
+            <Limit name="measured-frame-rate-640x360" range="173-174" /> <!-- N=100 v98%=1.3 -->
             <Limit name="measured-frame-rate-720x480" range="165-165" /> <!-- N=102 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1280x720" range="63-64" /> <!-- N=104 v98%=1.2 -->
-            <Limit name="measured-frame-rate-1920x1080" range="37-37" /> <!-- N=100 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1280x720" range="63-63" /> <!-- N=102 v98%=1.2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="36-36" /> <!-- N=100 v98%=1.2 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.mpeg4.decoder" type="video/mp4v-es" update="true">
-            <Limit name="measured-frame-rate-176x144" range="121-154" /> <!-- N=102 v98%=1.8 -->
+            <Limit name="measured-frame-rate-176x144" range="119-154" /> <!-- N=102 v98%=1.8 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
-            <!-- measured 98%:317-939 med:333/333 FLAKY(167 - 940 < mx=956.9) -->
-            <Limit name="measured-frame-rate-320x180" range="333-470" /> <!-- N=102 v98%=1.7 -->
-            <!-- measured 95%:191-299 med:258/258 FLAKY(mn=105.9 < 129 - 516) -->
-            <Limit name="measured-frame-rate-640x360" range="211-258" /> <!-- TWEAKED N=102 v95%=1.2 -->
+            <!-- measured 98%:305-939 med:332/333 FLAKY(166 - 940 < mx=956.9) -->
+            <Limit name="measured-frame-rate-320x180" range="332-470" /> <!-- N=102 v98%=1.8 -->
+            <!-- measured 90%:191-298 med:258/258 FLAKY(mn=105.9 < 129 - 516) -->
+            <Limit name="measured-frame-rate-640x360" range="211-258" /> <!-- TWEAKED N=102 v90%=1.2 -->
             <!-- measured 98%:26-61 med:59/59 FLAKY(mn=25.3 < 26 - 118) -->
-            <Limit name="measured-frame-rate-1280x720" range="50-59" /> <!-- TWEAKED N=132 v98%=1.5 (OPR1.170619.001-) -->
-            <Limit name="measured-frame-rate-1920x1080" range="18-23" /> <!-- N=120 v98%=1.5 -->
+            <Limit name="measured-frame-rate-1280x720" range="50-59" /> <!-- TWEAKED N=122 v98%=1.5 (OPR1.170623.005-) -->
+            <Limit name="measured-frame-rate-1920x1080" range="17-23" /> <!-- N=114 v98%=1.5 -->
         </MediaCodec>
         <MediaCodec name="OMX.google.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
-            <Limit name="measured-frame-rate-320x180" range="283-345" /> <!-- N=100 v98%=1.6 -->
-            <!-- measured 98%:104-305 med:122/122 FLAKY(61 - 306 < mx=317.3) -->
-            <Limit name="measured-frame-rate-640x360" range="122-153" /> <!-- N=100 v98%=1.7 -->
-            <Limit name="measured-frame-rate-1280x720" range="54-54" /> <!-- N=100 v98%=1.1 -->
+            <Limit name="measured-frame-rate-320x180" range="281-322" /> <!-- N=100 v98%=1.6 -->
+            <!-- measured 98%:104-305 med:121/121 FLAKY(61 - 306 < mx=317.3) -->
+            <Limit name="measured-frame-rate-640x360" range="121-153" /> <!-- N=100 v98%=1.7 -->
+            <Limit name="measured-frame-rate-1280x720" range="53-53" /> <!-- N=100 v98%=1.1 -->
             <Limit name="measured-frame-rate-1920x1080" range="33-33" /> <!-- N=100 v98%=1.1 -->
         </MediaCodec>
     </Decoders>