| Index: cc/video_frame_provider.h | 
| diff --git a/cc/video_frame_provider.h b/cc/video_frame_provider.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..8dd85f5e4edc7cd05b91e3255a7720413d942efa | 
| --- /dev/null | 
| +++ b/cc/video_frame_provider.h | 
| @@ -0,0 +1,59 @@ | 
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CC_VIDEO_FRAME_PROVIDER_H_ | 
| +#define CC_VIDEO_FRAME_PROVIDER_H_ | 
| + | 
| +#include "base/memory/ref_counted.h" | 
| + | 
| +namespace media { | 
| +class VideoFrame; | 
| +} | 
| + | 
| +namespace cc { | 
| + | 
| +// Threading notes: This class may be used in a multi threaded manner. | 
| +// Specifically, the implementation may call getCurrentFrame() or | 
| +// putCurrentFrame() from the compositor thread. If so, the caller is | 
| +// responsible for making sure Client::didReceiveFrame and | 
| +// Client::didUpdateMatrix are only called from this same thread. | 
| +class VideoFrameProvider { | 
| + public: | 
| +  virtual ~VideoFrameProvider() {} | 
| + | 
| +  class Client { | 
| +   public: | 
| +    // Provider will call this method to tell the client to stop using it. | 
| +    // StopUsingProvider() may be called from any thread. The client should | 
| +    // block until it has PutCurrentFrame() any outstanding frames. | 
| +    virtual void StopUsingProvider() = 0; | 
| + | 
| +    // Notifies the provider's client that a call to GetCurrentFrame() will | 
| +    // return new data. | 
| +    virtual void DidReceiveFrame() = 0; | 
| + | 
| +    // Notifies the provider's client of a new UV transform matrix to be used. | 
| +    virtual void DidUpdateMatrix(const float*) = 0; | 
| +  }; | 
| + | 
| +  // May be called from any thread, but there must be some external guarantee | 
| +  // that the provider is not destroyed before this call returns. | 
| +  virtual void SetVideoFrameProviderClient(Client*) = 0; | 
| + | 
| +  // This function places a lock on the current frame and returns a pointer to | 
| +  // it. Calls to this method should always be followed with a call to | 
| +  // PutCurrentFrame(). | 
| +  // Only the current provider client should call this function. | 
| +  virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() = 0; | 
| + | 
| +  // This function releases the lock on the video frame. It should always be | 
| +  // called after GetCurrentFrame(). Frames passed into this method | 
| +  // should no longer be referenced after the call is made. Only the current | 
| +  // provider client should call this function. | 
| +  virtual void PutCurrentFrame(const scoped_refptr<media::VideoFrame>&) = 0; | 
| +}; | 
| + | 
| +}  // namespace cc | 
| + | 
| +#endif  // CC_VIDEO_FRAME_PROVIDER_H_ | 
|  |