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

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

Issue 185403020: Make VEA client of command buffer; move sync. IPC to VDA/VEA::Initialize() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 7da5b6ec Rebase. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/exynos_video_encode_accelerator.cc
diff --git a/content/common/gpu/media/exynos_video_encode_accelerator.cc b/content/common/gpu/media/exynos_video_encode_accelerator.cc
index c8658f07a8d4bda61b7936e66201a721f1b2e5ac..4f963722814831bd38564461a38faa79ffdbc161 100644
--- a/content/common/gpu/media/exynos_video_encode_accelerator.cc
+++ b/content/common/gpu/media/exynos_video_encode_accelerator.cc
@@ -26,23 +26,20 @@
NotifyError(x); \
} while (0)
-#define IOCTL_OR_ERROR_RETURN(fd, type, arg) \
+#define IOCTL_OR_ERROR_RETURN_VALUE(fd, type, arg, value) \
do { \
if (HANDLE_EINTR(ioctl(fd, type, arg) != 0)) { \
DPLOG(ERROR) << __func__ << "(): ioctl() failed: " << #type; \
NOTIFY_ERROR(kPlatformFailureError); \
- return; \
+ return value; \
} \
} while (0)
-#define IOCTL_OR_ERROR_RETURN_FALSE(fd, type, arg) \
- do { \
- if (HANDLE_EINTR(ioctl(fd, type, arg) != 0)) { \
- DPLOG(ERROR) << __func__ << "(): ioctl() failed: " << #type; \
- NOTIFY_ERROR(kPlatformFailureError); \
- return false; \
- } \
- } while (0)
+#define IOCTL_OR_ERROR_RETURN(fd, type, arg) \
+ IOCTL_OR_ERROR_RETURN_VALUE(fd, type, arg, ((void)0))
+
+#define IOCTL_OR_ERROR_RETURN_FALSE(fd, type, arg) \
+ IOCTL_OR_ERROR_RETURN_VALUE(fd, type, arg, false)
namespace content {
@@ -127,7 +124,7 @@ ExynosVideoEncodeAccelerator::~ExynosVideoEncodeAccelerator() {
}
}
-void ExynosVideoEncodeAccelerator::Initialize(
+bool ExynosVideoEncodeAccelerator::Initialize(
media::VideoFrame::Format input_format,
const gfx::Size& input_visible_size,
media::VideoCodecProfile output_profile,
@@ -159,8 +156,8 @@ void ExynosVideoEncodeAccelerator::Initialize(
input_format_fourcc_ = V4L2_PIX_FMT_YUV420M;
break;
default:
- NOTIFY_ERROR(kInvalidArgumentError);
- return;
+ DLOG(ERROR) << "Initialize(): invalid input_format=" << input_format;
+ return false;
}
if (output_profile >= media::H264PROFILE_MIN &&
@@ -170,8 +167,8 @@ void ExynosVideoEncodeAccelerator::Initialize(
output_profile <= media::VP8PROFILE_MAX) {
output_format_fourcc_ = V4L2_PIX_FMT_VP8;
} else {
- NOTIFY_ERROR(kInvalidArgumentError);
- return;
+ DLOG(ERROR) << "Initialize(): invalid output_profile=" << output_profile;
+ return false;
}
// Open the color conversion device.
@@ -181,8 +178,7 @@ void ExynosVideoEncodeAccelerator::Initialize(
if (gsc_fd_ == -1) {
DPLOG(ERROR) << "Initialize(): could not open GSC device: "
<< kExynosGscDevice;
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
// Capabilities check.
@@ -190,12 +186,14 @@ void ExynosVideoEncodeAccelerator::Initialize(
memset(&caps, 0, sizeof(caps));
const __u32 kCapsRequired = V4L2_CAP_VIDEO_CAPTURE_MPLANE |
V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_STREAMING;
- IOCTL_OR_ERROR_RETURN(gsc_fd_, VIDIOC_QUERYCAP, &caps);
+ if (HANDLE_EINTR(ioctl(gsc_fd_, VIDIOC_QUERYCAP, &caps))) {
+ DPLOG(ERROR) << "Initialize(): ioctl() failed: VIDIOC_QUERYCAP";
+ return false;
+ }
if ((caps.capabilities & kCapsRequired) != kCapsRequired) {
DLOG(ERROR) << "Initialize(): ioctl() failed: VIDIOC_QUERYCAP: "
"caps check failed: 0x" << std::hex << caps.capabilities;
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
// Open the video encoder device.
@@ -205,17 +203,18 @@ void ExynosVideoEncodeAccelerator::Initialize(
if (mfc_fd_ == -1) {
DPLOG(ERROR) << "Initialize(): could not open MFC device: "
<< kExynosMfcDevice;
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
memset(&caps, 0, sizeof(caps));
- IOCTL_OR_ERROR_RETURN(mfc_fd_, VIDIOC_QUERYCAP, &caps);
+ if (HANDLE_EINTR(ioctl(mfc_fd_, VIDIOC_QUERYCAP, &caps))) {
+ DPLOG(ERROR) << "Initialize(): ioctl() failed: VIDIOC_QUERYCAP";
+ return false;
+ }
if ((caps.capabilities & kCapsRequired) != kCapsRequired) {
DLOG(ERROR) << "Initialize(): ioctl() failed: VIDIOC_QUERYCAP: "
"caps check failed: 0x" << std::hex << caps.capabilities;
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
// Create the interrupt fd.
@@ -223,8 +222,7 @@ void ExynosVideoEncodeAccelerator::Initialize(
device_poll_interrupt_fd_ = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
if (device_poll_interrupt_fd_ == -1) {
DPLOG(ERROR) << "Initialize(): eventfd() failed";
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
DVLOG(3)
@@ -235,7 +233,7 @@ void ExynosVideoEncodeAccelerator::Initialize(
<< ", output_visible_size_=" << output_visible_size_.ToString();
if (!CreateGscInputBuffers() || !CreateGscOutputBuffers())
- return;
+ return false;
// MFC setup for encoding is rather particular in ordering:
//
@@ -251,20 +249,18 @@ void ExynosVideoEncodeAccelerator::Initialize(
// a UseOutputBitstreamBuffer() callback.
if (!SetMfcFormats())
- return;
+ return false;
if (!InitMfcControls())
- return;
+ return false;
// VIDIOC_REQBUFS on CAPTURE queue.
if (!CreateMfcOutputBuffers())
- return;
-
+ return false;
if (!encoder_thread_.Start()) {
DLOG(ERROR) << "Initialize(): encoder thread failed to start";
- NOTIFY_ERROR(kPlatformFailureError);
- return;
+ return false;
}
RequestEncodingParametersChange(initial_bitrate, kInitialFramerate);
@@ -272,15 +268,13 @@ void ExynosVideoEncodeAccelerator::Initialize(
SetEncoderState(kInitialized);
child_message_loop_proxy_->PostTask(
- FROM_HERE, base::Bind(&Client::NotifyInitializeDone, client_));
-
- child_message_loop_proxy_->PostTask(
FROM_HERE,
base::Bind(&Client::RequireBitstreamBuffers,
client_,
gsc_input_buffer_map_.size(),
input_allocated_size_,
output_buffer_byte_size_));
+ return true;
}
void ExynosVideoEncodeAccelerator::Encode(
« no previous file with comments | « content/common/gpu/media/exynos_video_encode_accelerator.h ('k') | content/common/gpu/media/gpu_video_decode_accelerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698