merge in jb-release history after reset to jb-dev
diff --git a/camera/Encoder_libjpeg.cpp b/camera/Encoder_libjpeg.cpp
index d50b2ea..c7da115 100644
--- a/camera/Encoder_libjpeg.cpp
+++ b/camera/Encoder_libjpeg.cpp
@@ -47,17 +47,17 @@
 #define MIN(x,y) ((x < y) ? x : y)
 
 namespace android {
-struct string_pair {
-    const char* string1;
-    const char* string2;
+struct integer_string_pair {
+    unsigned int integer;
+    const char* string;
 };
 
-static string_pair degress_to_exif_lut [] = {
+static integer_string_pair degress_to_exif_lut [] = {
     // degrees, exif_orientation
-    {"0",   "1"},
-    {"90",  "6"},
-    {"180", "3"},
-    {"270", "8"},
+    {0,   "1"},
+    {90,  "6"},
+    {180, "3"},
+    {270, "8"},
 };
 struct libjpeg_destination_mgr : jpeg_destination_mgr {
     libjpeg_destination_mgr(uint8_t* input, int size);
@@ -200,10 +200,10 @@
 }
 
 /* public static functions */
-const char* ExifElementsTable::degreesToExifOrientation(const char* degrees) {
+const char* ExifElementsTable::degreesToExifOrientation(unsigned int degrees) {
     for (unsigned int i = 0; i < ARRAY_SIZE(degress_to_exif_lut); i++) {
-        if (!strcmp(degrees, degress_to_exif_lut[i].string1)) {
-            return degress_to_exif_lut[i].string2;
+        if (degrees == degress_to_exif_lut[i].integer) {
+            return degress_to_exif_lut[i].string;
         }
     }
     return NULL;
diff --git a/camera/OMXCameraAdapter/OMXAlgo.cpp b/camera/OMXCameraAdapter/OMXAlgo.cpp
index ff68cc9..12b9058 100644
--- a/camera/OMXCameraAdapter/OMXAlgo.cpp
+++ b/camera/OMXCameraAdapter/OMXAlgo.cpp
@@ -641,10 +641,10 @@
             CAMHAL_LOGDA("Camera mode: HIGH QUALITY_ZSL");
             camMode.eCamOperatingMode = OMX_TI_CaptureImageProfileZeroShutterLag;
 
-            valstr = mParams.get(TICameraParameters::KEY_RECORDING_HINT);
-            if (!valstr || (valstr && (strcmp(valstr, "false")))) {
+            if ( !mIternalRecordingHint ) {
                 zslHistoryLen.nHistoryLen = 5;
             }
+
             }
         else if( OMXCameraAdapter::VIDEO_MODE == mode )
             {
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 11ecf0f..392de93 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -191,6 +191,7 @@
     mZoomParameterIdx = 0;
     mExposureBracketingValidEntries = 0;
     mSensorOverclock = false;
+    mIternalRecordingHint = false;
 
     mDeviceOrientation = 0;
     mCapabilities = caps;
@@ -536,6 +537,13 @@
         mOMXStateSwitch = true;
         }
 
+    valstr = params.get(TICameraParameters::KEY_RECORDING_HINT);
+    if (!valstr || (valstr && (strcmp(valstr, CameraParameters::FALSE)))) {
+        mIternalRecordingHint = false;
+    } else {
+        mIternalRecordingHint = true;
+    }
+
 #ifdef OMAP_ENHANCEMENT
 
     if ( (valstr = params.get(TICameraParameters::KEY_MEASUREMENT_ENABLE)) != NULL )
@@ -1465,13 +1473,6 @@
 
     LOG_FUNCTION_NAME;
 
-    ///Flag to determine whether it is 3D camera or not
-    bool isS3d = false;
-    const char *valstr = NULL;
-    if ( (valstr = mParams.get(TICameraParameters::KEY_S3D_SUPPORTED)) != NULL) {
-        isS3d = (strcmp(valstr, "true") == 0);
-    }
-
     if(!bufArr)
         {
         CAMHAL_LOGEA("NULL pointer passed for buffArr");
@@ -1531,8 +1532,7 @@
 
         CAMHAL_LOGDB("Camera Mode = %d", mCapMode);
 
-        if( ( mCapMode == OMXCameraAdapter::VIDEO_MODE ) ||
-            ( isS3d && (mCapMode == OMXCameraAdapter::HIGH_QUALITY)) )
+        if( mCapMode == OMXCameraAdapter::VIDEO_MODE )
             {
             ///Enable/Disable Video Noise Filter
             ret = enableVideoNoiseFilter(mVnfEnabled);
@@ -3085,17 +3085,15 @@
         const char *valstr = NULL;
 
         pixFormat = mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex].mColorFormat;
-        valstr = mParams.getPictureFormat();
 
         if ( OMX_COLOR_FormatUnused == pixFormat )
             {
             typeOfFrame = CameraFrame::IMAGE_FRAME;
             mask = (unsigned int) CameraFrame::IMAGE_FRAME;
-            }
-        else if ( pixFormat == OMX_COLOR_FormatCbYCrY &&
-                  ((valstr && !strcmp(valstr, CameraParameters::PIXEL_FORMAT_JPEG)) ||
-                   !valstr) )
-            {
+        } else if ( pixFormat == OMX_COLOR_FormatCbYCrY &&
+                  ((mPictureFormatFromClient &&
+                    !strcmp(mPictureFormatFromClient, CameraParameters::PIXEL_FORMAT_JPEG)) ||
+                    !mPictureFormatFromClient) ) {
             // signals to callbacks that this needs to be coverted to jpeg
             // before returning to framework
             typeOfFrame = CameraFrame::IMAGE_FRAME;
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp
index 93a0dae..6ad5f88 100644
--- a/camera/OMXCameraAdapter/OMXCapture.cpp
+++ b/camera/OMXCameraAdapter/OMXCapture.cpp
@@ -63,69 +63,48 @@
     CAMHAL_LOGVB("Image: cap.mWidth = %d", (int)cap->mWidth);
     CAMHAL_LOGVB("Image: cap.mHeight = %d", (int)cap->mHeight);
 
-    if ( (valstr = params.getPictureFormat()) != NULL )
-        {
-        if (strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_YUV422I) == 0)
-            {
+    if ((valstr = params.getPictureFormat()) != NULL) {
+        if (strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_YUV422I) == 0) {
             CAMHAL_LOGDA("CbYCrY format selected");
             pixFormat = OMX_COLOR_FormatCbYCrY;
-            }
-        else if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_YUV420SP) == 0)
-            {
+            mPictureFormatFromClient = CameraParameters::PIXEL_FORMAT_YUV422I;
+        } else if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_YUV420SP) == 0) {
             CAMHAL_LOGDA("YUV420SP format selected");
             pixFormat = OMX_COLOR_FormatYUV420SemiPlanar;
-            }
-        else if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_RGB565) == 0)
-            {
+            mPictureFormatFromClient = CameraParameters::PIXEL_FORMAT_YUV420SP;
+        } else if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_RGB565) == 0) {
             CAMHAL_LOGDA("RGB565 format selected");
             pixFormat = OMX_COLOR_Format16bitRGB565;
-            }
-        else if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_JPEG) == 0)
-            {
+            mPictureFormatFromClient = CameraParameters::PIXEL_FORMAT_RGB565;
+        } else if (strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_JPEG) == 0) {
             CAMHAL_LOGDA("JPEG format selected");
             pixFormat = OMX_COLOR_FormatUnused;
             mCodingMode = CodingNone;
-            }
-        else if(strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_JPS) == 0)
-            {
+            mPictureFormatFromClient = CameraParameters::PIXEL_FORMAT_JPEG;
+        } else if (strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_JPS) == 0) {
             CAMHAL_LOGDA("JPS format selected");
             pixFormat = OMX_COLOR_FormatUnused;
             mCodingMode = CodingJPS;
-            }
-        else if(strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_MPO) == 0)
-            {
+            mPictureFormatFromClient = TICameraParameters::PIXEL_FORMAT_JPS;
+        } else if (strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_MPO) == 0) {
             CAMHAL_LOGDA("MPO format selected");
             pixFormat = OMX_COLOR_FormatUnused;
             mCodingMode = CodingMPO;
-            }
-        else if(strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_RAW_JPEG) == 0)
-            {
-            CAMHAL_LOGDA("RAW + JPEG format selected");
-            pixFormat = OMX_COLOR_FormatUnused;
-            mCodingMode = CodingRAWJPEG;
-            }
-        else if(strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_RAW_MPO) == 0)
-            {
-            CAMHAL_LOGDA("RAW + MPO format selected");
-            pixFormat = OMX_COLOR_FormatUnused;
-            mCodingMode = CodingRAWMPO;
-            }
-        else if(strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_RAW) == 0)
-            {
+            mPictureFormatFromClient = TICameraParameters::PIXEL_FORMAT_MPO;
+        } else if (strcmp(valstr, (const char *) TICameraParameters::PIXEL_FORMAT_RAW) == 0) {
             CAMHAL_LOGDA("RAW Picture format selected");
             pixFormat = OMX_COLOR_FormatRawBayer10bit;
-            }
-        else
-            {
+            mPictureFormatFromClient = TICameraParameters::PIXEL_FORMAT_RAW;
+        } else {
             CAMHAL_LOGEA("Invalid format, JPEG format selected as default");
             pixFormat = OMX_COLOR_FormatUnused;
-            }
+            mPictureFormatFromClient = NULL;
         }
