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

Unified Diff: cc/resources/video_resource_updater.cc

Issue 1154153003: Relanding 1143663007: VideoFrame: Separate Pixel Format from Storage Type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added NV12 support in CrOS Created 5 years, 7 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
« no previous file with comments | « cc/layers/video_layer_impl.cc ('k') | content/browser/media/capture/content_video_capture_device_core.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/video_resource_updater.cc
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
index f09650ef7036759acb84eee80c5323e069e633f1..9665d99359ed64e6da4ccd3bf9d0f36e992f1c8c 100644
--- a/cc/resources/video_resource_updater.cc
+++ b/cc/resources/video_resource_updater.cc
@@ -137,39 +137,15 @@ void VideoResourceUpdater::DeleteResource(ResourceList::iterator resource_it) {
VideoFrameExternalResources VideoResourceUpdater::
CreateExternalResourcesFromVideoFrame(
const scoped_refptr<media::VideoFrame>& video_frame) {
- if (!VerifyFrame(video_frame))
+ if (video_frame->format() == media::VideoFrame::UNKNOWN)
return VideoFrameExternalResources();
- if (video_frame->format() == media::VideoFrame::NATIVE_TEXTURE)
+ if (video_frame->storage_type() == media::VideoFrame::STORAGE_TEXTURE)
return CreateForHardwarePlanes(video_frame);
else
return CreateForSoftwarePlanes(video_frame);
}
-bool VideoResourceUpdater::VerifyFrame(
- const scoped_refptr<media::VideoFrame>& video_frame) {
- switch (video_frame->format()) {
- // Acceptable inputs.
- case media::VideoFrame::YV12:
- case media::VideoFrame::I420:
- case media::VideoFrame::YV12A:
- case media::VideoFrame::YV16:
- case media::VideoFrame::YV24:
- case media::VideoFrame::NATIVE_TEXTURE:
-#if defined(VIDEO_HOLE)
- case media::VideoFrame::HOLE:
-#endif // defined(VIDEO_HOLE)
- case media::VideoFrame::ARGB:
- return true;
-
- // Unacceptable inputs. ¯\(°_o)/¯
- case media::VideoFrame::UNKNOWN:
- case media::VideoFrame::NV12:
- break;
- }
- return false;
-}
-
// For frames that we receive in software format, determine the dimensions of
// each plane in the frame.
static gfx::Size SoftwarePlaneDimension(
@@ -186,10 +162,10 @@ static gfx::Size SoftwarePlaneDimension(
VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes(
const scoped_refptr<media::VideoFrame>& video_frame) {
TRACE_EVENT0("cc", "VideoResourceUpdater::CreateForSoftwarePlanes");
- media::VideoFrame::Format input_frame_format = video_frame->format();
+ const media::VideoFrame::Format input_frame_format = video_frame->format();
#if defined(VIDEO_HOLE)
- if (input_frame_format == media::VideoFrame::HOLE) {
+ if (video_frame->storage_type() == media::VideoFrame::STORAGE_HOLE) {
VideoFrameExternalResources external_resources;
external_resources.type = VideoFrameExternalResources::HOLE;
return external_resources;
@@ -197,16 +173,12 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes(
#endif // defined(VIDEO_HOLE)
// Only YUV software video frames are supported.
- if (input_frame_format != media::VideoFrame::YV12 &&
- input_frame_format != media::VideoFrame::I420 &&
- input_frame_format != media::VideoFrame::YV12A &&
- input_frame_format != media::VideoFrame::YV16 &&
- input_frame_format != media::VideoFrame::YV24) {
- NOTREACHED() << input_frame_format;
+ if (!media::VideoFrame::IsYuvPlanar(input_frame_format)) {
+ NOTREACHED() << media::VideoFrame::FormatToString(input_frame_format);
return VideoFrameExternalResources();
}
- bool software_compositor = context_provider_ == NULL;
+ const bool software_compositor = context_provider_ == NULL;
ResourceFormat output_resource_format =
resource_provider_->yuv_resource_format();
@@ -394,27 +366,23 @@ void VideoResourceUpdater::ReturnTexture(
VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
const scoped_refptr<media::VideoFrame>& video_frame) {
TRACE_EVENT0("cc", "VideoResourceUpdater::CreateForHardwarePlanes");
- media::VideoFrame::Format frame_format = video_frame->format();
-
- DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE);
+ DCHECK_EQ(video_frame->storage_type(), media::VideoFrame::STORAGE_TEXTURE);
if (!context_provider_)
return VideoFrameExternalResources();
- size_t textures =
- media::VideoFrame::NumTextures(video_frame->texture_format());
+ const size_t textures = media::VideoFrame::NumPlanes(video_frame->format());
DCHECK_GE(textures, 1u);
VideoFrameExternalResources external_resources;
- switch (video_frame->texture_format()) {
- case media::VideoFrame::TEXTURE_RGBA:
- case media::VideoFrame::TEXTURE_RGB:
+ switch (video_frame->format()) {
+ case media::VideoFrame::ARGB:
+ case media::VideoFrame::XRGB:
DCHECK_EQ(1u, textures);
switch (video_frame->mailbox_holder(0).texture_target) {
case GL_TEXTURE_2D:
- if (video_frame->texture_format() == media::VideoFrame::TEXTURE_RGB)
- external_resources.type = VideoFrameExternalResources::RGB_RESOURCE;
- else
- external_resources.type =
- VideoFrameExternalResources::RGBA_RESOURCE;
+ external_resources.type =
+ (video_frame->format() == media::VideoFrame::XRGB)
+ ? VideoFrameExternalResources::RGB_RESOURCE
+ : VideoFrameExternalResources::RGBA_RESOURCE;
break;
case GL_TEXTURE_EXTERNAL_OES:
external_resources.type =
@@ -428,9 +396,20 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
return VideoFrameExternalResources();
}
break;
- case media::VideoFrame::TEXTURE_YUV_420:
+ case media::VideoFrame::I420:
external_resources.type = VideoFrameExternalResources::YUV_RESOURCE;
break;
+#if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+ case media::VideoFrame::NV12:
+#endif
+ case media::VideoFrame::YV12:
+ case media::VideoFrame::YV16:
+ case media::VideoFrame::YV24:
+ case media::VideoFrame::YV12A:
+ case media::VideoFrame::UNKNOWN:
+ DLOG(ERROR) << "Unsupported Texture format"
+ << media::VideoFrame::FormatToString(video_frame->format());
+ return external_resources;
}
DCHECK_NE(VideoFrameExternalResources::NONE, external_resources.type);
« no previous file with comments | « cc/layers/video_layer_impl.cc ('k') | content/browser/media/capture/content_video_capture_device_core.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698