summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaPlayerImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/MediaPlayerImpl.cpp')
-rw-r--r--media/libstagefright/MediaPlayerImpl.cpp72
1 files changed, 25 insertions, 47 deletions
diff --git a/media/libstagefright/MediaPlayerImpl.cpp b/media/libstagefright/MediaPlayerImpl.cpp
index f2e62f5..2d7b628 100644
--- a/media/libstagefright/MediaPlayerImpl.cpp
+++ b/media/libstagefright/MediaPlayerImpl.cpp
@@ -34,32 +34,28 @@
#include <media/stagefright/MediaPlayerImpl.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MmapSource.h>
+#include <media/stagefright/OMXCodec.h>
#include <media/stagefright/OMXDecoder.h>
#include <media/stagefright/ShoutcastSource.h>
#include <media/stagefright/TimeSource.h>
#include <ui/PixelFormat.h>
#include <ui/Surface.h>
+#define USE_OMX_CODEC 1
+
namespace android {
MediaPlayerImpl::MediaPlayerImpl(const char *uri)
: mInitCheck(NO_INIT),
- mExtractor(NULL),
mTimeSource(NULL),
- mAudioSource(NULL),
- mAudioDecoder(NULL),
mAudioPlayer(NULL),
- mVideoSource(NULL),
- mVideoDecoder(NULL),
mVideoWidth(0),
mVideoHeight(0),
mVideoPosition(0),
mDuration(0),
mPlaying(false),
mPaused(false),
- mSeeking(false),
- mFrameSize(0),
- mUseSoftwareColorConversion(false) {
+ mSeeking(false) {
LOGI("MediaPlayerImpl(%s)", uri);
DataSource::RegisterDefaultSniffers();
@@ -78,7 +74,7 @@ MediaPlayerImpl::MediaPlayerImpl(const char *uri)
mVideoDecoder = CameraSource::Create();
#endif
} else {
- DataSource *source = NULL;
+ sp<DataSource> source;
if (!strncasecmp("file://", uri, 7)) {
source = new MmapSource(uri + 7);
} else if (!strncasecmp("http://", uri, 7)) {
@@ -103,22 +99,15 @@ MediaPlayerImpl::MediaPlayerImpl(const char *uri)
MediaPlayerImpl::MediaPlayerImpl(int fd, int64_t offset, int64_t length)
: mInitCheck(NO_INIT),
- mExtractor(NULL),
mTimeSource(NULL),
- mAudioSource(NULL),
- mAudioDecoder(NULL),
mAudioPlayer(NULL),
- mVideoSource(NULL),
- mVideoDecoder(NULL),
mVideoWidth(0),
mVideoHeight(0),
mVideoPosition(0),
mDuration(0),
mPlaying(false),
mPaused(false),
- mSeeking(false),
- mFrameSize(0),
- mUseSoftwareColorConversion(false) {
+ mSeeking(false) {
LOGI("MediaPlayerImpl(%d, %lld, %lld)", fd, offset, length);
DataSource::RegisterDefaultSniffers();
@@ -148,23 +137,6 @@ MediaPlayerImpl::~MediaPlayerImpl() {
stop();
setSurface(NULL);
- LOGV("Shutting down audio.");
- delete mAudioDecoder;
- mAudioDecoder = NULL;
-
- delete mAudioSource;
- mAudioSource = NULL;
-
- LOGV("Shutting down video.");
- delete mVideoDecoder;
- mVideoDecoder = NULL;
-
- delete mVideoSource;
- mVideoSource = NULL;
-
- delete mExtractor;
- mExtractor = NULL;
-
if (mInitCheck == OK) {
mClient.disconnect();
}
@@ -384,12 +356,11 @@ void MediaPlayerImpl::displayOrDiscardFrame(
void MediaPlayerImpl::init() {
if (mExtractor != NULL) {
- int num_tracks;
- assert(mExtractor->countTracks(&num_tracks) == OK);
+ size_t num_tracks = mExtractor->countTracks();
mDuration = 0;
- for (int i = 0; i < num_tracks; ++i) {
+ for (size_t i = 0; i < num_tracks; ++i) {
const sp<MetaData> meta = mExtractor->getTrackMetaData(i);
assert(meta != NULL);
@@ -411,10 +382,7 @@ void MediaPlayerImpl::init() {
continue;
}
- MediaSource *source;
- if (mExtractor->getTrack(i, &source) != OK) {
- continue;
- }
+ sp<MediaSource> source = mExtractor->getTrack(i);
int32_t units, scale;
if (meta->findInt32(kKeyDuration, &units)
@@ -434,17 +402,22 @@ void MediaPlayerImpl::init() {
}
}
-void MediaPlayerImpl::setAudioSource(MediaSource *source) {
+void MediaPlayerImpl::setAudioSource(const sp<MediaSource> &source) {
LOGI("setAudioSource");
mAudioSource = source;
sp<MetaData> meta = source->getFormat();
- mAudioDecoder = OMXDecoder::Create(&mClient, meta);
- mAudioDecoder->setSource(source);
+#if !USE_OMX_CODEC
+ mAudioDecoder = OMXDecoder::Create(
+ &mClient, meta, false /* createEncoder */, source);
+#else
+ mAudioDecoder = OMXCodec::Create(
+ mClient.interface(), meta, false /* createEncoder */, source);
+#endif
}
-void MediaPlayerImpl::setVideoSource(MediaSource *source) {
+void MediaPlayerImpl::setVideoSource(const sp<MediaSource> &source) {
LOGI("setVideoSource");
mVideoSource = source;
@@ -456,8 +429,13 @@ void MediaPlayerImpl::setVideoSource(MediaSource *source) {
success = meta->findInt32(kKeyHeight, &mVideoHeight);
assert(success);
- mVideoDecoder = OMXDecoder::Create(&mClient, meta);
- ((OMXDecoder *)mVideoDecoder)->setSource(source);
+#if !USE_OMX_CODEC
+ mVideoDecoder = OMXDecoder::Create(
+ &mClient, meta, false /* createEncoder */, source);
+#else
+ mVideoDecoder = OMXCodec::Create(
+ mClient.interface(), meta, false /* createEncoder */, source);
+#endif
if (mISurface.get() != NULL || mSurface.get() != NULL) {
depopulateISurface();