Bumping manifests a=b2g-bump
[gecko.git] / netwerk / protocol / device / CameraStreamImpl.cpp
blob721cae9dd597ed17e71e9164242667e38f1a208a
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "CameraStreamImpl.h"
6 #include "nsCRTGlue.h"
7 #include "nsThreadUtils.h"
8 #include "nsXULAppAPI.h"
9 #include "mozilla/Monitor.h"
11 /**
12 * JNI part & helper runnable
15 extern "C" {
16 NS_EXPORT void JNICALL Java_org_mozilla_gecko_GeckoAppShell_cameraCallbackBridge(JNIEnv *, jclass, jbyteArray data);
19 NS_EXPORT void JNICALL
20 Java_org_mozilla_gecko_GeckoAppShell_cameraCallbackBridge(JNIEnv *env, jclass, jbyteArray data) {
21 mozilla::net::CameraStreamImpl* impl = mozilla::net::CameraStreamImpl::GetInstance(0);
23 impl->transmitFrame(env, &data);
26 using namespace mozilla;
28 namespace mozilla {
29 namespace net {
31 static CameraStreamImpl* mCamera0 = nullptr;
32 static CameraStreamImpl* mCamera1 = nullptr;
34 /**
35 * CameraStreamImpl
38 void CameraStreamImpl::transmitFrame(JNIEnv *env, jbyteArray *data) {
39 if (!mCallback)
40 return;
41 jboolean isCopy;
42 jbyte* jFrame = env->GetByteArrayElements(*data, &isCopy);
43 uint32_t length = env->GetArrayLength(*data);
44 if (length > 0) {
45 mCallback->ReceiveFrame((char*)jFrame, length);
47 env->ReleaseByteArrayElements(*data, jFrame, 0);
50 CameraStreamImpl* CameraStreamImpl::GetInstance(uint32_t aCamera) {
51 CameraStreamImpl* res = nullptr;
52 switch(aCamera) {
53 case 0:
54 if (mCamera0)
55 res = mCamera0;
56 else
57 res = mCamera0 = new CameraStreamImpl(aCamera);
58 break;
59 case 1:
60 if (mCamera1)
61 res = mCamera1;
62 else
63 res = mCamera1 = new CameraStreamImpl(aCamera);
64 break;
66 return res;
70 CameraStreamImpl::CameraStreamImpl(uint32_t aCamera) :
71 mInit(false), mCamera(aCamera)
73 NS_WARNING("CameraStreamImpl::CameraStreamImpl()");
74 mWidth = 0;
75 mHeight = 0;
76 mFps = 0;
79 CameraStreamImpl::~CameraStreamImpl()
81 NS_WARNING("CameraStreamImpl::~CameraStreamImpl()");
84 bool CameraStreamImpl::Init(const nsCString& contentType, const uint32_t& camera, const uint32_t& width, const uint32_t& height, FrameCallback* aCallback)
86 mCallback = aCallback;
87 mWidth = width;
88 mHeight = height;
89 return AndroidBridge::Bridge()->InitCamera(contentType, camera, &mWidth, &mHeight, &mFps);
92 void CameraStreamImpl::Close() {
93 mozilla::widget::GeckoAppShell::CloseCamera();
94 mCallback = nullptr;
97 } // namespace net
98 } // namespace mozilla