/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2020. All rights reserved. * Description: NxMediaPlayerManager class implement * Author: NxPlayer software group * Create: 2019-11-21 */ #ifndef ANDROID_MEDIAPLAYER_WRAPPER_H #define ANDROID_MEDIAPLAYER_WRAPPER_H #include #include #include #include #include #include #include #include "NxMediaPlayerInterface.h" #include "MediaPlayerInterface.h" namespace android { class NxMediaPlayerWrapper : public MediaPlayerHWInterface { public: NxMediaPlayerWrapper(); ~NxMediaPlayerWrapper() override; status_t initCheck() override; status_t setUID(uid_t uid) override; status_t setDataSource( const sp &httpService, const char *url, const KeyedVector *headers) override; status_t setDataSource(int fd, int64_t offset, int64_t length) override; status_t setDataSource(const sp &source) override; status_t setVideoSurfaceTexture( const sp &bufferProducer) override; status_t prepare() override; status_t prepareAsync() override; status_t start() override; status_t stop() override; status_t pause() override; bool isPlaying() override; status_t getPlaybackSettings(AudioPlaybackRate *rate) override; status_t setPlaybackSettings(const AudioPlaybackRate &rate) override; status_t getDefaultBufferingSettings(BufferingSettings *buffering); status_t getBufferingSettings(BufferingSettings *buffering) override; status_t setBufferingSettings(const BufferingSettings &buffering) override; status_t seekTo(int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) override; status_t getCurrentPosition(int *msec) override; status_t getDuration(int *msec) override; status_t reset() override; status_t setLooping(int loop) override; status_t setVolume(float leftVolume, float rightVolume) override; player_type playerType() override; status_t invoke(const Parcel &request, Parcel *reply) override; status_t setAudioStreamType(audio_stream_type_t streamType) override; status_t setParameter(int key, const Parcel &request) override; status_t getParameter(int key, Parcel *reply) override; status_t getMetadata( const media::Metadata::Filter &ids, Parcel *records) override; status_t dump(int fd, const Vector &args) const override; status_t getTrackInfo(Parcel *reply); status_t notifyAt(int64_t mediaTimeUs) override; /* 16: uuid length */ status_t prepareDrm(const uint8_t uuid[16], const Vector& drmSessionId) override; status_t releaseDrm() override; /* NxMedia extend */ status_t AddTimeTextSource(const char *filepath, const char *mimeType); int SetTimeTextFlag(int flags); status_t updateVideoPosition(int x, int y, int width, int height); void notifyFunc(int msg, int ext1, int ext2, const Parcel *obj = nullptr); static void notify(void *cookie, int msg, int ext1, int ext2, const Parcel *obj = nullptr); bool isLooping(); private: status_t AttachNewPlayer(NxMediaPlayerInterface *player); NxMediaPlayerInterface *createPlayer(NotifyCallbackF notifyFunc); sp getPlayer(const char *url); void ClearL(); status_t SeekToL(int msec) const; status_t PrepareAsyncL() const; status_t GetDurationL(int *msec) const; status_t ResetL(); status_t setSubSurface(const Parcel &request, Parcel *reply __unused); void disconnectSubNativeWindow(); NxMediaPlayerInterface *m_player; void *m_libHandle; /* loaded library handle */ NxMediaPlayerInterface::CreateNxMediaPlayerInterfaeInstanceFunc m_createInstance; NxMediaPlayerInterface::DestroyNxMediaPlayerInterfaeInstanceFunc m_destroyInstance; Mutex m_lock; MediaPlayerSeekMode m_seekMode; bool m_prepareSync; bool m_loop; sp m_nativeWindow; int m_isSurfaceView; int m_instIdx; /* instance number */ static int g_nextInstIdx; sp m_subWindow; }; }; #endif