diff options
author | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-14 21:59:24 +0200 |
---|---|---|
committer | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-14 21:59:24 +0200 |
commit | d691f5ca2b6749006673e199b1d668a6daa9b990 (patch) | |
tree | eacad24192e1e0c492320e14bdfd7c3c203a01e0 /src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia | |
parent | d415d3256d055ef6fd7dad5c0497ecfaa56ee64d (diff) | |
parent | 150ff6662de1312e3ba9d000895d80dd5805ea5b (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.java | 45 | ||||
-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(); } |