StagefrightPlayer.cpp revision bfa6b2d7a1be1832ac40ed90aece1834f720b5c6
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(const char *url) {
32    LOGV("setDataSource('%s')", url);
33    return mPlayer->setDataSource(url);
34}
35
36// Warning: The filedescriptor passed into this method will only be valid until
37// the method returns, if you want to keep it, dup it!
38status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) {
39    LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
40    return mPlayer->setDataSource(dup(fd), offset, length);
41}
42
43status_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) {
44    LOGV("setVideoSurface");
45
46    mPlayer->setISurface(surface);
47    return OK;
48}
49
50status_t StagefrightPlayer::prepare() {
51    LOGV("prepare");
52
53    int32_t width, height;
54    if (mPlayer->getVideoDimensions(&width, &height) != OK) {
55        width = height = 0;
56    }
57
58    sendEvent(MEDIA_SET_VIDEO_SIZE, width, height);
59
60    return OK;
61}
62
63status_t StagefrightPlayer::prepareAsync() {
64    LOGV("prepareAsync");
65
66    status_t err = prepare();
67
68    if (err != OK) {
69        return err;
70    }
71
72    sendEvent(MEDIA_PREPARED);
73
74    return OK;
75}
76
77status_t StagefrightPlayer::start() {
78    LOGV("start");
79
80    return mPlayer->play();
81}
82
83status_t StagefrightPlayer::stop() {
84    LOGV("stop");
85
86    return pause();  // what's the difference?
87}
88
89status_t StagefrightPlayer::pause() {
90    LOGV("pause");
91
92    return mPlayer->pause();
93}
94
95bool StagefrightPlayer::isPlaying() {
96    LOGV("isPlaying");
97    return mPlayer->isPlaying();
98}
99
100status_t StagefrightPlayer::seekTo(int msec) {
101    LOGV("seekTo");
102
103    status_t err = mPlayer->seekTo((int64_t)msec * 1000);
104
105    return err;
106}
107
108status_t StagefrightPlayer::getCurrentPosition(int *msec) {
109    LOGV("getCurrentPosition");
110
111    int64_t positionUs;
112    status_t err = mPlayer->getPosition(&positionUs);
113
114    if (err != OK) {
115        return err;
116    }
117
118    *msec = (positionUs + 500) / 1000;
119
120    return OK;
121}
122
123status_t StagefrightPlayer::getDuration(int *msec) {
124    LOGV("getDuration");
125
126    int64_t durationUs;
127    status_t err = mPlayer->getDuration(&durationUs);
128
129    if (err != OK) {
130        return err;
131    }
132
133    *msec = (durationUs + 500) / 1000;
134
135    return OK;
136}
137
138status_t StagefrightPlayer::reset() {
139    LOGV("reset");
140
141    mPlayer->reset();
142
143    return OK;
144}
145
146status_t StagefrightPlayer::setLooping(int loop) {
147    LOGV("setLooping");
148
149    return mPlayer->setLooping(loop);
150}
151
152player_type StagefrightPlayer::playerType() {
153    LOGV("playerType");
154    return STAGEFRIGHT_PLAYER;
155}
156
157status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) {
158    return INVALID_OPERATION;
159}
160
161void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) {
162    MediaPlayerInterface::setAudioSink(audioSink);
163
164    mPlayer->setAudioSink(audioSink);
165}
166
167}  // namespace android
168