1 // Copyright (c) 2012 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 REMOTING_CODEC_VIDEO_DECODER_VERBATIM_H_ 6 #define REMOTING_CODEC_VIDEO_DECODER_VERBATIM_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "remoting/codec/video_decoder.h" 11 12 namespace remoting { 13 14 // Video decoder implementations that decodes video packet encoded by 15 // VideoEncoderVerbatim. It just copies data from incoming packets to the 16 // video frames. 17 class VideoDecoderVerbatim : public VideoDecoder { 18 public: 19 virtual ~VideoDecoderVerbatim(); 20 21 VideoDecoderVerbatim(); 22 23 // VideoDecoder implementation. 24 virtual bool IsReadyForData() OVERRIDE; 25 virtual void Initialize(const SkISize& screen_size) OVERRIDE; 26 virtual DecodeResult DecodePacket(const VideoPacket* packet) OVERRIDE; 27 virtual VideoPacketFormat::Encoding Encoding() OVERRIDE; 28 virtual void Invalidate(const SkISize& view_size, 29 const SkRegion& region) OVERRIDE; 30 virtual void RenderFrame(const SkISize& view_size, 31 const SkIRect& clip_area, 32 uint8* image_buffer, 33 int image_stride, 34 SkRegion* output_region) OVERRIDE; 35 virtual const SkRegion* GetImageShape() OVERRIDE; 36 37 private: 38 enum State { 39 kUninitialized, 40 kReady, 41 kProcessing, 42 kPartitionDone, 43 kDone, 44 kError, 45 }; 46 47 // Helper method. Called from DecodePacket to updated state of the decoder. 48 void UpdateStateForPacket(const VideoPacket* packet); 49 50 // The internal state of the decoder. 51 State state_; 52 53 // Keeps track of the updating rect. 54 SkIRect clip_; 55 56 // The position in the row that we are updating. 57 int row_pos_; 58 59 // The current row in the rect that we are updaing. 60 int row_y_; 61 62 // The region updated that hasn't been copied to the screen yet. 63 SkRegion updated_region_; 64 65 // Size of the remote screen. 66 SkISize screen_size_; 67 68 // The bitmap holding the remote screen bits. 69 scoped_ptr<uint8[]> screen_buffer_; 70 71 DISALLOW_COPY_AND_ASSIGN(VideoDecoderVerbatim); 72 }; 73 74 } // namespace remoting 75 76 #endif // REMOTING_CODEC_VIDEO_DECODER_VERBATIM_H_ 77