Supervised user whitelists: Cleanup
[chromium-blink-merge.git] / media / cast / sender / video_frame_factory.h
blobd55deb7cd32d76eae84c8b2ad601fd0b61f50996
1 // Copyright 2014 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 MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_
6 #define MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "base/time/time.h"
11 namespace gfx {
12 class Size;
15 namespace media {
17 class VideoFrame;
19 namespace cast {
21 // Interface for an object capable of vending video frames. There is no
22 // requirement for a |VideoFrameFactory| to be concurrent but it must not be
23 // pinned to a specific thread. Indeed, |VideoFrameFactory| implementations are
24 // created by cast on the main cast thread then used by unknown client threads
25 // via the |VideoFrameInput| interface.
27 // Clients are responsible for serialzing access to a |VideoFrameFactory|.
28 // Generally speaking, it is expected that a client will be using these objects
29 // from a rendering thread or callback (which may execute on different threads
30 // but never concurrently with itself). Forcing every implementation to take a
31 // lock, even with no contention, is an unnecessary cost, especially on mobile
32 // platforms.
33 class VideoFrameFactory {
34 public:
35 virtual ~VideoFrameFactory() {}
37 // Creates a |VideoFrame| suitable for input via |InsertRawVideoFrame|. Frames
38 // obtained in this manner may provide benefits such memory reuse and affinity
39 // with the encoder. The format is guaranteed to be I420 or NV12.
41 // This can transiently return null if the encoder is not yet initialized or
42 // is re-initializing.
43 virtual scoped_refptr<VideoFrame> MaybeCreateFrame(
44 const gfx::Size& frame_size, base::TimeDelta timestamp) = 0;
47 } // namespace cast
48 } // namespace media
50 #endif // MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_