diff options
Diffstat (limited to 'cc/layers/video_frame_provider.h')
-rw-r--r-- | cc/layers/video_frame_provider.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cc/layers/video_frame_provider.h b/cc/layers/video_frame_provider.h new file mode 100644 index 0000000..ecf0024 --- /dev/null +++ b/cc/layers/video_frame_provider.h @@ -0,0 +1,60 @@ +// 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_LAYERS_VIDEO_FRAME_PROVIDER_H_ +#define CC_LAYERS_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* matrix) = 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* 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>& frame) = 0; +}; + +} // namespace cc + +#endif // CC_LAYERS_VIDEO_FRAME_PROVIDER_H_ |