-    else
-        {
+    } else {
         CAMHAL_LOGEA("Picture format is NULL, defaulting to JPEG");
         pixFormat = OMX_COLOR_FormatUnused;
-        }
+        mPictureFormatFromClient = NULL;
+    }
 
     // JPEG capture is not supported in video mode by OMX Camera
     // Set capture format to yuv422i...jpeg encode will
diff --git a/camera/OMXCameraAdapter/OMXExif.cpp b/camera/OMXCameraAdapter/OMXExif.cpp
index 70fb3db..76d94bd 100644
--- a/camera/OMXCameraAdapter/OMXExif.cpp
+++ b/camera/OMXCameraAdapter/OMXExif.cpp
@@ -193,6 +193,7 @@
     if( ( valstr = params.get(TICameraParameters::KEY_EXIF_MODEL ) ) != NULL )
         {
         CAMHAL_LOGVB("EXIF Model: %s", valstr);
+        strncpy(mEXIFData.mModel, valstr, EXIF_MODEL_SIZE - 1);
         mEXIFData.mModelValid= true;
         }
     else
@@ -203,6 +204,7 @@
     if( ( valstr = params.get(TICameraParameters::KEY_EXIF_MAKE ) ) != NULL )
         {
         CAMHAL_LOGVB("EXIF Make: %s", valstr);
+        strncpy(mEXIFData.mMake, valstr, EXIF_MAKE_SIZE - 1);
         mEXIFData.mMakeValid = true;
         }
     else
