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"
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
{
23 virtual ~VideoFrameProvider() {}
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
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;
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
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;
63 #endif // CC_LAYERS_VIDEO_FRAME_PROVIDER_H_