Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(615)

Side by Side Diff: remoting/base/decoder.h

Issue 9277001: Replace RectVectors with SkRegions in Decoder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pick nits. Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/base/codec_test.cc ('k') | remoting/base/decoder_row_based.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 REMOTING_BASE_DECODER_H_ 5 #ifndef REMOTING_BASE_DECODER_H_
6 #define REMOTING_BASE_DECODER_H_ 6 #define REMOTING_BASE_DECODER_H_
7 7
8 #include <vector>
9
10 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
11 #include "media/base/video_frame.h" 9 #include "media/base/video_frame.h"
12 #include "remoting/proto/video.pb.h" 10 #include "remoting/proto/video.pb.h"
13 #include "third_party/skia/include/core/SkRect.h" 11 #include "third_party/skia/include/core/SkRegion.h"
14 12
15 namespace remoting { 13 namespace remoting {
16 14
17 typedef std::vector<SkIRect> RectVector;
18
19 // Interface for a decoder that takes a stream of bytes from the network and 15 // Interface for a decoder that takes a stream of bytes from the network and
20 // outputs frames of data. 16 // outputs frames of data.
21 // 17 //
22 // TODO(ajwong): Beef up this documentation once the API stablizes. 18 // TODO(ajwong): Beef up this documentation once the API stablizes.
23 class Decoder { 19 class Decoder {
24 public: 20 public:
25 // DecodeResult is returned from DecodePacket() and indicates current state 21 // DecodeResult is returned from DecodePacket() and indicates current state
26 // of the decoder. DECODE_DONE means that last packet for the frame was 22 // of the decoder. DECODE_DONE means that last packet for the frame was
27 // processed, and the frame can be displayed now. DECODE_IN_PROGRESS 23 // processed, and the frame can be displayed now. DECODE_IN_PROGRESS
28 // indicates that the decoder must receive more data before the frame can be 24 // indicates that the decoder must receive more data before the frame can be
29 // displayed. DECODE_ERROR is returned if there was an error in the stream. 25 // displayed. DECODE_ERROR is returned if there was an error in the stream.
30 enum DecodeResult { 26 enum DecodeResult {
31 DECODE_ERROR = -1, 27 DECODE_ERROR = -1,
32 DECODE_IN_PROGRESS, 28 DECODE_IN_PROGRESS,
33 DECODE_DONE, 29 DECODE_DONE,
34 }; 30 };
35 31
36 Decoder() {} 32 Decoder() {}
37 virtual ~Decoder() {} 33 virtual ~Decoder() {}
38 34
39 // Initializes the decoder to draw into the given |frame|. 35 // Initializes the decoder to draw into the given |frame|.
40 virtual void Initialize(scoped_refptr<media::VideoFrame> frame) = 0; 36 virtual void Initialize(scoped_refptr<media::VideoFrame> frame) = 0;
41 37
42 // Feeds more data into the decoder. 38 // Feeds more data into the decoder.
43 virtual DecodeResult DecodePacket(const VideoPacket* packet) = 0; 39 virtual DecodeResult DecodePacket(const VideoPacket* packet) = 0;
44 40
45 // Returns rects that were updated in the last frame. Can be called only 41 // Returns the region affected by the most recent frame. Can be called only
46 // after DecodePacket returned DECODE_DONE. Caller keeps ownership of 42 // after DecodePacket returned DECODE_DONE. Caller keeps ownership of
47 // |rects|. |rects| is kept empty if whole screen needs to be updated. 43 // |region|.
48 virtual void GetUpdatedRects(RectVector* rects) = 0; 44 virtual void GetUpdatedRegion(SkRegion* region) = 0;
49 45
50 // Reset the decoder to an uninitialized state. Release all references to 46 // Reset the decoder to an uninitialized state. Release all references to
51 // the initialized |frame|. Initialize() must be called before the decoder 47 // the initialized |frame|. Initialize() must be called before the decoder
52 // is used again. 48 // is used again.
53 virtual void Reset() = 0; 49 virtual void Reset() = 0;
54 50
55 // Returns true if decoder is ready to accept data via DecodePacket. 51 // Returns true if decoder is ready to accept data via DecodePacket.
56 virtual bool IsReadyForData() = 0; 52 virtual bool IsReadyForData() = 0;
57 53
58 virtual VideoPacketFormat::Encoding Encoding() = 0; 54 virtual VideoPacketFormat::Encoding Encoding() = 0;
59 55
60 // Set the output dimensions for the decoder. If the dimensions are empty 56 // Set the output dimensions for the decoder. If the dimensions are empty
61 // then the source is rendered without scaling. 57 // then the source is rendered without scaling.
62 // Output dimensions are ignored if the decoder doesn't support scaling. 58 // Output dimensions are ignored if the decoder doesn't support scaling.
63 virtual void SetOutputSize(const SkISize& size) {} 59 virtual void SetOutputSize(const SkISize& size) {}
64 60
65 // Set the clipping rectangle to the decoder. Decoder should respect this and 61 // Set the clipping rectangle to the decoder. Decoder should respect this and
66 // only output changes in this rectangle. The new clipping rectangle will be 62 // only output changes in this rectangle. The new clipping rectangle will be
67 // effective on the next decoded video frame. 63 // effective on the next decoded video frame.
68 //
69 // When scaling is enabled clipping rectangles are ignored.
70 virtual void SetClipRect(const SkIRect& clip_rect) {} 64 virtual void SetClipRect(const SkIRect& clip_rect) {}
71 65
72 // Force decoder to output a video frame with content in |rects| using the 66 // Force decoder to output a frame based on the specified |region| of the
73 // last decoded video frame. |rects| are expressed in video frame rather 67 // most recently decoded video frame. |region| is expressed in video frame
74 // than output coordinates. 68 // rather than output coordinates.
75 virtual void RefreshRects(const RectVector& rects) {} 69 virtual void RefreshRegion(const SkRegion& region) {}
76 }; 70 };
77 71
78 } // namespace remoting 72 } // namespace remoting
79 73
80 #endif // REMOTING_BASE_DECODER_H_ 74 #endif // REMOTING_BASE_DECODER_H_
OLDNEW
« no previous file with comments | « remoting/base/codec_test.cc ('k') | remoting/base/decoder_row_based.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698