Reland patch for Switch default color format to YV12 on Android.

The new since the previous patch is that we ignore all resolutions with width % 16 != 0
since they are not tightly packed.

http://developer.android.com/reference/android/graphics/ImageFormat.html#YV12

R=glaznev@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/36269004

Cr-Commit-Position: refs/heads/master@{#8459}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8459 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
perkj@webrtc.org 2015-02-23 11:14:57 +00:00
parent 8278c072b6
commit 2ad3bb17a7
2 changed files with 14 additions and 4 deletions

View File

@ -62,7 +62,7 @@ class AndroidVideoCapturer::FrameFactory : public cricket::VideoFrameFactory {
int length,
int rotation,
int64 time_stamp_in_ms) {
captured_frame_.fourcc = static_cast<uint32>(cricket::FOURCC_NV21);
captured_frame_.fourcc = static_cast<uint32>(cricket::FOURCC_YV12);
captured_frame_.data = frame_data;
captured_frame_.elapsed_time = rtc::TimeNanos() - start_time_;
captured_frame_.time_stamp =
@ -119,7 +119,7 @@ AndroidVideoCapturer::AndroidVideoCapturer(
json_value["width"].asInt(),
json_value["height"].asInt(),
cricket::VideoFormat::FpsToInterval(json_value["framerate"].asInt()),
cricket::FOURCC_NV21);
cricket::FOURCC_YV12);
formats.push_back(format);
}
SetSupportedFormats(formats);
@ -168,7 +168,7 @@ bool AndroidVideoCapturer::IsRunning() {
}
bool AndroidVideoCapturer::GetPreferredFourccs(std::vector<uint32>* fourccs) {
fourccs->push_back(cricket::FOURCC_NV21);
fourccs->push_back(cricket::FOURCC_YV12);
return true;
}

View File

@ -287,6 +287,13 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
List<Camera.Size> supportedSizes =
parameters.getSupportedPreviewSizes();
for (Camera.Size size : supportedSizes) {
if (size.width % 16 != 0) {
// If the width is not a multiple of 16, The frames received from the
// camera will have a stride != width when YV12 is used. Since we
// currently only support tightly packed images, we simply ignore those
// resolutions.
continue;
}
formatList.add(new CaptureFormat(size.width, size.height,
range[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
range[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]));
@ -324,6 +331,9 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
if (frameObserver == null) {
throw new RuntimeException("frameObserver not set.");
}
if (width % 16 != 0) {
throw new RuntimeException("widht must be a multiple of 16." );
}
this.width = width;
this.height = height;
this.framerate = framerate;
@ -398,7 +408,7 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
}
parameters.setPictureSize(width, height);
parameters.setPreviewSize(width, height);
int format = ImageFormat.NV21;
int format = ImageFormat.YV12;
parameters.setPreviewFormat(format);
camera.setParameters(parameters);
// Note: setRecordingHint(true) actually decrease frame rate on N5.