1 // Copyright 2014 Samsung Electronics Inc. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_TIZEN_MEDIA_PLAYER_BRIDGE_GSTREMEAR_H_
6 #define MEDIA_TIZEN_MEDIA_PLAYER_BRIDGE_GSTREMEAR_H_
9 #include <gst/pbutils/install-plugins.h>
10 #include <gst/pbutils/missing-plugins.h>
12 #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
17 #include "base/memory/scoped_ptr.h"
18 #include "base/memory/weak_ptr.h"
19 #include "base/timer/timer.h"
20 #include "content/public/browser/browser_message_filter.h"
21 #include "media/base/ranges.h"
22 #include "media/base/tizen/media_player_tizen.h"
23 #include "media/base/video_frame.h"
25 #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
26 #include "ui/gl/efl_pixmap.h"
31 class MEDIA_EXPORT MediaPlayerBridgeGstreamer
32 : public MediaPlayerTizen {
34 MediaPlayerBridgeGstreamer(
38 MediaPlayerManager* manager);
39 virtual ~MediaPlayerBridgeGstreamer();
41 // MediaPlayerTizen implementation.
42 virtual void Play() override;
43 virtual void Pause(bool is_media_related_action) override;
44 virtual void SetRate(double rate) override;
45 virtual void Seek(const double time) override;
46 virtual void SetVolume(double volume) override;
47 virtual double GetCurrentTime() override;
48 virtual void Destroy() override;
51 void HandleError(media::MediaPlayerTizen::NetworkState state);
53 void HandleMessage(GstMessage* message);
54 void HandlePluginInstallerResult(GstInstallPluginsReturn result);
55 GstBuffer* PullBuffer();
56 void BufferReady(const GstBuffer* buffer);
57 void PrerollComplete();
59 #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
60 void PlatformSurfaceUpdated();
61 int GetSurfaceID() const;
65 virtual void Release();
68 // |duration_update_timer_| related
69 void OnCurrentTimeUpdateTimerFired();
70 void StartCurrentTimeUpdateTimer();
71 void StopCurrentTimeUpdateTimer();
73 // |Buffering_update_timer_| related
74 void OnBufferingUpdateTimerFired();
75 void StartBufferingUpdateTimer();
76 void StopBufferingUpdateTimer();
79 void OnUpdateStates();
80 void UpdateDuration();
81 void UpdateMediaType();
82 void UpdateSeekState(bool state);
84 void OnPlaybackComplete();
87 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
88 void GetFrameDetails();
89 void ProcessBufferingStats(GstMessage* message);
90 void GetBufferedTimeRanges();
91 bool SeekTo(gint64 position, float rate, GstSeekFlags seekType);
93 GstElement* GetVideoSink();
94 void PrepareForVideoFrame();
96 #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
97 void PrepareForVideoSink();
98 void XWindowIdPrepared(GstMessage*);
99 bool IsXWindowHadleSet(){return pixmap_id_ ? true : false ;}
104 const scoped_refptr<base::MessageLoopProxy> main_loop_;
105 GstElement* gst_playbin_;
106 GstElement* gst_appsink_;
115 double playback_rate_;
117 guint32 video_format_;
120 bool is_live_stream_;
122 bool is_end_reached_ ;
124 bool is_seek_pending_ ;
125 double seek_duration_;
128 bool missing_plugins_;
129 bool is_pixmap_used_;
131 #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
133 scoped_refptr<gfx::EflPixmap> efl_pixmap_;
134 Ecore_X_Damage m_damage;
135 Ecore_Event_Handler* m_damageHandler;
139 base::SharedMemory shared_memory;
140 uint32 shared_memory_size;
141 base::SharedMemoryHandle foreign_memory_handle;
143 base::RepeatingTimer<MediaPlayerBridgeGstreamer> current_time_update_timer_;
144 base::RepeatingTimer<MediaPlayerBridgeGstreamer> buffering_update_timer_;
146 DISALLOW_COPY_AND_ASSIGN(MediaPlayerBridgeGstreamer);
151 #endif // MEDIA_TIZEN_MEDIA_PLAYER_BRIDGE_GSTREMEAR_H_