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 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_FILTERS_FRAME_PROCESSOR_H_ 6 #define MEDIA_FILTERS_FRAME_PROCESSOR_H_ 7 8 #include "base/basictypes.h" 9 #include "base/callback_forward.h" 10 #include "base/time/time.h" 11 #include "media/base/media_export.h" 12 #include "media/base/stream_parser.h" 13 #include "media/filters/frame_processor_base.h" 14 15 namespace media { 16 17 // Helper class that implements Media Source Extension's coded frame processing 18 // algorithm. 19 class MEDIA_EXPORT FrameProcessor : public FrameProcessorBase { 20 public: 21 typedef base::Callback<void(base::TimeDelta)> UpdateDurationCB; 22 explicit FrameProcessor(const UpdateDurationCB& update_duration_cb); 23 virtual ~FrameProcessor(); 24 25 // FrameProcessorBase implementation 26 virtual void SetSequenceMode(bool sequence_mode) OVERRIDE; 27 virtual bool ProcessFrames(const StreamParser::BufferQueue& audio_buffers, 28 const StreamParser::BufferQueue& video_buffers, 29 const StreamParser::TextBufferQueueMap& text_map, 30 base::TimeDelta append_window_start, 31 base::TimeDelta append_window_end, 32 bool* new_media_segment, 33 base::TimeDelta* timestamp_offset) OVERRIDE; 34 35 private: 36 // Helper that processes one frame with the coded frame processing algorithm. 37 // Returns false on error or true on success. 38 bool ProcessFrame(const scoped_refptr<StreamParserBuffer>& frame, 39 base::TimeDelta append_window_start, 40 base::TimeDelta append_window_end, 41 base::TimeDelta* timestamp_offset, 42 bool* new_media_segment); 43 44 // Tracks the MSE coded frame processing variable of same name. It stores the 45 // highest coded frame end timestamp across all coded frames in the current 46 // coded frame group. It is set to 0 when the SourceBuffer object is created 47 // and gets updated by ProcessFrames(). 48 base::TimeDelta group_end_timestamp_; 49 50 UpdateDurationCB update_duration_cb_; 51 52 DISALLOW_COPY_AND_ASSIGN(FrameProcessor); 53 }; 54 55 } // namespace media 56 57 #endif // MEDIA_FILTERS_FRAME_PROCESSOR_H_ 58