Commit 168a5024 authored by jamesr's avatar jamesr Committed by Commit bot

Add basic video support to mojo html_viewer

This adds key-system less support to isMediaMIMETypeSupported and mojo
surfaces bindings for YUV quads.

R=acolwell@chromium.org

Review URL: https://codereview.chromium.org/571183002

Cr-Commit-Position: refs/heads/master@{#294874}
parent 003db13b
......@@ -58,8 +58,32 @@ blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMediaMIMEType(
const blink::WebString& mime_type,
const blink::WebString& codecs,
const blink::WebString& key_system) {
NOTIMPLEMENTED();
return IsNotSupported;
const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type);
// Not supporting the container is a flat-out no.
if (!net::IsSupportedMediaMimeType(mime_type_ascii))
return IsNotSupported;
// Mojo does not currently support any key systems.
if (!key_system.isEmpty())
return IsNotSupported;
// Check list of strict codecs to see if it is supported.
if (net::IsStrictMediaMimeType(mime_type_ascii)) {
// Check if the codecs are a perfect match.
std::vector<std::string> strict_codecs;
net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false);
return static_cast<WebMimeRegistry::SupportsType>(
net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs));
}
// If we don't recognize the codec, it's possible we support it.
std::vector<std::string> parsed_codecs;
net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codecs, true);
if (!net::AreSupportedMediaCodecs(parsed_codecs))
return MayBeSupported;
// Otherwise we have a perfect match.
return IsSupported;
}
bool WebMimeRegistryImpl::supportsMediaSourceMIMEType(
......
......@@ -15,6 +15,7 @@
#include "cc/quads/surface_draw_quad.h"
#include "cc/quads/texture_draw_quad.h"
#include "cc/quads/tile_draw_quad.h"
#include "cc/quads/yuv_video_draw_quad.h"
#include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
namespace mojo {
......@@ -36,6 +37,15 @@ ASSERT_ENUM_VALUES_EQUAL(TEXTURE_CONTENT);
ASSERT_ENUM_VALUES_EQUAL(TILED_CONTENT);
ASSERT_ENUM_VALUES_EQUAL(YUV_VIDEO_CONTENT);
COMPILE_ASSERT(
cc::YUVVideoDrawQuad::REC_601 ==
static_cast<cc::YUVVideoDrawQuad::ColorSpace>(YUV_COLOR_SPACE_REC_601),
rec_601_enum_matches);
COMPILE_ASSERT(cc::YUVVideoDrawQuad::REC_601_JPEG ==
static_cast<cc::YUVVideoDrawQuad::ColorSpace>(
YUV_COLOR_SPACE_REC_601_JPEG),
rec_601_jpeg_enum_matches);
namespace {
cc::SharedQuadState* ConvertSharedQuadState(const SharedQuadStatePtr& input,
......@@ -147,6 +157,26 @@ bool ConvertDrawQuad(const QuadPtr& input,
tile_state->swizzle_contents);
break;
}
case MATERIAL_YUV_VIDEO_CONTENT: {
YUVVideoQuadStatePtr& yuv_state = input->yuv_video_quad_state;
if (yuv_state.is_null())
return false;
cc::YUVVideoDrawQuad* yuv_quad =
render_pass->CreateAndAppendDrawQuad<cc::YUVVideoDrawQuad>();
yuv_quad->SetAll(sqs,
input->rect.To<gfx::Rect>(),
input->opaque_rect.To<gfx::Rect>(),
input->visible_rect.To<gfx::Rect>(),
input->needs_blending,
yuv_state->tex_coord_rect.To<gfx::RectF>(),
yuv_state->y_plane_resource_id,
yuv_state->u_plane_resource_id,
yuv_state->v_plane_resource_id,
yuv_state->a_plane_resource_id,
static_cast<cc::YUVVideoDrawQuad::ColorSpace>(
yuv_state->color_space));
break;
}
default:
NOTREACHED() << "Unsupported material " << input->material;
return false;
......@@ -276,6 +306,21 @@ QuadPtr TypeConverter<QuadPtr, cc::DrawQuad>::Convert(
quad->tile_quad_state = tile_state.Pass();
break;
}
case cc::DrawQuad::YUV_VIDEO_CONTENT: {
const cc::YUVVideoDrawQuad* yuv_quad =
cc::YUVVideoDrawQuad::MaterialCast(&input);
YUVVideoQuadStatePtr yuv_state = YUVVideoQuadState::New();
yuv_state->tex_coord_rect = RectF::From(yuv_quad->tex_coord_rect);
yuv_state->y_plane_resource_id = yuv_quad->y_plane_resource_id;
yuv_state->u_plane_resource_id = yuv_quad->u_plane_resource_id;
yuv_state->v_plane_resource_id = yuv_quad->v_plane_resource_id;
yuv_state->a_plane_resource_id = yuv_quad->a_plane_resource_id;
yuv_state->color_space =
static_cast<YUVColorSpace>(yuv_quad->color_space);
quad->yuv_video_quad_state = yuv_state.Pass();
break;
}
default:
NOTREACHED() << "Unsupported material " << input.material;
}
......
......@@ -74,7 +74,19 @@ struct TileQuadState {
struct StreamVideoQuadState {};
struct YUVVideoQuadState {};
enum YUVColorSpace {
REC_601, // SDTV standard with restricted "studio swing" color range.
REC_601_JPEG, // Full color range [0, 255] variant of the above.
};
struct YUVVideoQuadState {
RectF tex_coord_rect;
uint32 y_plane_resource_id;
uint32 u_plane_resource_id;
uint32 v_plane_resource_id;
uint32 a_plane_resource_id;
YUVColorSpace color_space;
};
enum Material {
CHECKERBOARD = 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment