IntSize CCVideoLayerImpl::computeVisibleSize(const WebKit::WebVideoFrame& frame, unsigned plane) { int visibleWidth = videoFrameDimension(frame.width(), plane, frame.format()); int originalWidth = visibleWidth; int visibleHeight = videoFrameDimension(frame.height(), plane, frame.format()); // When there are dead pixels at the edge of the texture, decrease // the frame width by 1 to prevent the rightmost pixels from // interpolating with the dead pixels. if (hasPaddingBytes(frame, plane)) --visibleWidth; // In YV12, every 2x2 square of Y values corresponds to one U and // one V value. If we decrease the width of the UV plane, we must decrease the // width of the Y texture by 2 for proper alignment. This must happen // always, even if Y's texture does not have padding bytes. if (plane == WebKit::WebVideoFrame::yPlane && frame.format() == WebKit::WebVideoFrame::FormatYV12) { if (hasPaddingBytes(frame, WebKit::WebVideoFrame::uPlane)) visibleWidth = originalWidth - 2; } return IntSize(visibleWidth, visibleHeight); }
static bool hasPaddingBytes(const WebKit::WebVideoFrame& frame, unsigned plane) { return frame.stride(plane) > videoFrameDimension(frame.width(), plane, frame.format()); }