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

Unified Diff: content/common/gpu/media/exynos_video_decode_accelerator.cc

Issue 24762003: Set the texture to cleared in VideoDecodeAccelerator::PictureReady. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/exynos_video_decode_accelerator.cc
diff --git a/content/common/gpu/media/exynos_video_decode_accelerator.cc b/content/common/gpu/media/exynos_video_decode_accelerator.cc
index 68d71293b681189c4abd10e25772774dc2d5e0b9..c52c3489be720ab091fe4f99309ba25d29cc0377 100644
--- a/content/common/gpu/media/exynos_video_decode_accelerator.cc
+++ b/content/common/gpu/media/exynos_video_decode_accelerator.cc
@@ -195,7 +195,8 @@ ExynosVideoDecodeAccelerator::GscOutputRecord::GscOutputRecord()
fd(-1),
egl_image(EGL_NO_IMAGE_KHR),
egl_sync(EGL_NO_SYNC_KHR),
- picture_id(-1) {
+ picture_id(-1),
+ cleared(false) {
}
ExynosVideoDecodeAccelerator::GscOutputRecord::~GscOutputRecord() {
@@ -1052,6 +1053,7 @@ void ExynosVideoDecodeAccelerator::AssignPictureBuffersTask(
DCHECK_EQ(output_record.egl_image, EGL_NO_IMAGE_KHR);
DCHECK_EQ(output_record.egl_sync, EGL_NO_SYNC_KHR);
DCHECK_EQ(output_record.picture_id, -1);
+ DCHECK_EQ(output_record.cleared, false);
PictureBufferArrayRef::PictureBufferRef& buffer =
pic_buffers->picture_buffers[i];
output_record.fd = buffer.egl_image_fd;
@@ -1415,7 +1417,17 @@ void ExynosVideoDecodeAccelerator::DequeueGsc() {
gsc_output_buffer_queued_count_--;
DVLOG(3) << "DequeueGsc(): returning input_id=" << dqbuf.timestamp.tv_sec
<< " as picture_id=" << output_record.picture_id;
- io_message_loop_proxy_->PostTask(FROM_HERE, base::Bind(
+ // If the picture is not cleared, post it to the child thread because it has
+ // to be cleared in the child thread. Otherwise posting it to IO thread to
+ // reduce latency.
piman 2013/09/26 16:50:01 So, if the main (child) thread is busy, this can m
wuchengli 2013/09/26 17:02:48 It's not OK. I cannot think of a solution now... I
wuchengli 2013/09/30 16:11:21 The code is updated to handle the case you mention
+ scoped_refptr<base::MessageLoopProxy> message_loop_proxy;
+ if (output_record.cleared) {
+ message_loop_proxy = io_message_loop_proxy_;
+ } else {
+ message_loop_proxy = child_message_loop_proxy_;
+ output_record.cleared = true;
+ }
+ message_loop_proxy->PostTask(FROM_HERE, base::Bind(
&Client::PictureReady, io_client_, media::Picture(
output_record.picture_id, dqbuf.timestamp.tv_sec)));
decoder_frames_at_client_++;

Powered by Google App Engine
This is Rietveld 408576698