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

Unified Diff: chromecast/browser/media/cma_message_filter_host.cc

Issue 1380533002: [Chromecast] Remove use of VIDEO_HOLE (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove obsolete gn dependencies Created 5 years, 3 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 | « chromecast/browser/media/cma_message_filter_host.h ('k') | chromecast/common/media/cma_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromecast/browser/media/cma_message_filter_host.cc
diff --git a/chromecast/browser/media/cma_message_filter_host.cc b/chromecast/browser/media/cma_message_filter_host.cc
index 5503448d82ba488ecb496890d557cdcce90f8757..0a531e71f81766293b68b45319db0ccb67f1c33e 100644
--- a/chromecast/browser/media/cma_message_filter_host.cc
+++ b/chromecast/browser/media/cma_message_filter_host.cc
@@ -24,9 +24,6 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "media/base/bind_to_current_loop.h"
-#include "ui/gfx/geometry/point_f.h"
-#include "ui/gfx/geometry/quad_f.h"
-#include "ui/gfx/geometry/size.h"
namespace chromecast {
namespace media {
@@ -128,174 +125,6 @@ void SetCdmOnUiThread(
browser_cdm_cast));
}
-// TODO(halliwell): remove this and the NotifyExternalSurface path once
-// VIDEO_HOLE is no longer required.
-void EstimateVideoPlaneRect(const gfx::QuadF& quad,
- VideoPlane::Transform* transform,
- RectF* rect) {
- const gfx::PointF& p0 = quad.p1();
- const gfx::PointF& p1 = quad.p2();
- const gfx::PointF& p2 = quad.p3();
- const gfx::PointF& p3 = quad.p4();
-
- float det0 = p0.x() * p1.y() - p1.x() * p0.y();
- float det1 = p1.x() * p2.y() - p2.x() * p1.y();
- float det2 = p2.x() * p3.y() - p3.x() * p2.y();
- float det3 = p3.x() * p0.y() - p0.x() * p3.y();
-
- // Calculate the area of the quad (i.e. moment 0 of the polygon).
- // Note: the area can here be either positive or negative
- // depending on whether the quad is clock wise or counter clock wise.
- float area = 0.5 * (det0 + det1 + det2 + det3);
- if (area == 0.0) {
- // Empty rectangle in that case.
- *transform = VideoPlane::TRANSFORM_NONE;
- *rect = RectF(p0.x(), p0.y(), 0.0, 0.0);
- return;
- }
-
- // Calculate the center of gravity of the polygon
- // (i.e. moment 1 of the polygon).
- float cx = (1.0 / (6.0 * area)) *
- ((p0.x() + p1.x()) * det0 +
- (p1.x() + p2.x()) * det1 +
- (p2.x() + p3.x()) * det2 +
- (p3.x() + p0.x()) * det3);
- float cy = (1.0 / (6.0 * area)) *
- ((p0.y() + p1.y()) * det0 +
- (p1.y() + p2.y()) * det1 +
- (p2.y() + p3.y()) * det2 +
- (p3.y() + p0.y()) * det3);
-
- // For numerical stability, subtract the center of gravity now instead of
- // later doing:
- // mxx -= cx * cx;
- // myy -= cy * cy;
- // mxy -= cx * cy;
- // to get the centered 2nd moments.
- gfx::PointF p0c(p0.x() - cx, p0.y() - cy);
- gfx::PointF p1c(p1.x() - cx, p1.y() - cy);
- gfx::PointF p2c(p2.x() - cx, p2.y() - cy);
- gfx::PointF p3c(p3.x() - cx, p3.y() - cy);
-
- // Calculate the second moments of the polygon.
- float det0c = p0c.x() * p1c.y() - p1c.x() * p0c.y();
- float det1c = p1c.x() * p2c.y() - p2c.x() * p1c.y();
- float det2c = p2c.x() * p3c.y() - p3c.x() * p2c.y();
- float det3c = p3c.x() * p0c.y() - p0c.x() * p3c.y();
- float mxx = (1.0 / (12.0 * area)) *
- ((p0c.x() * p0c.x() + p0c.x() * p1c.x() + p1c.x() * p1c.x()) * det0c +
- (p1c.x() * p1c.x() + p1c.x() * p2c.x() + p2c.x() * p2c.x()) * det1c +
- (p2c.x() * p2c.x() + p2c.x() * p3c.x() + p3c.x() * p3c.x()) * det2c +
- (p3c.x() * p3c.x() + p3c.x() * p0c.x() + p0c.x() * p0c.x()) * det3c);
- float myy = (1.0 / (12.0 * area)) *
- ((p0c.y() * p0c.y() + p0c.y() * p1c.y() + p1c.y() * p1c.y()) * det0c +
- (p1c.y() * p1c.y() + p1c.y() * p2c.y() + p2c.y() * p2c.y()) * det1c +
- (p2c.y() * p2c.y() + p2c.y() * p3c.y() + p3c.y() * p3c.y()) * det2c +
- (p3c.y() * p3c.y() + p3c.y() * p0c.y() + p0c.y() * p0c.y()) * det3c);
-
- // Remark: the 2nd moments of a rotated & centered rectangle are given by:
- // mxx = (1/12) * (h^2 * s^2 + w^2 * c^2)
- // myy = (1/12) * (h^2 * c^2 + w^2 * s^2)
- // mxy = (1/12) * (w^2 - h^2) * c * s
- // where w = width of the original rectangle,
- // h = height of the original rectangle,
- // c = cos(teta) with teta the angle of the rotation,
- // s = sin(teta)
- //
- // For reference, mxy can be calculated from the quad using:
- // float mxy = (1.0 / (24.0 * area)) *
- // ((2.0 * p0c.x() * p0c.y() + p0c.x() * p1c.y() + p1c.x() * p0c.y() +
- // 2.0 * p1c.x() * p1c.y()) * det0c +
- // (2.0 * p1c.x() * p1c.y() + p1c.x() * p2c.y() + p2c.x() * p1c.y() +
- // 2.0 * p2c.x() * p2c.y()) * det1c +
- // (2.0 * p2c.x() * p2c.y() + p2c.x() * p3c.y() + p3c.x() * p2c.y() +
- // 2.0 * p3c.x() * p3c.y()) * det2c +
- // (2.0 * p3c.x() * p3c.y() + p3c.x() * p0c.y() + p0c.x() * p3c.y() +
- // 2.0 * p0c.x() * p0c.y()) * det3c);
-
- // The rotation is assumed to be 0, 90, 180 or 270 degrees, so mxy = 0.0
- // Using this assumption: mxx = (1/12) h^2 or (1/12) w^2 depending on the
- // rotation. Same for myy.
- if (mxx < 0 || myy < 0) {
- // mxx and myy should be positive, only numerical errors can lead to a
- // negative value.
- LOG(WARNING) << "Numerical errors: " << mxx << " " << myy;
- *transform = VideoPlane::TRANSFORM_NONE;
- *rect = RectF(p0.x(), p0.y(), 0.0, 0.0);
- return;
- }
- float size_x = sqrt(12.0 * mxx);
- float size_y = sqrt(12.0 * myy);
-
- // Estimate the parameters of the rotation since teta can only be known
- // modulo 90 degrees. In previous equations, you can always swap w and h
- // and subtract 90 degrees to teta to get the exact same second moment.
- int idx_best = -1;
- float err_best = 0.0;
-
- // First, estimate the rotation angle assuming
- // dist(p0,p1) is equal to |size_x|,
- // dist(p0,p3) is equal to |size_y|.
- gfx::PointF r1(size_x, 0);
- gfx::PointF r2(size_x, size_y);
- gfx::PointF r3(0, size_y);
- for (int k = 0; k < 4; k++) {
- float cur_err =
- fabs((p1.x() - p0.x()) - r1.x()) + fabs((p1.y() - p0.y()) - r1.y()) +
- fabs((p2.x() - p0.x()) - r2.x()) + fabs((p2.y() - p0.y()) - r2.y()) +
- fabs((p3.x() - p0.x()) - r3.x()) + fabs((p3.y() - p0.y()) - r3.y());
- if (idx_best < 0 || cur_err < err_best) {
- idx_best = k;
- err_best = cur_err;
- }
- // 90 degree rotation.
- r1 = gfx::PointF(-r1.y(), r1.x());
- r2 = gfx::PointF(-r2.y(), r2.x());
- r3 = gfx::PointF(-r3.y(), r3.x());
- }
-
- // Then, estimate the rotation angle assuming:
- // dist(p0,p1) is equal to |size_y|,
- // dist(p0,p3) is equal to |size_x|.
- r1 = gfx::PointF(size_y, 0);
- r2 = gfx::PointF(size_y, size_x);
- r3 = gfx::PointF(0, size_x);
- for (int k = 0; k < 4; k++) {
- float cur_err =
- fabs((p1.x() - p0.x()) - r1.x()) + fabs((p1.y() - p0.y()) - r1.y()) +
- fabs((p2.x() - p0.x()) - r2.x()) + fabs((p2.y() - p0.y()) - r2.y()) +
- fabs((p3.x() - p0.x()) - r3.x()) + fabs((p3.y() - p0.y()) - r3.y());
- if (idx_best < 0 || cur_err < err_best) {
- idx_best = k;
- err_best = cur_err;
- }
- // 90 degree rotation.
- r1 = gfx::PointF(-r1.y(), r1.x());
- r2 = gfx::PointF(-r2.y(), r2.x());
- r3 = gfx::PointF(-r3.y(), r3.x());
- }
-
- *transform = static_cast<VideoPlane::Transform>(idx_best);
- *rect = RectF(cx - size_x / 2.0, cy - size_y / 2.0, size_x, size_y);
-}
-
-void UpdateVideoSurfaceHost(int surface_id, const gfx::QuadF& quad) {
- // Currently supports only one video plane.
- CHECK_EQ(surface_id, 0);
-
- // Convert quad into rect + transform
- VideoPlane::Transform transform = VideoPlane::TRANSFORM_NONE;
- RectF rect(0, 0, 0, 0);
- EstimateVideoPlaneRect(quad, &transform, &rect);
-
- VideoPlane* video_plane = CastMediaShlib::GetVideoPlane();
- video_plane->SetGeometry(
- rect,
- VideoPlane::COORDINATE_TYPE_GRAPHICS_PLANE,
- transform);
-}
-
} // namespace
CmaMessageFilterHost::CmaMessageFilterHost(
@@ -337,8 +166,6 @@ bool CmaMessageFilterHost::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(CmaHostMsg_SetPlaybackRate, SetPlaybackRate)
IPC_MESSAGE_HANDLER(CmaHostMsg_SetVolume, SetVolume)
IPC_MESSAGE_HANDLER(CmaHostMsg_NotifyPipeWrite, NotifyPipeWrite)
- IPC_MESSAGE_HANDLER(CmaHostMsg_NotifyExternalSurface,
- NotifyExternalSurface)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -638,17 +465,6 @@ void CmaMessageFilterHost::NotifyPipeWrite(int media_id, TrackId track_id) {
FORWARD_CALL(media_pipeline, NotifyPipeWrite, track_id);
}
-void CmaMessageFilterHost::NotifyExternalSurface(
- int surface_id,
- const gfx::PointF& p0, const gfx::PointF& p1,
- const gfx::PointF& p2, const gfx::PointF& p3) {
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&UpdateVideoSurfaceHost, surface_id,
- gfx::QuadF(p0, p1, p2, p3)));
-}
-
// *** Browser to renderer messages ***
void CmaMessageFilterHost::OnMediaStateChanged(
« no previous file with comments | « chromecast/browser/media/cma_message_filter_host.h ('k') | chromecast/common/media/cma_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698