// Copyright 2013 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_RENDERERS_GPU_VIDEO_ACCELERATOR_FACTORIES_H_ #define MEDIA_RENDERERS_GPU_VIDEO_ACCELERATOR_FACTORIES_H_ #include #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "gpu/command_buffer/common/mailbox.h" #include "media/base/media_export.h" #include "media/video/video_encode_accelerator.h" namespace base { class SingleThreadTaskRunner; class SharedMemory; } namespace gfx { class Rect; class Size; } namespace media { class VideoDecodeAccelerator; // Helper interface for specifying factories needed to instantiate a hardware // video accelerator. // Threading model: // * The GpuVideoAcceleratorFactories may be constructed on any thread. // * The GpuVideoAcceleratorFactories has an associated message loop, which may // be retrieved as |GetMessageLoop()|. // * All calls to the Factories after construction must be made on its message // loop. class MEDIA_EXPORT GpuVideoAcceleratorFactories : public base::RefCountedThreadSafe { public: // Caller owns returned pointer, but should call Destroy() on it (instead of // directly deleting) for proper destruction, as per the // VideoDecodeAccelerator interface. virtual scoped_ptr CreateVideoDecodeAccelerator() = 0; // Caller owns returned pointer, but should call Destroy() on it (instead of // directly deleting) for proper destruction, as per the // VideoEncodeAccelerator interface. virtual scoped_ptr CreateVideoEncodeAccelerator() = 0; // Allocate & delete native textures. virtual bool CreateTextures(int32 count, const gfx::Size& size, std::vector* texture_ids, std::vector* texture_mailboxes, uint32 texture_target) = 0; virtual void DeleteTexture(uint32 texture_id) = 0; virtual void WaitSyncPoint(uint32 sync_point) = 0; // Allocate & return a shared memory segment. virtual scoped_ptr CreateSharedMemory(size_t size) = 0; // Returns the task runner the video accelerator runs on. virtual scoped_refptr GetTaskRunner() = 0; // Returns the supported codec profiles of video encode accelerator. virtual std::vector GetVideoEncodeAcceleratorSupportedProfiles() = 0; protected: friend class base::RefCountedThreadSafe; virtual ~GpuVideoAcceleratorFactories(); }; } // namespace media #endif // MEDIA_RENDERERS_GPU_VIDEO_ACCELERATOR_FACTORIES_H_