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"
7 #include "nsThreadUtils.h"
8 #include "nsXULAppAPI.h"
9 #include "mozilla/Monitor.h"
12 * JNI part & helper runnable
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
;
31 static CameraStreamImpl
* mCamera0
= nullptr;
32 static CameraStreamImpl
* mCamera1
= nullptr;
38 void CameraStreamImpl::transmitFrame(JNIEnv
*env
, jbyteArray
*data
) {
42 jbyte
* jFrame
= env
->GetByteArrayElements(*data
, &isCopy
);
43 uint32_t length
= env
->GetArrayLength(*data
);
45 mCallback
->ReceiveFrame((char*)jFrame
, length
);
47 env
->ReleaseByteArrayElements(*data
, jFrame
, 0);
50 CameraStreamImpl
* CameraStreamImpl::GetInstance(uint32_t aCamera
) {
51 CameraStreamImpl
* res
= nullptr;
57 res
= mCamera0
= new CameraStreamImpl(aCamera
);
63 res
= mCamera1
= new CameraStreamImpl(aCamera
);
70 CameraStreamImpl::CameraStreamImpl(uint32_t aCamera
) :
71 mInit(false), mCamera(aCamera
)
73 NS_WARNING("CameraStreamImpl::CameraStreamImpl()");
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
;
89 return AndroidBridge::Bridge()->InitCamera(contentType
, camera
, &mWidth
, &mHeight
, &mFps
);
92 void CameraStreamImpl::Close() {
93 mozilla::widget::GeckoAppShell::CloseCamera();
98 } // namespace mozilla