summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/StagefrightPlayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayerservice/StagefrightPlayer.cpp')
-rw-r--r--media/libmediaplayerservice/StagefrightPlayer.cpp220
1 files changed, 220 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp
new file mode 100644
index 0000000..619c149
--- /dev/null
+++ b/media/libmediaplayerservice/StagefrightPlayer.cpp
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "StagefrightPlayer"
+#include <utils/Log.h>
+
+#include "StagefrightPlayer.h"
+
+#include "AwesomePlayer.h"
+
+#include <media/Metadata.h>
+#include <media/stagefright/MediaExtractor.h>
+
+namespace android {
+
+StagefrightPlayer::StagefrightPlayer()
+ : mPlayer(new AwesomePlayer) {
+ ALOGV("StagefrightPlayer");
+
+ mPlayer->setListener(this);
+}
+
+StagefrightPlayer::~StagefrightPlayer() {
+ ALOGV("~StagefrightPlayer");
+ reset();
+
+ delete mPlayer;
+ mPlayer = NULL;
+}
+
+status_t StagefrightPlayer::initCheck() {
+ ALOGV("initCheck");
+ return OK;
+}
+
+status_t StagefrightPlayer::setUID(uid_t uid) {
+ mPlayer->setUID(uid);
+
+ return OK;
+}
+
+status_t StagefrightPlayer::setDataSource(
+ const char *url, const KeyedVector<String8, String8> *headers) {
+ return mPlayer->setDataSource(url, headers);
+}
+
+// Warning: The filedescriptor passed into this method will only be valid until
+// the method returns, if you want to keep it, dup it!
+status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) {
+ ALOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
+ return mPlayer->setDataSource(dup(fd), offset, length);
+}
+
+status_t StagefrightPlayer::setDataSource(const sp<IStreamSource> &source) {
+ return mPlayer->setDataSource(source);
+}
+
+status_t StagefrightPlayer::setVideoSurfaceTexture(
+ const sp<ISurfaceTexture> &surfaceTexture) {
+ ALOGV("setVideoSurfaceTexture");
+
+ return mPlayer->setSurfaceTexture(surfaceTexture);
+}
+
+status_t StagefrightPlayer::prepare() {
+ return mPlayer->prepare();
+}
+
+status_t StagefrightPlayer::prepareAsync() {
+ return mPlayer->prepareAsync();
+}
+
+status_t StagefrightPlayer::start() {
+ ALOGV("start");
+
+ return mPlayer->play();
+}
+
+status_t StagefrightPlayer::stop() {
+ ALOGV("stop");
+
+ return pause(); // what's the difference?
+}
+
+status_t StagefrightPlayer::pause() {
+ ALOGV("pause");
+
+ return mPlayer->pause();
+}
+
+bool StagefrightPlayer::isPlaying() {
+ ALOGV("isPlaying");
+ return mPlayer->isPlaying();
+}
+
+status_t StagefrightPlayer::seekTo(int msec) {
+ ALOGV("seekTo %.2f secs", msec / 1E3);
+
+ status_t err = mPlayer->seekTo((int64_t)msec * 1000);
+
+ return err;
+}
+
+status_t StagefrightPlayer::getCurrentPosition(int *msec) {
+ ALOGV("getCurrentPosition");
+
+ int64_t positionUs;
+ status_t err = mPlayer->getPosition(&positionUs);
+
+ if (err != OK) {
+ return err;
+ }
+
+ *msec = (positionUs + 500) / 1000;
+
+ return OK;
+}
+
+status_t StagefrightPlayer::getDuration(int *msec) {
+ ALOGV("getDuration");
+
+ int64_t durationUs;
+ status_t err = mPlayer->getDuration(&durationUs);
+
+ if (err != OK) {
+ *msec = 0;
+ return OK;
+ }
+
+ *msec = (durationUs + 500) / 1000;
+
+ return OK;
+}
+
+status_t StagefrightPlayer::reset() {
+ ALOGV("reset");
+
+ mPlayer->reset();
+
+ return OK;
+}
+
+status_t StagefrightPlayer::setLooping(int loop) {
+ ALOGV("setLooping");
+
+ return mPlayer->setLooping(loop);
+}
+
+player_type StagefrightPlayer::playerType() {
+ ALOGV("playerType");
+ return STAGEFRIGHT_PLAYER;
+}
+
+status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) {
+ ALOGV("invoke()");
+ return mPlayer->invoke(request, reply);
+}
+
+void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) {
+ MediaPlayerInterface::setAudioSink(audioSink);
+
+ mPlayer->setAudioSink(audioSink);
+}
+
+status_t StagefrightPlayer::setParameter(int key, const Parcel &request) {
+ ALOGV("setParameter(key=%d)", key);
+ return mPlayer->setParameter(key, request);
+}
+
+status_t StagefrightPlayer::getParameter(int key, Parcel *reply) {
+ ALOGV("getParameter");
+ return mPlayer->getParameter(key, reply);
+}
+
+status_t StagefrightPlayer::getMetadata(
+ const media::Metadata::Filter& ids, Parcel *records) {
+ using media::Metadata;
+
+ uint32_t flags = mPlayer->flags();
+
+ Metadata metadata(records);
+
+ metadata.appendBool(
+ Metadata::kPauseAvailable,
+ flags & MediaExtractor::CAN_PAUSE);
+
+ metadata.appendBool(
+ Metadata::kSeekBackwardAvailable,
+ flags & MediaExtractor::CAN_SEEK_BACKWARD);
+
+ metadata.appendBool(
+ Metadata::kSeekForwardAvailable,
+ flags & MediaExtractor::CAN_SEEK_FORWARD);
+
+ metadata.appendBool(
+ Metadata::kSeekAvailable,
+ flags & MediaExtractor::CAN_SEEK);
+
+ return OK;
+}
+
+status_t StagefrightPlayer::dump(int fd, const Vector<String16> &args) const {
+ return mPlayer->dump(fd, args);
+}
+
+} // namespace android