Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(917)

Unified Diff: media/base/android/java/src/org/chromium/media/VideoCaptureTango.java

Issue 1714913002: Reland: Move VideoCapture* files from media/base/android/... to media/capture/video/android/java/... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: gyp-gn files and added a capture_jni_registrar Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/android/java/src/org/chromium/media/VideoCaptureTango.java
diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureTango.java b/media/base/android/java/src/org/chromium/media/VideoCaptureTango.java
deleted file mode 100644
index c85cf0f7e32626431e93e6aa35cca0a88379e0d2..0000000000000000000000000000000000000000
--- a/media/base/android/java/src/org/chromium/media/VideoCaptureTango.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.media;
-
-import android.content.Context;
-import android.graphics.ImageFormat;
-
-import org.chromium.base.Log;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * This class extends the VideoCapture base class for manipulating a Tango
- * device's cameras, namely the associated Depth (z-Buffer), Fisheye and back-
- * facing 4MP video capture devices. These devices are differentiated via the
- * |id| passed on constructor, according to the index correspondence in
- * |s_CAM_PARAMS|; all devices |id| are index 0 towards the parent VideoCapture.
- **/
-@SuppressWarnings("deprecation")
-public class VideoCaptureTango extends VideoCaptureCamera {
-
- private static class CamParams {
- final int mId;
- final String mName;
- final int mWidth;
- final int mHeight;
-
- CamParams(int id, String name, int width, int height) {
- mId = id;
- mName = name;
- mWidth = width;
- mHeight = height;
- }
- }
-
- private ByteBuffer mFrameBuffer = null;
- private final int mTangoCameraId;
- // The indexes must coincide with |CAM_PARAMS| defined below.
- private static final int DEPTH_CAMERA_ID = 0;
- private static final int FISHEYE_CAMERA_ID = 1;
- private static final int FOURMP_CAMERA_ID = 2;
- private static final CamParams CAM_PARAMS[] = {
- new CamParams(DEPTH_CAMERA_ID, "depth", 320, 240),
- new CamParams(FISHEYE_CAMERA_ID, "fisheye", 640, 480),
- new CamParams(FOURMP_CAMERA_ID, "4MP", 1280, 720) };
-
- // SuperFrame size definitions. Note that total size is the amount of lines
- // multiplied by 3/2 due to Chroma components following.
- private static final int SF_WIDTH = 1280;
- private static final int SF_HEIGHT = 1168;
- private static final int SF_FULL_HEIGHT = SF_HEIGHT * 3 / 2;
- private static final int SF_LINES_HEADER = 16;
- private static final int SF_LINES_FISHEYE = 240;
- private static final int SF_LINES_RESERVED = 80; // Spec says 96.
- private static final int SF_LINES_DEPTH = 60;
- private static final int SF_LINES_DEPTH_PADDED = 112; // Spec says 96.
- private static final int SF_LINES_BIGIMAGE = 720;
- private static final int SF_OFFSET_4MP_CHROMA = 112;
-
- private static final byte CHROMA_ZERO_LEVEL = 127;
- private static final String TAG = "cr.media";
-
- static int numberOfCameras() {
- return CAM_PARAMS.length;
- }
-
- static int getCaptureApiType(int index) {
- if (index >= CAM_PARAMS.length) {
- return CaptureApiType.API1;
- }
- return CaptureApiType.TANGO;
- }
-
- static String getName(int index) {
- if (index >= CAM_PARAMS.length) return "";
- return CAM_PARAMS[index].mName;
- }
-
- static VideoCaptureFormat[] getDeviceSupportedFormats(int id) {
- ArrayList<VideoCaptureFormat> formatList = new ArrayList<VideoCaptureFormat>();
- if (id == DEPTH_CAMERA_ID) {
- formatList.add(new VideoCaptureFormat(320, 180, 5, ImageFormat.YV12));
- } else if (id == FISHEYE_CAMERA_ID) {
- formatList.add(new VideoCaptureFormat(640, 480, 30, ImageFormat.YV12));
- } else if (id == FOURMP_CAMERA_ID) {
- formatList.add(new VideoCaptureFormat(1280, 720, 20, ImageFormat.YV12));
- }
- return formatList.toArray(new VideoCaptureFormat[formatList.size()]);
- }
-
- VideoCaptureTango(Context context,
- int id,
- long nativeVideoCaptureDeviceAndroid) {
- // All Tango cameras are like the back facing one for the generic VideoCapture code.
- super(context, 0, nativeVideoCaptureDeviceAndroid);
- mTangoCameraId = id;
- }
-
- @Override
- protected void setCaptureParameters(
- int width,
- int height,
- int frameRate,
- android.hardware.Camera.Parameters cameraParameters) {
- mCaptureFormat = new VideoCaptureFormat(CAM_PARAMS[mTangoCameraId].mWidth,
- CAM_PARAMS[mTangoCameraId].mHeight,
- frameRate,
- ImageFormat.YV12);
- // Connect Tango SuperFrame mode. Available sf modes are "all",
- // "big-rgb", "small-rgb", "depth", "ir".
- cameraParameters.set("sf-mode", "all");
- }
-
- @Override
- protected void allocateBuffers() {
- mFrameBuffer = ByteBuffer.allocateDirect(
- mCaptureFormat.mWidth * mCaptureFormat.mHeight * 3 / 2);
- // Prefill Chroma to their zero-equivalent for the cameras that only
- // provide Luma component.
- Arrays.fill(mFrameBuffer.array(), CHROMA_ZERO_LEVEL);
- }
-
- @Override
- protected void setPreviewCallback(android.hardware.Camera.PreviewCallback cb) {
- mCamera.setPreviewCallback(cb);
- }
-
- @Override
- public void onPreviewFrame(byte[] data, android.hardware.Camera camera) {
- mPreviewBufferLock.lock();
- try {
- if (!mIsRunning) return;
- if (data.length == SF_WIDTH * SF_FULL_HEIGHT) {
- if (mTangoCameraId == DEPTH_CAMERA_ID) {
- int sizeY = SF_WIDTH * SF_LINES_DEPTH;
- int startY =
- SF_WIDTH * (SF_LINES_HEADER + SF_LINES_FISHEYE + SF_LINES_RESERVED);
- // Depth is composed of 16b samples in which only 12b are
- // used. Throw away lowest 4 resolution bits. Android
- // platforms are big endian, LSB in lowest address. In this
- // case Chroma components are unused. No need to write them
- // explicitly since they're filled to 128 on creation.
- byte depthsample;
- for (int j = startY; j < startY + 2 * sizeY; j += 2) {
- depthsample = (byte) ((data[j + 1] << 4) | ((data[j] & 0xF0) >> 4));
- mFrameBuffer.put(depthsample);
- }
- for (int j = 0; j < mCaptureFormat.mWidth * mCaptureFormat.mHeight - sizeY;
- ++j) {
- mFrameBuffer.put((byte) 0);
- }
- } else if (mTangoCameraId == FISHEYE_CAMERA_ID) {
- int sizeY = SF_WIDTH * SF_LINES_FISHEYE;
- int startY = SF_WIDTH * SF_LINES_HEADER;
- // Fisheye is black and white so Chroma components are unused. No need to write
- // them explicitly since they're filled to 128 on creation.
- ByteBuffer.wrap(data, startY, sizeY).get(mFrameBuffer.array(), 0, sizeY);
- } else if (mTangoCameraId == FOURMP_CAMERA_ID) {
- int startY = SF_WIDTH * (SF_LINES_HEADER + SF_LINES_FISHEYE
- + SF_LINES_RESERVED + SF_LINES_DEPTH_PADDED);
- int sizeY = SF_WIDTH * SF_LINES_BIGIMAGE;
-
- // The spec is completely inaccurate on the location, sizes
- // and format of these channels.
- int startU = SF_WIDTH * (SF_HEIGHT + SF_OFFSET_4MP_CHROMA);
- int sizeU = SF_WIDTH * SF_LINES_BIGIMAGE / 4;
- int startV = (SF_WIDTH * SF_HEIGHT * 5 / 4) + SF_WIDTH * SF_OFFSET_4MP_CHROMA;
- int sizeV = SF_WIDTH * SF_LINES_BIGIMAGE / 4;
-
- // Equivalent to the following |for| loop but much faster:
- // for (int i = START; i < START + SIZE; ++i)
- // mFrameBuffer.put(data[i]);
- ByteBuffer.wrap(data, startY, sizeY)
- .get(mFrameBuffer.array(), 0, sizeY);
- ByteBuffer.wrap(data, startU, sizeU)
- .get(mFrameBuffer.array(), sizeY, sizeU);
- ByteBuffer.wrap(data, startV, sizeV)
- .get(mFrameBuffer.array(), sizeY + sizeU, sizeV);
- } else {
- Log.e(TAG, "Unknown camera, #id: %d", mTangoCameraId);
- return;
- }
- mFrameBuffer.rewind(); // Important!
- nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid,
- mFrameBuffer.array(),
- mFrameBuffer.capacity(),
- getCameraRotation());
- }
- } finally {
- mPreviewBufferLock.unlock();
- }
- }
-}
« no previous file with comments | « media/base/android/java/src/org/chromium/media/VideoCaptureFormat.java ('k') | media/base/android/media_jni_registrar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698