Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: content/common/gpu/media/dxva_video_decode_accelerator_win.h

Issue 1817353002: Fix input frames being dropped when the h.264 DXVA decoder detects a configuration change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/common/gpu/media/dxva_video_decode_accelerator_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_ 5 #ifndef CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_
6 #define CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_ 6 #define CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_
7 7
8 #include <d3d11.h> 8 #include <d3d11.h>
9 #include <d3d9.h> 9 #include <d3d9.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 // from any other. 85 // from any other.
86 class CONTENT_EXPORT DXVAVideoDecodeAccelerator 86 class CONTENT_EXPORT DXVAVideoDecodeAccelerator
87 : public media::VideoDecodeAccelerator { 87 : public media::VideoDecodeAccelerator {
88 public: 88 public:
89 enum State { 89 enum State {
90 kUninitialized, // un-initialized. 90 kUninitialized, // un-initialized.
91 kNormal, // normal playing state. 91 kNormal, // normal playing state.
92 kResetting, // upon received Reset(), before ResetDone() 92 kResetting, // upon received Reset(), before ResetDone()
93 kStopped, // upon output EOS received. 93 kStopped, // upon output EOS received.
94 kFlushing, // upon flush request received. 94 kFlushing, // upon flush request received.
95 kConfigChange, // stream configuration change detected.
95 }; 96 };
96 97
97 // Does not take ownership of |client| which must outlive |*this|. 98 // Does not take ownership of |client| which must outlive |*this|.
98 DXVAVideoDecodeAccelerator( 99 DXVAVideoDecodeAccelerator(
99 const base::Callback<bool(void)>& make_context_current, 100 const base::Callback<bool(void)>& make_context_current,
100 gfx::GLContext* gl_context, 101 gfx::GLContext* gl_context,
101 bool enable_accelerated_vpx_decode); 102 bool enable_accelerated_vpx_decode);
102 ~DXVAVideoDecodeAccelerator() override; 103 ~DXVAVideoDecodeAccelerator() override;
103 104
104 // media::VideoDecodeAccelerator implementation. 105 // media::VideoDecodeAccelerator implementation.
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 // Checks if the resolution, bitrate etc of the stream changed. We do this 299 // Checks if the resolution, bitrate etc of the stream changed. We do this
299 // by keeping track of the SPS/PPS frames and if they change we assume 300 // by keeping track of the SPS/PPS frames and if they change we assume
300 // that the configuration changed. 301 // that the configuration changed.
301 // Returns S_OK or S_FALSE on succcess. 302 // Returns S_OK or S_FALSE on succcess.
302 // The |config_changed| parameter is set to true if we detect a change in the 303 // The |config_changed| parameter is set to true if we detect a change in the
303 // stream. 304 // stream.
304 HRESULT CheckConfigChanged(IMFSample* sample, bool* config_changed); 305 HRESULT CheckConfigChanged(IMFSample* sample, bool* config_changed);
305 306
306 // Called when we detect a stream configuration change. We reinitialize the 307 // Called when we detect a stream configuration change. We reinitialize the
307 // decoder here. 308 // decoder here.
308 void ConfigChanged(const Config& config, 309 void ConfigChanged(const Config& config);
309 const base::win::ScopedComPtr<IMFSample>& input_sample);
310 310
311 // To expose client callbacks from VideoDecodeAccelerator. 311 // To expose client callbacks from VideoDecodeAccelerator.
312 media::VideoDecodeAccelerator::Client* client_; 312 media::VideoDecodeAccelerator::Client* client_;
313 313
314 base::win::ScopedComPtr<IMFTransform> decoder_; 314 base::win::ScopedComPtr<IMFTransform> decoder_;
315 base::win::ScopedComPtr<IMFTransform> video_format_converter_mft_; 315 base::win::ScopedComPtr<IMFTransform> video_format_converter_mft_;
316 316
317 base::win::ScopedComPtr<IDirect3D9Ex> d3d9_; 317 base::win::ScopedComPtr<IDirect3D9Ex> d3d9_;
318 base::win::ScopedComPtr<IDirect3DDevice9Ex> d3d9_device_ex_; 318 base::win::ScopedComPtr<IDirect3DDevice9Ex> d3d9_device_ex_;
319 base::win::ScopedComPtr<IDirect3DDeviceManager9> device_manager_; 319 base::win::ScopedComPtr<IDirect3DDeviceManager9> device_manager_;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 456
457 // Function pointer for the MFCreateDXGIDeviceManager API. 457 // Function pointer for the MFCreateDXGIDeviceManager API.
458 static CreateDXGIDeviceManager create_dxgi_device_manager_; 458 static CreateDXGIDeviceManager create_dxgi_device_manager_;
459 459
460 DISALLOW_COPY_AND_ASSIGN(DXVAVideoDecodeAccelerator); 460 DISALLOW_COPY_AND_ASSIGN(DXVAVideoDecodeAccelerator);
461 }; 461 };
462 462
463 } // namespace content 463 } // namespace content
464 464
465 #endif // CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_ 465 #endif // CONTENT_COMMON_GPU_MEDIA_DXVA_VIDEO_DECODE_ACCELERATOR_H_
OLDNEW
« no previous file with comments | « no previous file | content/common/gpu/media/dxva_video_decode_accelerator_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698