| 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_
|
|
|