15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#ifndef CONTENT_RENDERER_PEPPER_PPB_VIDEO_DECODER_IMPL_H_ 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#define CONTENT_RENDERER_PEPPER_PPB_VIDEO_DECODER_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "media/video/video_decode_accelerator.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/pp_video_dev.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppp_video_decoder_dev.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppb_video_decoder_shared.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/resource.h" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ppapi/thunk/ppb_video_decoder_dev_api.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_PictureBuffer_Dev; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_VideoBitstreamBuffer_Dev; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class PPB_Graphics3D_Impl; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass PPB_VideoDecoder_Impl : public ppapi::PPB_VideoDecoder_Shared, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public media::VideoDecodeAccelerator::Client { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See PPB_VideoDecoder_Dev::Create. Returns 0 on failure to create & 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialize. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PP_Resource Create(PP_Instance instance, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource graphics_context, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_VideoDecoder_Profile profile); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // PPB_VideoDecoder_Dev_API implementation. 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual int32_t Decode(const PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_refptr<ppapi::TrackedCallback> callback) 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OVERRIDE; 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void AssignPictureBuffers(uint32_t no_of_buffers, 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const PP_PictureBuffer_Dev* buffers) 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReusePictureBuffer(int32_t picture_buffer_id) OVERRIDE; 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual int32_t Flush(scoped_refptr<ppapi::TrackedCallback> callback) 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OVERRIDE; 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual int32_t Reset(scoped_refptr<ppapi::TrackedCallback> callback) 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Destroy() OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // media::VideoDecodeAccelerator::Client implementation. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ProvidePictureBuffers(uint32 requested_num_of_buffers, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& dimensions, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 texture_target) OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DismissPictureBuffer(int32 picture_buffer_id) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PictureReady(const media::Picture& picture) OVERRIDE; 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void NotifyError(media::VideoDecodeAccelerator::Error error) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyFlushDone() OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyEndOfBitstreamBuffer(int32 buffer_id) OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyResetDone() OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 60bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch virtual ~PPB_VideoDecoder_Impl(); 61bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit PPB_VideoDecoder_Impl(PP_Instance instance); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Init(PP_Resource graphics_context, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_VideoDecoder_Profile profile); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // This is NULL before initialization, and after destruction. 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Holds a GpuVideoDecodeAcceleratorHost. 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<media::VideoDecodeAccelerator> decoder_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reference to the plugin requesting this interface. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PPP_VideoDecoder_Dev* ppp_videodecoder_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Impl); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif // CONTENT_RENDERER_PEPPER_PPB_VIDEO_DECODER_IMPL_H_ 79