Refactor to use closure in call to sort().
[chromium-blink-merge.git] / cc / layers / video_frame_provider.h
blob784d951fe52fcef7e8476b96bd910cc00b82f61f
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.
5 #ifndef CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
6 #define CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
8 #include "base/memory/ref_counted.h"
10 namespace media {
11 class VideoFrame;
14 namespace cc {
16 // Threading notes: This class may be used in a multi threaded manner.
17 // Specifically, the implementation may call GetCurrentFrame() or
18 // PutCurrentFrame() from the compositor thread. If so, the caller is
19 // responsible for making sure Client::DidReceiveFrame() and
20 // Client::DidUpdateMatrix() are only called from this same thread.
21 class VideoFrameProvider {
22 public:
23 virtual ~VideoFrameProvider() {}
25 class Client {
26 public:
27 // Provider will call this method to tell the client to stop using it.
28 // StopUsingProvider() may be called from any thread. The client should
29 // block until it has PutCurrentFrame() any outstanding frames.
30 virtual void StopUsingProvider() = 0;
32 // Notifies the provider's client that a call to GetCurrentFrame() will
33 // return new data.
34 virtual void DidReceiveFrame() = 0;
36 // Notifies the provider's client of a new UV transform matrix to be used.
37 virtual void DidUpdateMatrix(const float* matrix) = 0;
39 protected:
40 virtual ~Client() {}
43 // May be called from any thread, but there must be some external guarantee
44 // that the provider is not destroyed before this call returns.
45 virtual void SetVideoFrameProviderClient(Client* client) = 0;
47 // This function places a lock on the current frame and returns a pointer to
48 // it. Calls to this method should always be followed with a call to
49 // PutCurrentFrame().
50 // Only the current provider client should call this function.
51 virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() = 0;
53 // This function releases the lock on the video frame. It should always be
54 // called after GetCurrentFrame(). Frames passed into this method
55 // should no longer be referenced after the call is made. Only the current
56 // provider client should call this function.
57 virtual void PutCurrentFrame(
58 const scoped_refptr<media::VideoFrame>& frame) = 0;
61 } // namespace cc
63 #endif // CC_LAYERS_VIDEO_FRAME_PROVIDER_H_