summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia
diff options
context:
space:
mode:
authorSergio Ahumada <sahumada@blackberry.com>2014-06-14 21:59:24 +0200
committerSergio Ahumada <sahumada@blackberry.com>2014-06-14 21:59:24 +0200
commitd691f5ca2b6749006673e199b1d668a6daa9b990 (patch)
treeeacad24192e1e0c492320e14bdfd7c3c203a01e0 /src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia
parentd415d3256d055ef6fd7dad5c0497ecfaa56ee64d (diff)
parent150ff6662de1312e3ba9d000895d80dd5805ea5b (diff)
Merge remote-tracking branch 'origin/5.3' into dev
Conflicts: .qmake.conf Change-Id: Iecd8d7b94e52a8981526b12cffa40e99870ba62f
Diffstat (limited to 'src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia')
-rw-r--r--src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java45
-rw-r--r--src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCameraListener.java (renamed from src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCamera.java)158
2 files changed, 51 insertions, 152 deletions
diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
index 86ec30a5f..ff92af771 100644
--- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
+++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
@@ -43,6 +43,7 @@ package org.qtproject.qt5.android.multimedia;
import java.io.IOException;
import java.lang.String;
+import java.io.FileInputStream;
// API is level is < 9 unless marked otherwise.
import android.app.Activity;
@@ -247,6 +248,8 @@ public class QtAndroidMediaPlayer
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
setState(State.Idle);
+ // Make sure the new media player has the volume that was set on the QMediaPlayer
+ setVolumeHelper(mMuted ? 0 : mVolume);
}
}
@@ -376,6 +379,7 @@ public class QtAndroidMediaPlayer
mMediaPlayer.setDisplay(mSurfaceHolder);
AssetFileDescriptor afd = null;
+ FileInputStream fis = null;
try {
mUri = Uri.parse(path);
final boolean inAssets = (mUri.getScheme().compareTo("assets") == 0);
@@ -387,6 +391,10 @@ public class QtAndroidMediaPlayer
final long length = afd.getLength();
FileDescriptor fd = afd.getFileDescriptor();
mMediaPlayer.setDataSource(fd, offset, length);
+ } else if (mUri.getScheme().compareTo("file") == 0) {
+ fis = new FileInputStream(mUri.getPath());
+ FileDescriptor fd = fis.getFD();
+ mMediaPlayer.setDataSource(fd);
} else {
mMediaPlayer.setDataSource(mActivity, mUri);
}
@@ -402,9 +410,13 @@ public class QtAndroidMediaPlayer
} catch (final NullPointerException e) {
Log.d(TAG, "" + e.getMessage());
} finally {
- if (afd !=null) {
- try { afd.close(); } catch (final IOException ioe) { /* Ignore... */ }
- }
+ try {
+ if (afd != null)
+ afd.close();
+ if (fis != null)
+ fis.close();
+ } catch (final IOException ioe) { /* Ignore... */ }
+
if ((mState & State.Initialized) == 0) {
setState(State.Error);
onErrorNative(MediaPlayer.MEDIA_ERROR_UNKNOWN,
@@ -472,6 +484,20 @@ public class QtAndroidMediaPlayer
public void setVolume(int volume)
{
+ if (volume < 0)
+ volume = 0;
+
+ if (volume > 100)
+ volume = 100;
+
+ mVolume = volume;
+
+ if (!mMuted)
+ setVolumeHelper(mVolume);
+ }
+
+ private void setVolumeHelper(int volume)
+ {
if ((mState & (State.Idle
| State.Initialized
| State.Stopped
@@ -482,18 +508,9 @@ public class QtAndroidMediaPlayer
return;
}
- if (volume < 0)
- volume = 0;
-
- if (volume > 100)
- volume = 100;
-
- float newVolume = adjustVolume(volume);
-
try {
+ float newVolume = adjustVolume(volume);
mMediaPlayer.setVolume(newVolume, newVolume);
- if (!mMuted)
- mVolume = volume;
} catch (final IllegalStateException e) {
Log.d(TAG, "" + e.getMessage());
}
@@ -523,7 +540,7 @@ public class QtAndroidMediaPlayer
public void mute(final boolean mute)
{
mMuted = mute;
- setVolume(mute ? 0 : mVolume);
+ setVolumeHelper(mute ? 0 : mVolume);
}
public boolean isMuted()
diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCamera.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCameraListener.java
index f03053f17..27002fd29 100644
--- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCamera.java
+++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtCameraListener.java
@@ -48,148 +48,38 @@ import android.util.Log;
import java.lang.Math;
import java.util.concurrent.locks.ReentrantLock;
-public class QtCamera implements Camera.ShutterCallback,
- Camera.PictureCallback,
- Camera.AutoFocusCallback,
- Camera.PreviewCallback
+public class QtCameraListener implements Camera.ShutterCallback,
+ Camera.PictureCallback,
+ Camera.AutoFocusCallback,
+ Camera.PreviewCallback
{
private int m_cameraId = -1;
- private Camera m_camera = null;
- private byte[] m_cameraPreviewFirstBuffer = null;
- private byte[] m_cameraPreviewSecondBuffer = null;
- private int m_actualPreviewBuffer = 0;
+ private byte[][] m_cameraPreviewBuffer = null;
+ private volatile int m_actualPreviewBuffer = 0;
private final ReentrantLock m_buffersLock = new ReentrantLock();
- private boolean m_isReleased = false;
private boolean m_fetchEachFrame = false;
private static final String TAG = "Qt Camera";
- private QtCamera(int id, Camera cam)
+ private QtCameraListener(int id)
{
m_cameraId = id;
- m_camera = cam;
}
- public static QtCamera open(int cameraId)
+ public void preparePreviewBuffer(Camera camera)
{
- try {
- Camera cam = Camera.open(cameraId);
- return new QtCamera(cameraId, cam);
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- return null;
- }
-
- public Camera.Parameters getParameters()
- {
- return m_camera.getParameters();
- }
-
- public void lock()
- {
- try {
- m_camera.lock();
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- }
-
- public void unlock()
- {
- try {
- m_camera.unlock();
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- }
-
- public void release()
- {
- m_isReleased = true;
- m_camera.release();
- }
-
- public void reconnect()
- {
- try {
- m_camera.reconnect();
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- }
-
- public void setDisplayOrientation(int degrees)
- {
- m_camera.setDisplayOrientation(degrees);
- }
-
- public void setParameters(Camera.Parameters params)
- {
- try {
- m_camera.setParameters(params);
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- }
-
- public void setPreviewTexture(SurfaceTexture surfaceTexture)
- {
- try {
- m_camera.setPreviewTexture(surfaceTexture);
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
- }
-
- public void fetchEachFrame(boolean fetch)
- {
- m_fetchEachFrame = fetch;
- }
-
- public void startPreview()
- {
- Camera.Size previewSize = m_camera.getParameters().getPreviewSize();
- double bytesPerPixel = ImageFormat.getBitsPerPixel(m_camera.getParameters().getPreviewFormat()) / 8.0;
+ Camera.Size previewSize = camera.getParameters().getPreviewSize();
+ double bytesPerPixel = ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8.0;
int bufferSizeNeeded = (int)Math.ceil(bytesPerPixel*previewSize.width*previewSize.height);
-
- //We need to clear preview buffers queue here, but there is no method to do it
- //Though just resetting preview callback do the trick
- m_camera.setPreviewCallback(null);
m_buffersLock.lock();
- if (m_cameraPreviewFirstBuffer == null || m_cameraPreviewFirstBuffer.length < bufferSizeNeeded)
- m_cameraPreviewFirstBuffer = new byte[bufferSizeNeeded];
- if (m_cameraPreviewSecondBuffer == null || m_cameraPreviewSecondBuffer.length < bufferSizeNeeded)
- m_cameraPreviewSecondBuffer = new byte[bufferSizeNeeded];
- addCallbackBuffer();
+ if (m_cameraPreviewBuffer == null || m_cameraPreviewBuffer[0].length < bufferSizeNeeded)
+ m_cameraPreviewBuffer = new byte[2][bufferSizeNeeded];
m_buffersLock.unlock();
- m_camera.setPreviewCallbackWithBuffer(this);
-
- m_camera.startPreview();
}
- public void stopPreview()
- {
- m_camera.stopPreview();
- }
-
- public void autoFocus()
- {
- m_camera.autoFocus(this);
- }
-
- public void cancelAutoFocus()
- {
- m_camera.cancelAutoFocus();
- }
-
- public void takePicture()
+ public void fetchEachFrame(boolean fetch)
{
- try {
- m_camera.takePicture(this, null, this);
- } catch(Exception e) {
- Log.d(TAG, e.getMessage());
- }
+ m_fetchEachFrame = fetch;
}
public byte[] lockAndFetchPreviewBuffer()
@@ -199,10 +89,7 @@ public class QtCamera implements Camera.ShutterCallback,
//We should reset actualBuffer flag here to make sure we will not use old preview with future captures
byte[] result = null;
m_buffersLock.lock();
- if (m_actualPreviewBuffer == 1)
- result = m_cameraPreviewFirstBuffer;
- else if (m_actualPreviewBuffer == 2)
- result = m_cameraPreviewSecondBuffer;
+ result = m_cameraPreviewBuffer[(m_actualPreviewBuffer == 1) ? 0 : 1];
m_actualPreviewBuffer = 0;
return result;
}
@@ -213,14 +100,9 @@ public class QtCamera implements Camera.ShutterCallback,
m_buffersLock.unlock();
}
- private void addCallbackBuffer()
+ public byte[] callbackBuffer()
{
- if (m_isReleased)
- return;
-
- m_camera.addCallbackBuffer((m_actualPreviewBuffer == 1)
- ? m_cameraPreviewSecondBuffer
- : m_cameraPreviewFirstBuffer);
+ return m_cameraPreviewBuffer[(m_actualPreviewBuffer == 1) ? 1 : 0];
}
@Override
@@ -243,13 +125,13 @@ public class QtCamera implements Camera.ShutterCallback,
if (data != null && m_fetchEachFrame)
notifyFrameFetched(m_cameraId, data);
- if (data == m_cameraPreviewFirstBuffer)
+ if (data == m_cameraPreviewBuffer[0])
m_actualPreviewBuffer = 1;
- else if (data == m_cameraPreviewSecondBuffer)
+ else if (data == m_cameraPreviewBuffer[1])
m_actualPreviewBuffer = 2;
else
m_actualPreviewBuffer = 0;
- addCallbackBuffer();
+ camera.addCallbackBuffer(m_cameraPreviewBuffer[(m_actualPreviewBuffer == 1) ? 1 : 0]);
m_buffersLock.unlock();
}