If present, rendering will be suppressed until reaching the timestamp. Change-Id: Ic64bdf4225063c5a4d042ea9809960b843a46d19 related-to-bug: 3489454
140 lines
3.6 KiB
C++
140 lines
3.6 KiB
C++
/*
|
|
* Copyright (C) 2010 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.
|
|
*/
|
|
|
|
#ifndef NU_PLAYER_H_
|
|
|
|
#define NU_PLAYER_H_
|
|
|
|
#include <media/MediaPlayerInterface.h>
|
|
#include <media/stagefright/foundation/AHandler.h>
|
|
#include <media/stagefright/NativeWindowWrapper.h>
|
|
#include <gui/SurfaceTextureClient.h>
|
|
#include <surfaceflinger/Surface.h>
|
|
|
|
namespace android {
|
|
|
|
struct ACodec;
|
|
struct MetaData;
|
|
struct NuPlayerDriver;
|
|
|
|
struct NuPlayer : public AHandler {
|
|
NuPlayer();
|
|
|
|
void setDriver(const wp<NuPlayerDriver> &driver);
|
|
|
|
void setDataSource(const sp<IStreamSource> &source);
|
|
|
|
void setDataSource(
|
|
const char *url, const KeyedVector<String8, String8> *headers);
|
|
|
|
void setVideoSurface(const sp<Surface> &surface);
|
|
void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture);
|
|
void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink);
|
|
void start();
|
|
|
|
void pause();
|
|
void resume();
|
|
|
|
// Will notify the driver through "notifyResetComplete" once finished.
|
|
void resetAsync();
|
|
|
|
// Will notify the driver through "notifySeekComplete" once finished.
|
|
void seekToAsync(int64_t seekTimeUs);
|
|
|
|
protected:
|
|
virtual ~NuPlayer();
|
|
|
|
virtual void onMessageReceived(const sp<AMessage> &msg);
|
|
|
|
private:
|
|
struct Decoder;
|
|
struct HTTPLiveSource;
|
|
struct NuPlayerStreamListener;
|
|
struct Renderer;
|
|
struct Source;
|
|
struct StreamingSource;
|
|
|
|
enum {
|
|
kWhatSetDataSource,
|
|
kWhatSetVideoNativeWindow,
|
|
kWhatSetAudioSink,
|
|
kWhatMoreDataQueued,
|
|
kWhatStart,
|
|
kWhatScanSources,
|
|
kWhatVideoNotify,
|
|
kWhatAudioNotify,
|
|
kWhatRendererNotify,
|
|
kWhatReset,
|
|
kWhatSeek,
|
|
kWhatPause,
|
|
kWhatResume,
|
|
};
|
|
|
|
wp<NuPlayerDriver> mDriver;
|
|
sp<Source> mSource;
|
|
sp<NativeWindowWrapper> mNativeWindow;
|
|
sp<MediaPlayerBase::AudioSink> mAudioSink;
|
|
sp<Decoder> mVideoDecoder;
|
|
sp<Decoder> mAudioDecoder;
|
|
sp<Renderer> mRenderer;
|
|
|
|
bool mAudioEOS;
|
|
bool mVideoEOS;
|
|
|
|
bool mScanSourcesPending;
|
|
int32_t mScanSourcesGeneration;
|
|
|
|
enum FlushStatus {
|
|
NONE,
|
|
AWAITING_DISCONTINUITY,
|
|
FLUSHING_DECODER,
|
|
FLUSHING_DECODER_SHUTDOWN,
|
|
SHUTTING_DOWN_DECODER,
|
|
FLUSHED,
|
|
SHUT_DOWN,
|
|
};
|
|
|
|
FlushStatus mFlushingAudio;
|
|
FlushStatus mFlushingVideo;
|
|
bool mResetInProgress;
|
|
bool mResetPostponed;
|
|
|
|
int64_t mSkipRenderingAudioUntilMediaTimeUs;
|
|
int64_t mSkipRenderingVideoUntilMediaTimeUs;
|
|
|
|
status_t instantiateDecoder(bool audio, sp<Decoder> *decoder);
|
|
|
|
status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg);
|
|
void renderBuffer(bool audio, const sp<AMessage> &msg);
|
|
|
|
void notifyListener(int msg, int ext1, int ext2);
|
|
|
|
void finishFlushIfPossible();
|
|
|
|
void flushDecoder(bool audio, bool needShutdown);
|
|
|
|
static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL);
|
|
|
|
void finishReset();
|
|
void postScanSources();
|
|
|
|
DISALLOW_EVIL_CONSTRUCTORS(NuPlayer);
|
|
};
|
|
|
|
} // namespace android
|
|
|
|
#endif // NU_PLAYER_H_
|