| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ | 6 #define CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 // a resolution within the boundaries of the arguments. | 36 // a resolution within the boundaries of the arguments. |
| 37 // Must be called on the main render thread. |frame_callback| is guaranteed to | 37 // Must be called on the main render thread. |frame_callback| is guaranteed to |
| 38 // be released on the main render thread. | 38 // be released on the main render thread. |
| 39 // |source_frame_rate| is used to calculate a prudent interval to check for | 39 // |source_frame_rate| is used to calculate a prudent interval to check for |
| 40 // passing frames and inform of the result via |on_muted_state_callback|. | 40 // passing frames and inform of the result via |on_muted_state_callback|. |
| 41 void AddTrack(const MediaStreamVideoTrack* track, | 41 void AddTrack(const MediaStreamVideoTrack* track, |
| 42 VideoCaptureDeliverFrameCB frame_callback, | 42 VideoCaptureDeliverFrameCB frame_callback, |
| 43 int max_width, int max_height, | 43 int max_width, int max_height, |
| 44 double min_aspect_ratio, | 44 double min_aspect_ratio, |
| 45 double max_aspect_ratio, | 45 double max_aspect_ratio, |
| 46 double max_frame_rate, | 46 double max_frame_rate); |
| 47 double source_frame_rate, | |
| 48 const OnMutedCallback& on_muted_state_callback); | |
| 49 void RemoveTrack(const MediaStreamVideoTrack* track); | 47 void RemoveTrack(const MediaStreamVideoTrack* track); |
| 50 | 48 |
| 51 // Delivers |frame| to all tracks that have registered a callback. | 49 // Delivers |frame| to all tracks that have registered a callback. |
| 52 // Must be called on the IO-thread. | 50 // Must be called on the IO-thread. |
| 53 void DeliverFrameOnIO( | 51 void DeliverFrameOnIO( |
| 54 const scoped_refptr<media::VideoFrame>& frame, | 52 const scoped_refptr<media::VideoFrame>& frame, |
| 55 const media::VideoCaptureFormat& format, | 53 const media::VideoCaptureFormat& format, |
| 56 const base::TimeTicks& estimated_capture_time); | 54 const base::TimeTicks& estimated_capture_time); |
| 57 | 55 |
| 58 const scoped_refptr<base::MessageLoopProxy>& io_message_loop() { | 56 const scoped_refptr<base::MessageLoopProxy>& io_message_loop() { |
| 59 DCHECK(thread_checker_.CalledOnValidThread()); | 57 DCHECK(thread_checker_.CalledOnValidThread()); |
| 60 return io_message_loop_; | 58 return io_message_loop_; |
| 61 } | 59 } |
| 62 | 60 |
| 61 // Start monitor that frames are delivered to this object. I.E, that |
| 62 // |DeliverFrameOnIO| is called with a frame rate of |source_frame_rate|. |
| 63 // |on_muted_callback| is triggered on the main render thread. |
| 64 void StartFrameMonitoring(double source_frame_rate, |
| 65 const OnMutedCallback& on_muted_callback); |
| 66 void StopFrameMonitoring(); |
| 67 |
| 63 private: | 68 private: |
| 64 virtual ~VideoTrackAdapter(); | 69 virtual ~VideoTrackAdapter(); |
| 65 friend class base::RefCountedThreadSafe<VideoTrackAdapter>; | 70 friend class base::RefCountedThreadSafe<VideoTrackAdapter>; |
| 66 | 71 |
| 67 void AddTrackOnIO( | 72 void AddTrackOnIO( |
| 68 const MediaStreamVideoTrack* track, | 73 const MediaStreamVideoTrack* track, |
| 69 VideoCaptureDeliverFrameCB frame_callback, | 74 VideoCaptureDeliverFrameCB frame_callback, |
| 70 const gfx::Size& max_frame_size, | 75 const gfx::Size& max_frame_size, |
| 71 double min_aspect_ratio, | 76 double min_aspect_ratio, |
| 72 double max_aspect_ratio, | 77 double max_aspect_ratio, |
| 73 double max_frame_rate); | 78 double max_frame_rate); |
| 74 void RemoveTrackOnIO(const MediaStreamVideoTrack* track); | 79 void RemoveTrackOnIO(const MediaStreamVideoTrack* track); |
| 75 | 80 |
| 76 void StartTrackMonitoringOnIO( | 81 void StartFrameMonitoringOnIO( |
| 77 const OnMutedCallback& on_muted_state_callback, | 82 const OnMutedCallback& on_muted_state_callback, |
| 78 double source_frame_rate); | 83 double source_frame_rate); |
| 84 void StopFrameMonitoringOnIO(); |
| 79 | 85 |
| 80 // Compare |frame_counter_snapshot| with the current |frame_counter_|, and | 86 // Compare |frame_counter_snapshot| with the current |frame_counter_|, and |
| 81 // inform of the situation (muted, not muted) via |set_muted_state_callback|. | 87 // inform of the situation (muted, not muted) via |set_muted_state_callback|. |
| 82 void CheckFramesReceivedOnIO(const OnMutedCallback& set_muted_state_callback, | 88 void CheckFramesReceivedOnIO(const OnMutedCallback& set_muted_state_callback, |
| 83 uint64 old_frame_counter_snapshot); | 89 uint64 old_frame_counter_snapshot); |
| 84 | 90 |
| 85 // |thread_checker_| is bound to the main render thread. | 91 // |thread_checker_| is bound to the main render thread. |
| 86 base::ThreadChecker thread_checker_; | 92 base::ThreadChecker thread_checker_; |
| 87 | 93 |
| 88 scoped_refptr<base::MessageLoopProxy> io_message_loop_; | 94 scoped_refptr<base::MessageLoopProxy> io_message_loop_; |
| 89 | 95 |
| 90 // |renderer_task_runner_| is used to ensure that | 96 // |renderer_task_runner_| is used to ensure that |
| 91 // VideoCaptureDeliverFrameCB is released on the main render thread. | 97 // VideoCaptureDeliverFrameCB is released on the main render thread. |
| 92 scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_; | 98 scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_; |
| 93 | 99 |
| 94 // VideoFrameResolutionAdapter is an inner class that is created on the main | 100 // VideoFrameResolutionAdapter is an inner class that is created on the main |
| 95 // render thread but operates on the IO-thread. It does the resolution | 101 // render thread but operates on the IO-thread. It does the resolution |
| 96 // adaptation and delivers frames to all registered tracks on the IO-thread. | 102 // adaptation and delivers frames to all registered tracks on the IO-thread. |
| 97 class VideoFrameResolutionAdapter; | 103 class VideoFrameResolutionAdapter; |
| 98 typedef std::vector<scoped_refptr<VideoFrameResolutionAdapter> > | 104 typedef std::vector<scoped_refptr<VideoFrameResolutionAdapter> > |
| 99 FrameAdapters; | 105 FrameAdapters; |
| 100 FrameAdapters adapters_; | 106 FrameAdapters adapters_; |
| 101 | 107 |
| 108 // Set to true if frame monitoring has been started. It is only accessed on |
| 109 // the IO-thread. |
| 110 bool monitoring_frame_rate_; |
| 111 |
| 112 // Keeps track of it frames have been received. It is only accessed on the |
| 113 // IO-thread. |
| 114 bool muted_state_; |
| 115 |
| 102 // Running frame counter, accessed on the IO-thread. | 116 // Running frame counter, accessed on the IO-thread. |
| 103 uint64 frame_counter_; | 117 uint64 frame_counter_; |
| 104 | 118 |
| 105 // Frame rate configured on the video source, accessed on the IO-thread. | 119 // Frame rate configured on the video source, accessed on the IO-thread. |
| 106 float source_frame_rate_; | 120 float source_frame_rate_; |
| 107 | 121 |
| 108 DISALLOW_COPY_AND_ASSIGN(VideoTrackAdapter); | 122 DISALLOW_COPY_AND_ASSIGN(VideoTrackAdapter); |
| 109 }; | 123 }; |
| 110 | 124 |
| 111 } // namespace content | 125 } // namespace content |
| 112 | 126 |
| 113 #endif // CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ | 127 #endif // CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_ |
| OLD | NEW |