Index: media/filters/gpu_video_decoder.cc |
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc |
index 08a1cf1cffe13a4d7d2126a845c8c573b54d3d34..9fdf9dee66f761ad7ed2bca0b54b161b185109e0 100644 |
--- a/media/filters/gpu_video_decoder.cc |
+++ b/media/filters/gpu_video_decoder.cc |
@@ -194,6 +194,15 @@ void GpuVideoDecoder::SetVDA(VideoDecodeAccelerator* vda) { |
weak_vda_ = vda->AsWeakPtr(); |
} |
+void GpuVideoDecoder::DestroyTextures() { |
+ for (std::map<int32, PictureBuffer>::iterator it = |
+ picture_buffers_in_decoder_.begin(); |
+ it != picture_buffers_in_decoder_.end(); ++it) { |
+ factories_->DeleteTexture(it->second.texture_id()); |
+ } |
+ picture_buffers_in_decoder_.clear(); |
+} |
+ |
void GpuVideoDecoder::DestroyVDA() { |
DCHECK(gvd_loop_proxy_->BelongsToCurrentThread()); |
VideoDecodeAccelerator* vda ALLOW_UNUSED = vda_.release(); |
@@ -205,6 +214,8 @@ void GpuVideoDecoder::DestroyVDA() { |
FROM_HERE, |
base::Bind(&VideoDecodeAccelerator::Destroy, weak_vda_), |
base::Bind(&GpuVideoDecoder::Release, this)); |
+ |
+ DestroyTextures(); |
} |
void GpuVideoDecoder::Read(const ReadCB& read_cb) { |
@@ -528,6 +539,8 @@ GpuVideoDecoder::~GpuVideoDecoder() { |
it->second.shm_buffer->shm->Close(); |
} |
bitstream_buffers_in_decoder_.clear(); |
+ |
+ DestroyTextures(); |
} |
void GpuVideoDecoder::EnsureDemuxOrDecode() { |