| // Copyright 2014 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 MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_ |
| #define MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_ |
| |
| #include <memory> |
| |
| #include "base/time/time.h" |
| |
| namespace gfx { |
| class Size; |
| } |
| |
| namespace media { |
| |
| class VideoFrame; |
| |
| namespace cast { |
| |
| // Interface for an object capable of vending video frames. There is no |
| // requirement for a |VideoFrameFactory| to be concurrent but it must not be |
| // pinned to a specific thread. Indeed, |VideoFrameFactory| implementations are |
| // created by cast on the main cast thread then used by unknown client threads |
| // via the |VideoFrameInput| interface. |
| // |
| // Clients are responsible for serialzing access to a |VideoFrameFactory|. |
| // Generally speaking, it is expected that a client will be using these objects |
| // from a rendering thread or callback (which may execute on different threads |
| // but never concurrently with itself). |
| class VideoFrameFactory { |
| public: |
| virtual ~VideoFrameFactory() {} |
| |
| // Creates a |VideoFrame| suitable for input via |InsertRawVideoFrame|. Frames |
| // obtained in this manner may provide benefits such memory reuse and affinity |
| // with the encoder. The format is guaranteed to be I420 or NV12. |
| // |
| // This can transiently return null if the encoder is not yet initialized or |
| // is re-initializing. Note however that if an encoder does support optimized |
| // frames, its |VideoFrameFactory| must eventually return frames. In practice, |
| // this means that |MaybeCreateFrame| must somehow signal the encoder to |
| // perform whatever initialization is needed to eventually produce frames. |
| virtual scoped_refptr<VideoFrame> MaybeCreateFrame( |
| const gfx::Size& frame_size, base::TimeDelta timestamp) = 0; |
| }; |
| |
| } // namespace cast |
| } // namespace media |
| |
| #endif // MEDIA_CAST_SENDER_VIDEO_FRAME_FACTORY_H_ |