@@ -210,6 +212,18 @@
         mEXIFData.mMakeValid= false;
         }
 
+
+    if( ( valstr = params.get(CameraParameters::KEY_FOCAL_LENGTH) ) != NULL ) {
+        CAMHAL_LOGVB("EXIF Focal length: %s", valstr);
+        ExifElementsTable::stringToRational(valstr,
+                                            &mEXIFData.mFocalNum,
+                                            &mEXIFData.mFocalDen);
+    } else {
+        mEXIFData.mFocalNum = 0;
+        mEXIFData.mFocalDen = 0;
+    }
+
+
     LOG_FUNCTION_NAME_EXIT;
 
     return ret;
@@ -293,7 +307,7 @@
               ( mEXIFData.mModelValid ) )
             {
             strncpy(( char * ) sharedPtr,
-                    ( char * ) mParams.get(TICameraParameters::KEY_EXIF_MODEL ),
+                    mEXIFData.mModel,
                     EXIF_MODEL_SIZE - 1);
 
             exifTags->pModelBuff = ( OMX_S8 * ) ( sharedPtr - sharedBuffer.pSharedBuff );
@@ -306,8 +320,8 @@
                ( mEXIFData.mMakeValid ) )
              {
              strncpy( ( char * ) sharedPtr,
-                          ( char * ) mParams.get(TICameraParameters::KEY_EXIF_MAKE ),
-                          EXIF_MAKE_SIZE - 1);
+                      mEXIFData.mMake,
+                      EXIF_MAKE_SIZE - 1);
 
              exifTags->pMakeBuff = ( OMX_S8 * ) ( sharedPtr - sharedBuffer.pSharedBuff );
              exifTags->ulMakeBuffSizeBytes = strlen((char*)sharedPtr) + 1;
