StagefrightPlayer.cpp revision c23f12af0394aa2f6651968a3c8840f1af317aa1
1//#define LOG_NDEBUG 0
2#define LOG_TAG "StagefrightPlayer"
3#include <utils/Log.h>
4
5#include "StagefrightPlayer.h"
6
7#include "AwesomePlayer.h"
8
9namespace android {
10
11StagefrightPlayer::StagefrightPlayer()
12    : mPlayer(new AwesomePlayer) {
13    LOGV("StagefrightPlayer");
14
15    mPlayer->setListener(this);
16}
17
18StagefrightPlayer::~StagefrightPlayer() {
19    LOGV("~StagefrightPlayer");
20    reset();
21
22    delete mPlayer;
23    mPlayer = NULL;
24}
25
26status_t StagefrightPlayer::initCheck() {
27    LOGV("initCheck");
28    return OK;
29}
30
31status_t StagefrightPlayer::setDataSource(
32        const char *url, const KeyedVector<String8, String8> *headers) {
33    LOGI("setDataSource('%s')", url);
34    return mPlayer->setDataSource(url, headers);
35}
36
37// Warning: The filedescriptor passed into this method will only be valid until
38// the method returns, if you want to keep it, dup it!
39status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) {
40    LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
41    return mPlayer->setDataSource(dup(fd), offset, length);
42}
43
44status_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) {
45    LOGV("setVideoSurface");
46
47    mPlayer->setISurface(surface);
48    return OK;
49}
50
51status_t StagefrightPlayer::prepare() {
52    return mPlayer->prepare();
53}
54
55status_t StagefrightPlayer::prepareAsync() {
56    return mPlayer->prepareAsync();
57}
58
59status_t StagefrightPlayer::start() {
60    LOGV("start");
61
62    return mPlayer->play();
63}
64
65status_t StagefrightPlayer::stop() {
66    LOGV("stop");
67
68    return pause();  // what's the difference?
69}
70
71status_t StagefrightPlayer::pause() {
72    LOGV("pause");
73
74    return mPlayer->pause();
75}
76
77bool StagefrightPlayer::isPlaying() {
78    LOGV("isPlaying");
79    return mPlayer->isPlaying();
80}
81
82status_t StagefrightPlayer::seekTo(int msec) {
83    LOGV("seekTo");
84
85    status_t err = mPlayer->seekTo((int64_t)msec * 1000);
86
87    return err;
88}
89
90status_t StagefrightPlayer::getCurrentPosition(int *msec) {
91    LOGV("getCurrentPosition");
92
93    int64_t positionUs;
94    status_t err = mPlayer->getPosition(&positionUs);
95
96    if (err != OK) {
97        return err;
98    }
99
100    *msec = (positionUs + 500) / 1000;
101
102    return OK;
103}
104
105status_t StagefrightPlayer::getDuration(int *msec) {
106    LOGV("getDuration");
107
108    int64_t durationUs;
109    status_t err = mPlayer->getDuration(&durationUs);
110
111    if (err != OK) {
112        return err;
113    }
114
115    *msec = (durationUs + 500) / 1000;
116
117    return OK;
118}
119
120status_t StagefrightPlayer::reset() {
121    LOGV("reset");
122
123    mPlayer->reset();
124
125    return OK;
126}
127
128status_t StagefrightPlayer::setLooping(int loop) {
129    LOGV("setLooping");
130
131    return mPlayer->setLooping(loop);
132}
133
134player_type StagefrightPlayer::playerType() {
135    LOGV("playerType");
136    return STAGEFRIGHT_PLAYER;
137}
138
139status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) {
140    return INVALID_OPERATION;
141}
142
143void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) {
144    MediaPlayerInterface::setAudioSink(audioSink);
145
146    mPlayer->setAudioSink(audioSink);
147}
148
149}  // namespace android
150