mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 21:28:55 +00:00
Bug 825110 - Part 1: Camera changes for B2G WebRTC video module. r=mhabicher
This commit is contained in:
parent
ca504dd560
commit
e8d81505ed
@ -106,6 +106,10 @@ CameraPreviewMediaStream::SetCurrentFrame(const gfxIntSize& aIntrinsicSize, Imag
|
||||
NS_NewRunnableMethod(output, &VideoFrameContainer::Invalidate);
|
||||
NS_DispatchToMainThread(event, NS_DISPATCH_NORMAL);
|
||||
}
|
||||
|
||||
if (mFrameCallback) {
|
||||
mFrameCallback->OnNewFrame(aIntrinsicSize, aImage);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,6 +11,11 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class CameraPreviewFrameCallback {
|
||||
public:
|
||||
virtual void OnNewFrame(const gfxIntSize& aIntrinsicSize, layers::Image* aImage);
|
||||
};
|
||||
|
||||
/**
|
||||
* This is a stream for camere preview.
|
||||
*
|
||||
@ -42,11 +47,16 @@ public:
|
||||
// Call these on any thread.
|
||||
void SetCurrentFrame(const gfxIntSize& aIntrinsicSize, Image* aImage);
|
||||
|
||||
void SetFrameCallback(CameraPreviewFrameCallback* aCallback) {
|
||||
mFrameCallback = aCallback;
|
||||
}
|
||||
|
||||
protected:
|
||||
// mMutex protects all the class' fields.
|
||||
// This class is not registered to MediaStreamGraph.
|
||||
// It needs to protect all the fields.
|
||||
Mutex mMutex;
|
||||
CameraPreviewFrameCallback* mFrameCallback;
|
||||
};
|
||||
|
||||
|
||||
|
@ -455,3 +455,9 @@ nsDOMCameraControl::Shutdown()
|
||||
DOM_CAMERA_LOGI("%s:%d\n", __func__, __LINE__);
|
||||
mCameraControl->Shutdown();
|
||||
}
|
||||
|
||||
nsRefPtr<ICameraControl>
|
||||
nsDOMCameraControl::GetNativeCameraControl()
|
||||
{
|
||||
return mCameraControl;
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
|
||||
// Main camera control.
|
||||
class nsDOMCameraControl : public nsICameraControl
|
||||
{
|
||||
@ -30,6 +29,7 @@ public:
|
||||
nsICameraGetCameraCallback* onSuccess,
|
||||
nsICameraErrorCallback* onError, uint64_t aWindowId);
|
||||
nsresult Result(nsresult aResult, nsICameraGetCameraCallback* onSuccess, nsICameraErrorCallback* onError, uint64_t aWindowId);
|
||||
nsRefPtr<ICameraControl> GetNativeCameraControl();
|
||||
|
||||
void Shutdown();
|
||||
|
||||
|
@ -46,6 +46,9 @@ public:
|
||||
void Register(mozilla::nsDOMCameraControl* aDOMCameraControl);
|
||||
void OnNavigation(uint64_t aWindowId);
|
||||
|
||||
nsresult GetNumberOfCameras(int32_t& aDeviceCount);
|
||||
nsresult GetCameraName(uint32_t aDeviceNum, nsCString& aDeviceName);
|
||||
|
||||
protected:
|
||||
void XpComShutdown();
|
||||
void Shutdown(uint64_t aWindowId);
|
||||
|
@ -5,6 +5,17 @@
|
||||
#include "DOMCameraManager.h"
|
||||
|
||||
// From nsDOMCameraManager.
|
||||
nsresult
|
||||
nsDOMCameraManager::GetNumberOfCameras(int32_t& aDeviceCount)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
};
|
||||
|
||||
nsresult
|
||||
nsDOMCameraManager::GetCameraName(uint32_t aDeviceNum, nsCString& aDeviceName)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* [implicit_jscontext] jsval getListOfCameras (); */
|
||||
NS_IMETHODIMP
|
||||
|
@ -22,6 +22,46 @@
|
||||
#include "CameraCommon.h"
|
||||
|
||||
// From nsDOMCameraManager, but gonk-specific!
|
||||
nsresult
|
||||
nsDOMCameraManager::GetNumberOfCameras(int32_t& aDeviceCount)
|
||||
{
|
||||
aDeviceCount = android::Camera::getNumberOfCameras();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsDOMCameraManager::GetCameraName(uint32_t aDeviceNum, nsCString& aDeviceName)
|
||||
{
|
||||
int32_t count = android::Camera::getNumberOfCameras();
|
||||
DOM_CAMERA_LOGI("getListOfCameras : getNumberOfCameras() returned %d\n", count);
|
||||
if (aDeviceNum > count) {
|
||||
DOM_CAMERA_LOGE("GetCameraName : invalid device number");
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
android::CameraInfo info;
|
||||
int rv = android::Camera::getCameraInfo(aDeviceNum, &info);
|
||||
if (rv != 0) {
|
||||
DOM_CAMERA_LOGE("GetCameraName : get_camera_info(%d) failed: %d\n", aDeviceNum, rv);
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
switch (info.facing) {
|
||||
case CAMERA_FACING_BACK:
|
||||
aDeviceName.Assign("back");
|
||||
break;
|
||||
|
||||
case CAMERA_FACING_FRONT:
|
||||
aDeviceName.Assign("front");
|
||||
break;
|
||||
|
||||
default:
|
||||
aDeviceName.Assign("extra-camera-");
|
||||
aDeviceName.AppendInt(aDeviceNum);
|
||||
break;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* [implicit_jscontext] jsval getListOfCameras (); */
|
||||
NS_IMETHODIMP
|
||||
@ -40,40 +80,25 @@ nsDOMCameraManager::GetListOfCameras(JSContext* cx, JS::Value* _retval)
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
DOM_CAMERA_LOGI("getListOfCameras : get_number_of_cameras() returned %d\n", count);
|
||||
DOM_CAMERA_LOGI("getListOfCameras : getNumberOfCameras() returned %d\n", count);
|
||||
while (count--) {
|
||||
android::CameraInfo info;
|
||||
int rv = android::Camera::getCameraInfo(count, &info);
|
||||
if (rv != 0) {
|
||||
DOM_CAMERA_LOGE("getListOfCameras : get_camera_info(%d) failed: %d\n", count, rv);
|
||||
nsCString cameraName;
|
||||
nsresult result = GetCameraName(count, cameraName);
|
||||
if (result != NS_OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
JSString* v;
|
||||
JSString* v = JS_NewStringCopyZ(cx, cameraName.get());
|
||||
JS::Value jv;
|
||||
|
||||
switch (info.facing) {
|
||||
case CAMERA_FACING_BACK:
|
||||
v = JS_NewStringCopyZ(cx, "back");
|
||||
index = 0;
|
||||
break;
|
||||
|
||||
case CAMERA_FACING_FRONT:
|
||||
v = JS_NewStringCopyZ(cx, "front");
|
||||
index = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
// TODO: see bug 779143.
|
||||
{
|
||||
static uint32_t extraIndex = 2;
|
||||
nsCString s;
|
||||
s.AppendPrintf("extra-camera-%d", count);
|
||||
v = JS_NewStringCopyZ(cx, s.get());
|
||||
index = extraIndex++;
|
||||
}
|
||||
break;
|
||||
if (!cameraName.Compare("back")) {
|
||||
index = 0;
|
||||
} else if (!cameraName.Compare("front")) {
|
||||
index = 1;
|
||||
} else {
|
||||
static uint32_t extraIndex = 2;
|
||||
index = extraIndex++;
|
||||
}
|
||||
|
||||
if (!v) {
|
||||
DOM_CAMERA_LOGE("getListOfCameras : out of memory populating camera list");
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
|
@ -22,8 +22,10 @@ MODULE = 'dom'
|
||||
|
||||
EXPORTS += [
|
||||
'CameraCommon.h',
|
||||
'CameraPreviewMediaStream.h',
|
||||
'DOMCameraManager.h',
|
||||
'GonkNativeWindow.h',
|
||||
'GonkNativeWindowClient.h',
|
||||
'GonkCameraControl.h',
|
||||
]
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user