diff options
Diffstat (limited to 'chromium/media/base/android/video_decoder_job.h')
-rw-r--r-- | chromium/media/base/android/video_decoder_job.h | 75 |
1 files changed, 56 insertions, 19 deletions
diff --git a/chromium/media/base/android/video_decoder_job.h b/chromium/media/base/android/video_decoder_job.h index 41c15edc39e..aef2cc53c80 100644 --- a/chromium/media/base/android/video_decoder_job.h +++ b/chromium/media/base/android/video_decoder_job.h @@ -16,37 +16,74 @@ class VideoCodecBridge; // Class for managing video decoding jobs. class VideoDecoderJob : public MediaDecoderJob { public: - virtual ~VideoDecoderJob(); - // Create a new VideoDecoderJob instance. - // |video_codec| - The video format the object needs to decode. - // |is_secure| - Whether secure decoding is required. - // |size| - The natural size of the output frames. - // |surface| - The surface to render the frames to. - // |media_crypto| - Handle to a Java object responsible for decrypting the - // video data. // |request_data_cb| - Callback used to request more data for the decoder. - static VideoDecoderJob* Create(const VideoCodec video_codec, - bool is_secure, - const gfx::Size& size, - jobject surface, - jobject media_crypto, - const base::Closure& request_data_cb); + // |request_resources_cb| - Callback used to request resources. + // |release_resources_cb| - Callback used to release resources. + // |on_demuxer_config_changed_cb| - Callback used to inform the caller that + // demuxer config has changed. + VideoDecoderJob( + const base::Closure& request_data_cb, + const base::Closure& request_resources_cb, + const base::Closure& release_resources_cb, + const base::Closure& on_demuxer_config_changed_cb); + virtual ~VideoDecoderJob(); - private: - VideoDecoderJob(scoped_ptr<VideoCodecBridge> video_codec_bridge, - const base::Closure& request_data_cb); + // Passes a java surface object to the codec. Returns true if the surface + // can be used by the decoder, or false otherwise. + bool SetVideoSurface(gfx::ScopedJavaSurface surface); // MediaDecoderJob implementation. + virtual bool HasStream() const OVERRIDE; + virtual void Flush() OVERRIDE; + virtual void ReleaseDecoderResources() OVERRIDE; + + bool next_video_data_is_iframe() { + return next_video_data_is_iframe_; + } + + int width() const { return width_; } + int height() const { return height_; } + + private: + // MediaDecoderJob implementation. virtual void ReleaseOutputBuffer( int output_buffer_index, size_t size, bool render_output, + base::TimeDelta current_presentation_timestamp, const ReleaseOutputCompletionCallback& callback) OVERRIDE; - virtual bool ComputeTimeToRender() const OVERRIDE; + virtual void UpdateDemuxerConfigs(const DemuxerConfigs& configs) OVERRIDE; + virtual bool IsCodecReconfigureNeeded( + const DemuxerConfigs& configs) const OVERRIDE; + virtual bool AreDemuxerConfigsChanged( + const DemuxerConfigs& configs) const OVERRIDE; + virtual bool CreateMediaCodecBridgeInternal() OVERRIDE; + virtual void CurrentDataConsumed(bool is_config_change) OVERRIDE; + virtual void OnMediaCodecBridgeReleased() OVERRIDE; + + // Returns true if a protected surface is required for video playback. + bool IsProtectedSurfaceRequired(); + + // Video configs from the demuxer. + VideoCodec video_codec_; + int width_; + int height_; + + // The surface object currently owned by the player. + gfx::ScopedJavaSurface surface_; + + // Callbacks to inform the caller about decoder resources change. + base::Closure request_resources_cb_; + base::Closure release_resources_cb_; + + // Track whether the next access unit is an I-frame. The first access + // unit after Flush() and CurrentDataConsumed(true) is guaranteed to be an + // I-frame. + bool next_video_data_is_iframe_; - scoped_ptr<VideoCodecBridge> video_codec_bridge_; + DISALLOW_COPY_AND_ASSIGN(VideoDecoderJob); }; } // namespace media |