@@ -317,12 +331,9 @@
 
         if ( ( OMX_TI_TagReadWrite == exifTags->eStatusFocalLength ))
         {
-            unsigned int numerator = 0, denominator = 0;
-            ExifElementsTable::stringToRational(mParams.get(CameraParameters::KEY_FOCAL_LENGTH),
-                                                &numerator, &denominator);
-            if (numerator || denominator) {
-                exifTags->ulFocalLength[0] = (OMX_U32) numerator;
-                exifTags->ulFocalLength[1] = (OMX_U32) denominator;
+            if (mEXIFData.mFocalNum || mEXIFData.mFocalDen ) {
+                exifTags->ulFocalLength[0] = (OMX_U32) mEXIFData.mFocalNum;
+                exifTags->ulFocalLength[1] = (OMX_U32) mEXIFData.mFocalDen;
                 CAMHAL_LOGVB("exifTags->ulFocalLength = [%u] [%u]",
                              (unsigned int)(exifTags->ulFocalLength[0]),
                              (unsigned int)(exifTags->ulFocalLength[1]));
@@ -512,22 +523,21 @@
     capData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex];
 
     if ((NO_ERROR == ret) && (mEXIFData.mModelValid)) {
-        ret = exifTable->insertElement(TAG_MODEL, mParams.get(TICameraParameters::KEY_EXIF_MODEL));
+        ret = exifTable->insertElement(TAG_MODEL, mEXIFData.mModel);
     }
 
      if ((NO_ERROR == ret) && (mEXIFData.mMakeValid)) {
-        ret = exifTable->insertElement(TAG_MAKE, mParams.get(TICameraParameters::KEY_EXIF_MAKE));
+        ret = exifTable->insertElement(TAG_MAKE, mEXIFData.mMake);
      }
 
     if ((NO_ERROR == ret)) {
-        unsigned int numerator = 0, denominator = 0;
-        ExifElementsTable::stringToRational(mParams.get(CameraParameters::KEY_FOCAL_LENGTH),
-                                            &numerator, &denominator);
-        if (numerator || denominator) {
+        if (mEXIFData.mFocalNum || mEXIFData.mFocalDen) {
             char temp_value[256]; // arbitrarily long string
             snprintf(temp_value,
-                 sizeof(temp_value)/sizeof(char),
-                 "%u/%u", numerator, denominator);
+                    sizeof(temp_value)/sizeof(char),
+                    "%u/%u",
+                    mEXIFData.mFocalNum,
+                    mEXIFData.mFocalDen);
             ret = exifTable->insertElement(TAG_FOCALLENGTH, temp_value);
 
         }
@@ -618,8 +628,8 @@
 
         memcpy(temp_value, ExifAsciiPrefix, sizeof(ExifAsciiPrefix));
         memcpy(temp_value + sizeof(ExifAsciiPrefix),
-               mParams.get(CameraParameters::KEY_GPS_PROCESSING_METHOD),
-               (GPS_PROCESSING_SIZE - sizeof(ExifAsciiPrefix)));
+                mEXIFData.mGPSData.mProcMethod,
+                (GPS_PROCESSING_SIZE - sizeof(ExifAsciiPrefix)));
         ret = exifTable->insertElement(TAG_GPS_PROCESSING_METHOD, temp_value);
     }
 
@@ -650,9 +660,9 @@
         ret = exifTable->insertElement(TAG_GPS_DATESTAMP, mEXIFData.mGPSData.mDatestamp);
     }
 
-    if ((NO_ERROR == ret) && mParams.get(CameraParameters::KEY_ROTATION) ) {
+    if (NO_ERROR == ret) {
         const char* exif_orient =
-           ExifElementsTable::degreesToExifOrientation(mParams.get(CameraParameters::KEY_ROTATION));
+                ExifElementsTable::degreesToExifOrientation(mPictureRotation);
 
         if (exif_orient) {
            ret = exifTable->insertElement(TAG_ORIENTATION, exif_orient);
diff --git a/camera/inc/Encoder_libjpeg.h b/camera/inc/Encoder_libjpeg.h
index 727dd92..fb9a894 100644
--- a/camera/inc/Encoder_libjpeg.h
+++ b/camera/inc/Encoder_libjpeg.h
@@ -93,7 +93,7 @@
         void insertExifToJpeg(unsigned char* jpeg, size_t jpeg_size);
         status_t insertExifThumbnailImage(const char*, int);
         void saveJpeg(unsigned char* picture, size_t jpeg_size);
-        static const char* degreesToExifOrientation(const char*);
+        static const char* degreesToExifOrientation(unsigned int);
         static void stringToRational(const char*, unsigned int*, unsigned int*);
         static bool isAsciiTag(const char* tag);
     private:
diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
index 0fdc770..59c5efc 100644
--- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
+++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
@@ -298,6 +298,9 @@
     {
         public:
             GPSData mGPSData;
+            char mMake[EXIF_MODEL_SIZE];
+            char mModel[EXIF_MAKE_SIZE];
+            unsigned int mFocalNum, mFocalDen;
             bool mMakeValid;
             bool mModelValid;
     };
@@ -867,6 +870,7 @@
     unsigned int mPending3Asettings;
     Mutex m3ASettingsUpdateLock;
     Gen3A_settings mParameters3A;
+    const char *mPictureFormatFromClient;
 
     OMX_TI_CONFIG_3A_FACE_PRIORITY mFacePriority;
     OMX_TI_CONFIG_3A_REGION_PRIORITY mRegionPriority;
@@ -889,6 +893,8 @@
     bool mBracketingEnabled;
     int mBracketingRange;
 
+    bool mIternalRecordingHint;
+
     CameraParameters mParameters;
     bool mOmxInitialized;
     OMXCameraAdapterComponentContext mCameraAdapterParameters;