blob: 34974a60255a1cbf62e5f99df4259542d4741e7d [file] [log] [blame]
// Copyright (c) 2010 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.
#ifndef CHROME_COMMON_GPU_VIDEO_COMMON_H_
#define CHROME_COMMON_GPU_VIDEO_COMMON_H_
#include "base/basictypes.h"
#include "base/shared_memory.h"
#include "chrome/common/common_param_traits.h"
class GpuVideoServiceInfoParam {
public:
// route id for GpuVideoService on GPU process side for this channel.
int32 video_service_route_id_;
// route id for GpuVideoServiceHost on Render process side for this channel.
int32 video_service_host_route_id_;
// TODO(jiesun): define capabilities of video service.
int32 service_available_;
};
class GpuVideoDecoderInfoParam {
public:
// global decoder id.
int32 decoder_id_;
// route id for GpuVideoDecoder on GPU process side for this channel.
int32 decoder_route_id_;
// route id for GpuVideoServiceHost on Render process side for this channel.
int32 decoder_host_route_id_;
};
class GpuVideoDecoderInitParam {
public:
int32 codec_id_;
int32 width_;
int32 height_;
int32 profile_;
int32 level_;
int32 frame_rate_den_;
int32 frame_rate_num_;
int32 aspect_ratio_den_;
int32 aspect_ratio_num_;
};
class GpuVideoDecoderInitDoneParam {
public:
enum SurfaceType {
SurfaceTypeSystemMemory,
SurfaceTypeD3D,
SurfaceTypeEGLImage,
};
enum SurfaceFormat {
SurfaceFormat_YV12,
SurfaceFormat_NV12,
SurfaceFormat_XRGB,
};
int32 success_; // other parameter is only meaningful when this is true.
int32 provides_buffer;
int32 format_;
int32 surface_type_;
int32 stride_;
int32 input_buffer_size_;
int32 output_buffer_size_;
base::SharedMemoryHandle input_buffer_handle_;
// we do not need this if hardware composition is ready.
base::SharedMemoryHandle output_buffer_handle_;
};
class GpuVideoDecoderInputBufferParam {
public:
int64 timestamp_; // In unit of microseconds.
int32 offset_;
int32 size_;
int32 flags_; // miscellaneous flag bit mask
};
class GpuVideoDecoderOutputBufferParam {
public:
int64 timestamp_; // In unit of microseconds.
int64 duration_; // In unit of microseconds.
int32 flags_; // miscellaneous flag bit mask
enum {
kFlagsEndOfStream = 0x00000001,
kFlagsDiscontinuous = 0x00000002,
};
};
class GpuVideoDecoderErrorInfoParam {
public:
int32 error_id; // TODO(jiesun): define enum.
};
// TODO(jiesun): define this.
class GpuVideoDecoderFormatChangeParam {
public:
int32 stride_;
int32 input_buffer_size_;
int32 output_buffer_size_;
base::SharedMemoryHandle input_buffer_handle_;
base::SharedMemoryHandle output_buffer_handle_;
};
namespace IPC {
template <>
struct ParamTraits<GpuVideoServiceInfoParam> {
typedef GpuVideoServiceInfoParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderInfoParam> {
typedef GpuVideoDecoderInfoParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderInitParam> {
typedef GpuVideoDecoderInitParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderInitDoneParam> {
typedef GpuVideoDecoderInitDoneParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderInputBufferParam> {
typedef GpuVideoDecoderInputBufferParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderOutputBufferParam> {
typedef GpuVideoDecoderOutputBufferParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderErrorInfoParam> {
typedef GpuVideoDecoderErrorInfoParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
template <>
struct ParamTraits<GpuVideoDecoderFormatChangeParam> {
typedef GpuVideoDecoderFormatChangeParam param_type;
static void Write(Message* m, const param_type& p);
static bool Read(const Message* m, void** iter, param_type* r);
static void Log(const param_type& p, std::wstring* l);
};
};
#endif // CHROME_COMMON_GPU_VIDEO_COMMON_H_