diff options
Diffstat (limited to 'chromium/media/video/capture/android/video_capture_device_android.cc')
-rw-r--r-- | chromium/media/video/capture/android/video_capture_device_android.cc | 112 |
1 files changed, 25 insertions, 87 deletions
diff --git a/chromium/media/video/capture/android/video_capture_device_android.cc b/chromium/media/video/capture/android/video_capture_device_android.cc index adfa9a3455c..d445412ca8e 100644 --- a/chromium/media/video/capture/android/video_capture_device_android.cc +++ b/chromium/media/video/capture/android/video_capture_device_android.cc @@ -7,12 +7,10 @@ #include <string> #include "base/android/jni_android.h" -#include "base/android/jni_string.h" #include "base/android/scoped_java_ref.h" #include "base/strings/string_number_conversions.h" -#include "base/strings/stringprintf.h" #include "jni/VideoCapture_jni.h" -#include "media/base/video_util.h" +#include "media/video/capture/android/video_capture_device_factory_android.h" using base::android::AttachCurrentThread; using base::android::CheckException; @@ -24,39 +22,8 @@ using base::android::ScopedJavaLocalRef; namespace media { // static -void VideoCaptureDevice::GetDeviceNames(Names* device_names) { - device_names->clear(); - - JNIEnv* env = AttachCurrentThread(); - - int num_cameras = Java_ChromiumCameraInfo_getNumberOfCameras(env); - DVLOG(1) << "VideoCaptureDevice::GetDeviceNames: num_cameras=" << num_cameras; - if (num_cameras <= 0) - return; - - for (int camera_id = num_cameras - 1; camera_id >= 0; --camera_id) { - ScopedJavaLocalRef<jobject> ci = - Java_ChromiumCameraInfo_getAt(env, camera_id); - - Name name( - base::android::ConvertJavaStringToUTF8( - Java_ChromiumCameraInfo_getDeviceName(env, ci.obj())), - base::StringPrintf("%d", Java_ChromiumCameraInfo_getId(env, ci.obj()))); - device_names->push_back(name); - - DVLOG(1) << "VideoCaptureDevice::GetDeviceNames: camera device_name=" - << name.name() - << ", unique_id=" - << name.id() - << ", orientation " - << Java_ChromiumCameraInfo_getOrientation(env, ci.obj()); - } -} - -// static -void VideoCaptureDevice::GetDeviceSupportedFormats(const Name& device, - VideoCaptureFormats* formats) { - NOTIMPLEMENTED(); +bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) { + return RegisterNativesImpl(env); } const std::string VideoCaptureDevice::Name::GetModel() const { @@ -66,25 +33,6 @@ const std::string VideoCaptureDevice::Name::GetModel() const { return ""; } -// static -VideoCaptureDevice* VideoCaptureDevice::Create(const Name& device_name) { - return VideoCaptureDeviceAndroid::Create(device_name); -} - -// static -VideoCaptureDevice* VideoCaptureDeviceAndroid::Create(const Name& device_name) { - scoped_ptr<VideoCaptureDeviceAndroid> ret( - new VideoCaptureDeviceAndroid(device_name)); - if (ret->Init()) - return ret.release(); - return NULL; -} - -// static -bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) { - return RegisterNativesImpl(env); -} - VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid(const Name& device_name) : state_(kIdle), got_first_frame_(false), device_name_(device_name) {} @@ -97,12 +45,8 @@ bool VideoCaptureDeviceAndroid::Init() { if (!base::StringToInt(device_name_.id(), &id)) return false; - JNIEnv* env = AttachCurrentThread(); - - j_capture_.Reset(Java_VideoCapture_createVideoCapture( - env, base::android::GetApplicationContext(), id, - reinterpret_cast<intptr_t>(this))); - + j_capture_.Reset(VideoCaptureDeviceFactoryAndroid::createVideoCaptureAndroid( + id, reinterpret_cast<intptr_t>(this))); return true; } @@ -120,12 +64,12 @@ void VideoCaptureDeviceAndroid::AllocateAndStart( JNIEnv* env = AttachCurrentThread(); - jboolean ret = - Java_VideoCapture_allocate(env, - j_capture_.obj(), - params.requested_format.frame_size.width(), - params.requested_format.frame_size.height(), - params.requested_format.frame_rate); + jboolean ret = Java_VideoCapture_allocate( + env, + j_capture_.obj(), + params.requested_format.frame_size.width(), + params.requested_format.frame_size.height(), + params.requested_format.frame_rate); if (!ret) { SetErrorState("failed to allocate"); return; @@ -220,11 +164,11 @@ void VideoCaptureDeviceAndroid::OnFrameAvailable( if (expected_next_frame_time_ <= current_time) { expected_next_frame_time_ += frame_interval_; - client_->OnIncomingCapturedFrame(reinterpret_cast<uint8*>(buffer), - length, - base::Time::Now(), - rotation, - capture_format_); + client_->OnIncomingCapturedData(reinterpret_cast<uint8*>(buffer), + length, + capture_format_, + rotation, + base::TimeTicks::Now()); } env->ReleaseByteArrayElements(data, buffer, JNI_ABORT); @@ -234,20 +178,14 @@ VideoPixelFormat VideoCaptureDeviceAndroid::GetColorspace() { JNIEnv* env = AttachCurrentThread(); int current_capture_colorspace = Java_VideoCapture_getColorspace(env, j_capture_.obj()); - switch (current_capture_colorspace){ - case ANDROID_IMAGEFORMAT_YV12: - return media::PIXEL_FORMAT_YV12; - case ANDROID_IMAGEFORMAT_NV21: - return media::PIXEL_FORMAT_NV21; - case ANDROID_IMAGEFORMAT_YUY2: - return media::PIXEL_FORMAT_YUY2; - case ANDROID_IMAGEFORMAT_NV16: - case ANDROID_IMAGEFORMAT_JPEG: - case ANDROID_IMAGEFORMAT_RGB_565: - case ANDROID_IMAGEFORMAT_UNKNOWN: - // NOTE(mcasas): NV16, JPEG, RGB565 not supported in VideoPixelFormat. - default: - return media::PIXEL_FORMAT_UNKNOWN; + switch (current_capture_colorspace) { + case ANDROID_IMAGEFORMAT_YV12: + return media::PIXEL_FORMAT_YV12; + case ANDROID_IMAGEFORMAT_NV21: + return media::PIXEL_FORMAT_NV21; + case ANDROID_IMAGEFORMAT_UNKNOWN: + default: + return media::PIXEL_FORMAT_UNKNOWN; } } @@ -257,7 +195,7 @@ void VideoCaptureDeviceAndroid::SetErrorState(const std::string& reason) { base::AutoLock lock(lock_); state_ = kError; } - client_->OnError(); + client_->OnError(reason); } } // namespace media |