NuPlayerSource.h revision 1713460104b86f6be3a5d9993d9ace864d889b2d
15bc087c573c70c84c6a39946457590b42d392a33Andreas Huber/*
25bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * Copyright (C) 2010 The Android Open Source Project
35bc087c573c70c84c6a39946457590b42d392a33Andreas Huber *
45bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
55bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * you may not use this file except in compliance with the License.
65bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * You may obtain a copy of the License at
75bc087c573c70c84c6a39946457590b42d392a33Andreas Huber *
85bc087c573c70c84c6a39946457590b42d392a33Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
95bc087c573c70c84c6a39946457590b42d392a33Andreas Huber *
105bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * Unless required by applicable law or agreed to in writing, software
115bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
125bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * See the License for the specific language governing permissions and
145bc087c573c70c84c6a39946457590b42d392a33Andreas Huber * limitations under the License.
155bc087c573c70c84c6a39946457590b42d392a33Andreas Huber */
165bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
175bc087c573c70c84c6a39946457590b42d392a33Andreas Huber#ifndef NUPLAYER_SOURCE_H_
185bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
195bc087c573c70c84c6a39946457590b42d392a33Andreas Huber#define NUPLAYER_SOURCE_H_
205bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
215bc087c573c70c84c6a39946457590b42d392a33Andreas Huber#include "NuPlayer.h"
225bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
23b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber#include <media/stagefright/foundation/AMessage.h>
24cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar#include <media/stagefright/MetaData.h>
257c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih#include <media/mediaplayer.h>
26cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar#include <utils/Vector.h>
27b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber
285bc087c573c70c84c6a39946457590b42d392a33Andreas Hubernamespace android {
295bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
305bc087c573c70c84c6a39946457590b42d392a33Andreas Huberstruct ABuffer;
319575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huberstruct MetaData;
32cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnarstruct MediaBuffer;
335bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
34b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huberstruct NuPlayer::Source : public AHandler {
35b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber    enum Flags {
369575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        FLAG_CAN_PAUSE          = 1,
379575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        FLAG_CAN_SEEK_BACKWARD  = 2,  // the "10 sec back button"
389575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        FLAG_CAN_SEEK_FORWARD   = 4,  // the "10 sec forward button"
399575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        FLAG_CAN_SEEK           = 8,  // the "seek bar"
409575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        FLAG_DYNAMIC_DURATION   = 16,
41cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar        FLAG_SECURE             = 32,
421713460104b86f6be3a5d9993d9ace864d889b2dChong Zhang        FLAG_PROTECTED          = 64,
439575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber    };
449575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber
459575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber    enum {
469575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        kWhatPrepared,
479575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        kWhatFlagsChanged,
489575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber        kWhatVideoSizeChanged,
492a3cc9a64330dd36e466fe5e1b634146f2d641c1Chong Zhang        kWhatBufferingUpdate,
50b50e83eca302a12f0fced6e7bab1b8617d63deaaRoger Jönsson        kWhatBufferingStart,
51b50e83eca302a12f0fced6e7bab1b8617d63deaaRoger Jönsson        kWhatBufferingEnd,
52dcb89b3b505522efde173c105a851c412f947178Chong Zhang        kWhatSubtitleData,
53d3b0bbb8a37f90fba84eb4e95c58aa0fec6c51e7Robert Shih        kWhatTimedTextData,
5414f7672b5d450ed26a06fd3bb3ce045ea78b11b2Andreas Huber        kWhatQueueDecoderShutdown,
55802768790c131f8237364906fd13981a6bb91193Ronghua Wu        kWhatDrmNoLicense,
56b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber    };
57b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber
58b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    // The provides message is used to notify the player about various
59b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    // events.
60b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    Source(const sp<AMessage> &notify)
61b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber        : mNotify(notify) {
62b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    }
635bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
649575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber    virtual void prepareAsync() = 0;
659575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber
665bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    virtual void start() = 0;
672bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber    virtual void stop() {}
68fba60daf77cc74a13ae3bf4b0e9925dd2ee4470cRoger Jönsson    virtual void pause() {}
69fba60daf77cc74a13ae3bf4b0e9925dd2ee4470cRoger Jönsson    virtual void resume() {}
705bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
7148296b792a8d68358de74141fa80bd5bd84d0307Chong Zhang    // Explicitly disconnect the underling data source
7248296b792a8d68358de74141fa80bd5bd84d0307Chong Zhang    virtual void disconnect() {}
7348296b792a8d68358de74141fa80bd5bd84d0307Chong Zhang
74eac68baf095aeef54865c28b6888924dc6295cbdAndreas Huber    // Returns OK iff more data was available,
75eac68baf095aeef54865c28b6888924dc6295cbdAndreas Huber    // an error or ERROR_END_OF_STREAM if not.
76eac68baf095aeef54865c28b6888924dc6295cbdAndreas Huber    virtual status_t feedMoreTSData() = 0;
775bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
78840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber    virtual sp<AMessage> getFormat(bool audio);
79bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual sp<MetaData> getFormatMeta(bool /* audio */) { return NULL; }
80f0b72b509ab1147a2a0925aced970dd68fd7fa4fMarco Nelissen    virtual sp<MetaData> getFileFormatMeta() const { return NULL; }
815bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
825bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    virtual status_t dequeueAccessUnit(
835bc087c573c70c84c6a39946457590b42d392a33Andreas Huber            bool audio, sp<ABuffer> *accessUnit) = 0;
845bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
8584333e0475bc911adc16417f4ca327c975cf6c36Andreas Huber    virtual status_t getDuration(int64_t * /* durationUs */) {
8643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber        return INVALID_OPERATION;
8743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber    }
8843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber
89404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang    virtual size_t getTrackCount() const {
90404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang        return 0;
91404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang    }
92404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang
93404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang    virtual sp<AMessage> getTrackInfo(size_t /* trackIndex */) const {
94404fced9bfa8fa423ee210a271ca051ffd1bec13Chong Zhang        return NULL;
95dcb89b3b505522efde173c105a851c412f947178Chong Zhang    }
96dcb89b3b505522efde173c105a851c412f947178Chong Zhang
977c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih    virtual ssize_t getSelectedTrack(media_track_type /* type */) const {
987c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih        return INVALID_OPERATION;
997c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih    }
1007c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih
1016ffb1fd67eb8f00f130a6db914ba42a8432aec70Robert Shih    virtual status_t selectTrack(size_t /* trackIndex */, bool /* select */, int64_t /* timeUs*/) {
102dcb89b3b505522efde173c105a851c412f947178Chong Zhang        return INVALID_OPERATION;
103dcb89b3b505522efde173c105a851c412f947178Chong Zhang    }
104dcb89b3b505522efde173c105a851c412f947178Chong Zhang
10584333e0475bc911adc16417f4ca327c975cf6c36Andreas Huber    virtual status_t seekTo(int64_t /* seekTimeUs */) {
10643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber        return INVALID_OPERATION;
10743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber    }
10843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber
109cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar    virtual status_t setBuffers(bool /* audio */, Vector<MediaBuffer *> &/* buffers */) {
110cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar        return INVALID_OPERATION;
111cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar    }
112cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar
113d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber    virtual bool isRealTime() const {
114d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber        return false;
115d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber    }
116d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber
1175bc087c573c70c84c6a39946457590b42d392a33Andreas Huberprotected:
1185bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    virtual ~Source() {}
1195bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
120b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg);
121b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber
122b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    sp<AMessage> dupNotify() const { return mNotify->dup(); }
123b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber
1249575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber    void notifyFlagsChanged(uint32_t flags);
125ced1c2f8f6c422063092f5cc5c675ccdebb2dc10Chong Zhang    void notifyVideoSizeChanged(const sp<AMessage> &format = NULL);
126ec0c597cabf169ca646bcea5faac1bd81ed4484dAndreas Huber    void notifyPrepared(status_t err = OK);
1279575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber
1285bc087c573c70c84c6a39946457590b42d392a33Andreas Huberprivate:
129b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber    sp<AMessage> mNotify;
130b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber
1315bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(Source);
1325bc087c573c70c84c6a39946457590b42d392a33Andreas Huber};
1335bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
1345bc087c573c70c84c6a39946457590b42d392a33Andreas Huber}  // namespace android
1355bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
1365bc087c573c70c84c6a39946457590b42d392a33Andreas Huber#endif  // NUPLAYER_SOURCE_H_
1375bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
138