Fix an issue where the video size was incorrectly retrieved from preview size

bug - 3115814

Change-Id: I6aa59b3182ceee35c6d6ef54ff520f81077873f0
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index df95cf7..95afb1d 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -347,9 +347,21 @@
         const CameraParameters& params,
         int32_t width, int32_t height) {
 
+    // The actual video size is the same as the preview size
+    // if the camera hal does not support separate video and
+    // preview output. In this case, we retrieve the video
+    // size from preview.
     int32_t frameWidthActual = -1;
     int32_t frameHeightActual = -1;
-    params.getPreviewSize(&frameWidthActual, &frameHeightActual);
+    Vector<Size> sizes;
+    params.getSupportedVideoSizes(sizes);
+    if (sizes.size() == 0) {
+        // video size is the same as preview size
+        params.getPreviewSize(&frameWidthActual, &frameHeightActual);
+    } else {
+        // video size may not be the same as preview
+        params.getVideoSize(&frameWidthActual, &frameHeightActual);
+    }
     if (frameWidthActual < 0 || frameHeightActual < 0) {
         LOGE("Failed to retrieve video frame size (%dx%d)",
                 frameWidthActual, frameHeightActual);