blob: a841f1fc89cac9aeb1952865936c65c7b0cf5b3a [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Multiply-included message file, hence no include guard here, but see below
// for a much smaller-than-usual include guard section.
#include <stdint.h>
#include "base/unguessable_token.h"
#include "gpu/config/gpu_info.h"
#include "gpu/ipc/common/gpu_param_traits_macros.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/param_traits_macros.h"
#include "media/gpu/ipc/common/media_param_traits.h"
#include "media/video/jpeg_decode_accelerator.h"
#include "media/video/video_decode_accelerator.h"
#include "media/video/video_encode_accelerator.h"
#include "ui/gfx/ipc/gfx_param_traits.h"
#define IPC_MESSAGE_START MediaMsgStart
IPC_STRUCT_BEGIN(AcceleratedJpegDecoderMsg_Decode_Params)
IPC_STRUCT_MEMBER(media::BitstreamBuffer, input_buffer)
IPC_STRUCT_MEMBER(gfx::Size, coded_size)
IPC_STRUCT_MEMBER(base::SharedMemoryHandle, output_video_frame_handle)
IPC_STRUCT_MEMBER(uint32_t, output_buffer_size)
IPC_STRUCT_END()
IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params)
IPC_STRUCT_MEMBER(int32_t, frame_id)
IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
IPC_STRUCT_MEMBER(base::SharedMemoryHandle, buffer_handle)
IPC_STRUCT_MEMBER(uint32_t, buffer_offset)
IPC_STRUCT_MEMBER(uint32_t, buffer_size)
IPC_STRUCT_MEMBER(bool, force_keyframe)
IPC_STRUCT_END()
IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params2)
IPC_STRUCT_MEMBER(int32_t, frame_id)
IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
IPC_STRUCT_MEMBER(std::vector<gfx::GpuMemoryBufferHandle>,
gpu_memory_buffer_handles)
IPC_STRUCT_MEMBER(gfx::Size, size)
IPC_STRUCT_MEMBER(bool, force_keyframe)
IPC_STRUCT_END()
//------------------------------------------------------------------------------
// Utility Messages
// Sent from Renderer to GPU process to request a token identifying the channel.
// These tokens can be used to prove ownership of the channel. The intended use
// case is to share the command buffer with MojoMediaApplication.
IPC_SYNC_MESSAGE_CONTROL0_1(GpuCommandBufferMsg_GetChannelToken,
base::UnguessableToken /* channel_token */)
//------------------------------------------------------------------------------
// Accelerated Video Decoder Messages
// These messages are sent from Renderer process to GPU process.
// Create and initialize a hardware video decoder using the specified route_id.
// Created decoders should be freed with AcceleratedVideoDecoderMsg_Destroy when
// no longer needed.
IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_CreateVideoDecoder,
media::VideoDecodeAccelerator::Config /* config */,
int32_t /* decoder_route_id */,
bool /* succeeded */)
// Set a CDM on the decoder to handle encrypted buffers.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_SetCdm, int32_t /* CDM ID */)
// Send input buffer for decoding.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_Decode, media::BitstreamBuffer)
// Give the texture IDs for the textures the decoder will use for output.
IPC_MESSAGE_ROUTED2(
AcceleratedVideoDecoderMsg_AssignPictureBuffers,
std::vector<int32_t>, /* Picture buffer ID */
std::vector<media::PictureBuffer::TextureIds>) /* Texture ID */
// Send from Renderer process to the GPU process to recycle the given picture
// buffer for further decoding.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_ReusePictureBuffer,
int32_t) /* Picture buffer ID */
// Send flush request to the decoder.
IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Flush)
// Send reset request to the decoder.
IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Reset)
// Send destroy request to the decoder.
IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Destroy)
//------------------------------------------------------------------------------
// Accelerated Video Decoder Host Messages
// These messages are sent from GPU process to Renderer process.
// Inform AcceleratedVideoDecoderHost that AcceleratedVideoDecoder has been
// created.
// Notify the deferred initialization result.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_InitializationComplete,
bool) /* success */
// Accelerated video decoder has consumed input buffer from transfer buffer.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
int32_t) /* Processed buffer ID */
// Allocate video frames for output of the hardware video decoder.
IPC_MESSAGE_ROUTED5(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
int32_t, /* Number of video frames to generate */
media::VideoPixelFormat, /* Picture buffer format */
uint32_t, /* Number of textures per frame */
gfx::Size, /* Requested size of buffer */
uint32_t) /* Texture target */
// Decoder reports that a picture is ready and buffer does not need to be passed
// back to the decoder.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer,
int32_t) /* Picture buffer ID */
// Decoder reports that a picture is ready.
IPC_MESSAGE_ROUTED5(AcceleratedVideoDecoderHostMsg_PictureReady,
int32_t, /* Picture buffer ID */
int32_t, /* Bitstream buffer ID */
gfx::Rect, /* Visible rectangle */
bool, /* Buffer is HW overlay capable */
bool) /* VDA updated picture size */
// Confirm decoder has been flushed.
IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_FlushDone)
// Confirm decoder has been reset.
IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_ResetDone)
// Video decoder has encountered an error.
IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_ErrorNotification,
uint32_t /* Error ID */)
//------------------------------------------------------------------------------
// Accelerated Video Encoder Messages
// These messages are sent from the Renderer process to GPU process.
// Create and initialize a hardware video encoder using the specified route_id.
// Created encoders should be freed with AcceleratedVideoEncoderMsg_Destroy when
// no longer needed.
IPC_SYNC_MESSAGE_ROUTED1_1(GpuCommandBufferMsg_CreateVideoEncoder,
media::CreateVideoEncoderParams,
bool /* succeeded */)
// Queue a video frame to the encoder to encode. |frame_id| will be returned
// by AcceleratedVideoEncoderHostMsg_NotifyInputDone.
IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode,
AcceleratedVideoEncoderMsg_Encode_Params)
// Queue a GpuMemoryBuffer backed video frame to the encoder to encode.
// |frame_id| will be returned by
// AcceleratedVideoEncoderHostMsg_NotifyInputDone.
IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode2,
AcceleratedVideoEncoderMsg_Encode_Params2)
// Queue a buffer to the encoder for use in returning output. |buffer_id| will
// be returned by AcceleratedVideoEncoderHostMsg_BitstreamBufferReady.
IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
int32_t /* buffer_id */,
base::SharedMemoryHandle /* buffer_handle */,
uint32_t /* buffer_size */)
// Request a runtime encoding parameter change.
IPC_MESSAGE_ROUTED2(AcceleratedVideoEncoderMsg_RequestEncodingParametersChange,
uint32_t /* bitrate */,
uint32_t /* framerate */)
//------------------------------------------------------------------------------
// Accelerated Video Encoder Host Messages
// These messages are sent from GPU process to Renderer process.
// Notify renderer of the input/output buffer requirements of the encoder.
IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
uint32_t /* input_count */,
gfx::Size /* input_coded_size */,
uint32_t /* output_buffer_size */)
// Notify the renderer that the encoder has finished using an input buffer.
// There is no congruent entry point in the media::VideoEncodeAccelerator
// interface, in VEA this same done condition is indicated by dropping the
// reference to the media::VideoFrame passed to VEA::Encode().
IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
int32_t /* frame_id */)
// Notify the renderer that an output buffer has been filled with encoded data.
IPC_MESSAGE_ROUTED4(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
int32_t /* bitstream_buffer_id */,
uint32_t /* payload_size */,
bool /* key_frame */,
base::TimeDelta /* timestamp */)
// Report error condition.
IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyError,
media::VideoEncodeAccelerator::Error /* error */)
// Send destroy request to the encoder.
IPC_MESSAGE_ROUTED0(AcceleratedVideoEncoderMsg_Destroy)
//------------------------------------------------------------------------------
// Accelerated JPEG Decoder Messages
// These messages are sent from the Browser process to GPU process.
// Create and initialize a hardware jpeg decoder using the specified route_id.
// Created decoders should be freed with AcceleratedJpegDecoderMsg_Destroy when
// no longer needed.
IPC_SYNC_MESSAGE_CONTROL1_1(GpuChannelMsg_CreateJpegDecoder,
int32_t /* route_id */,
bool /* succeeded */)
// Decode one JPEG image from shared memory |input_buffer_handle| with size
// |input_buffer_size|. The input buffer is associated with |input_buffer_id|
// and the size of JPEG image is |coded_size|. Decoded I420 frame data will
// be put onto shared memory associated with |output_video_frame_handle|
// with size limit |output_buffer_size|.
IPC_MESSAGE_ROUTED1(AcceleratedJpegDecoderMsg_Decode,
AcceleratedJpegDecoderMsg_Decode_Params)
// Send destroy request to the decoder.
IPC_MESSAGE_ROUTED0(AcceleratedJpegDecoderMsg_Destroy)
//------------------------------------------------------------------------------
// Accelerated JPEG Decoder Host Messages
// These messages are sent from the GPU process to Browser process.
//
// Report decode status.
IPC_MESSAGE_ROUTED2(AcceleratedJpegDecoderHostMsg_DecodeAck,
int32_t, /* bitstream_buffer_id */
media::JpegDecodeAccelerator::Error /* error */)