mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
15a91f51ae
- test for bug 1191648 (f9da67e953) - Bug 1257333 - Port test_AudioNodeDevtoolsAPI.html to mochitest-plain so that it can be turned on in e10s mode; r=mrbkap (39cee7850b) - Bug 1079844 - Change various non-js/ files/tests/etc. to refer to detaching of ArrayBuffers rather than neutering. (DOM references to "neutering" of DOM things remain as neutering.) r=bz (3ab68d0a1d) - Bug 1257337 - Port test_AudioParamDevtoolsAPI.html to mochitest-plain so that it can be turned on in e10s mode; r=mrbkap (7f0bc6b0d3) - Bug 1265403 - Support chaining AudioParam automation methods. r=smaug (89ac09e1a4) - Bug 1241096 - Add a better memory reporting system for AudioBuffers. r=erahm (a5058066fa) - Bug 1255655 - Const-ify kCoefficientRgbY. r=jrmuizel. This allows it to be shared between processes. (7e484b4154) - Bug 1232904 - Use channel.asyncOpen2 within dom/media/IdpSandbox.jsm (r=mt) (99c75688db) - Bug 1176941 - Capturing more error info from IdP sandbox, r=jib (fe6e628f16) - Bug 1176941 - Moving console warning to the current window, r=jib (8ce00202a0) - Bug 1258299 - Move RTCIdentityProvider to a dictionary, r=jib,khuey (36699071e3) - Bug 1208371 - Forward declare MediaStreamGraph classes in MediaPipeline.h. r=bwc (2c476da3b1) - Bug 1248154 - Default to 0x0 frame size before receiving any frames. r=pkerr (00357ddee9) - Bug 1262278 - Rename PlanarYCbCrImage::SetData and PlanarYCbCrImage::SetDataNoCopy r=nical (d13934623c) - Bug 1245525: Fix some compiler errors in Moz2D type classes. r=jrmuizel (f3188d1490) - Bug 1256678 - Fall back to loading GDI fonts from system in DrawTargetRecording - r=bas (a584738020) - Bug 1247405 - Track peak texture memory usage r=nical (29df6e1566) - Bug 1251065 - Add prefs for logging the current and peak texture usage r=nical (23c62210cc) - Bug 1231396 - Add a pref to record and print out the number of pixels painted. r=mstange (6179f56806) - Bug 1262753: P5. Pass number of frames rather than the number of bytes. r=gerald (f45286d4e9) - Bug 1242774 - only resolve promise when exist. r=jwwang. (e8de9f5d37) - Bug 1246108 - Don't restart completed audio streams. r=jwwang (738f1780ef) - Bug 1262753: P6. Perform downmixing in DecodeAudioDataSink. r=kinetik (513906273a) - Bug 1262753: P7. Add debugging pref to enable/disable downmixer and resample. r=kinetik (3bdc72fef3) - Bug 1262753: P8. Remove useless assert. r=gerald (075f86cb75) - Bug 1241486 - Allow using pixmaps to share WebGL frames with the basic compositor when it makes sense. r=jgilbert (2bdab0b4f4) - Bug 1245550 - add gfx.use-glx-texture-from-pixmap pref to control whether texture_from_pixmap is used. r=nical (a29c7cf85b) - Bug 1260944 - Fix ANGLE D3D WARP for WebGL. - r=jrmuizel (8bc04a6c86) - Bug 1241003 - ignore AudioData with 0 frames to avoid silence. r=kinetik. (d9b498ccfe) - Bug 1245542 - I suspect AudioData::mAudioData/mFrames are poisoned when sample format doesn't match the metadata. Let's ignore these samples to see if crash volume can be reduced. r=kinetik. (1dcbbbbfc6) - Bug 1259810 - check that D2D1 device creation succeeds and otherwise fall to software backend. r=bas.schouten (0b1a56e488) - Bug 1257288 - Move IntersectMaybeRects() to gfx/2d/Rect.h. r=kats (75740a568d) - Bug 1236043 - Don't inflate empty rects. r=jrmuizel (809dbda3fb) - Bug 913822 - Shutdown I/O time limit for HTTP cache. r=michal (6f3263184b) - Bug 848994 - p1. Refactor Decoder Doctor - r=cpearce (8ae3326424) - Bug 848994 - p2. Detect when WMF is not found - r=cpearce (fb6b98d7bd) - Bug 848994 - p3. Check MediaKeySystem requests - r=cpearce (bf2ba5ea8d) - Bug 848994 - p4. Record GMP diagnostics - r=cpearce (21e750ca24) - Bug 1245789 - Add abstract thread wrapper for the GMP thread. r=gerald (37ee00f86c) - Bug 1250745 - Share GMP processes when doing unencrypted decoding. r=jwwang (c925f991a8) - Bug 1245789 - Use frame size not display size in GMPVideoDecoder. r=kinetik (a4d7abdbef) - Bug 1211812 - Use MozPromise to init mozilla::GMPVideoDecoder. r=jwwang (cc736f1f37) - Bug 1256065. r=gerald (62cdb35926) - Bug 1221825: P2. Ensure frame memory allocation succeeded. r=cpearce (b6fb351b6a) - Bug 1197064 - Don't assume positive audio frame offset in GMPAudioDeceoder. r=jya (6bc23cb4a0)
119 lines
3.2 KiB
C++
119 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "VideoSegment.h"
|
|
|
|
#include "gfx2DGlue.h"
|
|
#include "ImageContainer.h"
|
|
#include "Layers.h"
|
|
#include "mozilla/UniquePtr.h"
|
|
|
|
namespace mozilla {
|
|
|
|
using namespace layers;
|
|
|
|
VideoFrame::VideoFrame(already_AddRefed<Image>& aImage,
|
|
const gfx::IntSize& aIntrinsicSize)
|
|
: mImage(aImage), mIntrinsicSize(aIntrinsicSize), mForceBlack(false),
|
|
mPrincipalHandle(PRINCIPAL_HANDLE_NONE)
|
|
{}
|
|
|
|
VideoFrame::VideoFrame()
|
|
: mIntrinsicSize(0, 0), mForceBlack(false), mPrincipalHandle(PRINCIPAL_HANDLE_NONE)
|
|
{}
|
|
|
|
VideoFrame::~VideoFrame()
|
|
{}
|
|
|
|
void
|
|
VideoFrame::SetNull() {
|
|
mImage = nullptr;
|
|
mIntrinsicSize = gfx::IntSize(0, 0);
|
|
mPrincipalHandle = PRINCIPAL_HANDLE_NONE;
|
|
}
|
|
|
|
void
|
|
VideoFrame::TakeFrom(VideoFrame* aFrame)
|
|
{
|
|
mImage = aFrame->mImage.forget();
|
|
mIntrinsicSize = aFrame->mIntrinsicSize;
|
|
mForceBlack = aFrame->GetForceBlack();
|
|
mPrincipalHandle = aFrame->mPrincipalHandle;
|
|
}
|
|
|
|
/* static */ already_AddRefed<Image>
|
|
VideoFrame::CreateBlackImage(const gfx::IntSize& aSize)
|
|
{
|
|
RefPtr<ImageContainer> container = LayerManager::CreateImageContainer();
|
|
RefPtr<PlanarYCbCrImage> image = container->CreatePlanarYCbCrImage();
|
|
if (!image) {
|
|
MOZ_ASSERT(false);
|
|
return nullptr;
|
|
}
|
|
|
|
int len = ((aSize.width * aSize.height) * 3 / 2);
|
|
|
|
// Generate a black image.
|
|
auto frame = MakeUnique<uint8_t[]>(len);
|
|
int y = aSize.width * aSize.height;
|
|
// Fill Y plane.
|
|
memset(frame.get(), 0x10, y);
|
|
// Fill Cb/Cr planes.
|
|
memset(frame.get() + y, 0x80, (len - y));
|
|
|
|
const uint8_t lumaBpp = 8;
|
|
const uint8_t chromaBpp = 4;
|
|
|
|
layers::PlanarYCbCrData data;
|
|
data.mYChannel = frame.get();
|
|
data.mYSize = gfx::IntSize(aSize.width, aSize.height);
|
|
data.mYStride = (int32_t) (aSize.width * lumaBpp / 8.0);
|
|
data.mCbCrStride = (int32_t) (aSize.width * chromaBpp / 8.0);
|
|
data.mCbChannel = frame.get() + aSize.height * data.mYStride;
|
|
data.mCrChannel = data.mCbChannel + aSize.height * data.mCbCrStride / 2;
|
|
data.mCbCrSize = gfx::IntSize(aSize.width / 2, aSize.height / 2);
|
|
data.mPicX = 0;
|
|
data.mPicY = 0;
|
|
data.mPicSize = gfx::IntSize(aSize.width, aSize.height);
|
|
data.mStereoMode = StereoMode::MONO;
|
|
|
|
// Copies data, so we can free data.
|
|
if (!image->CopyData(data)) {
|
|
MOZ_ASSERT(false);
|
|
return nullptr;
|
|
}
|
|
|
|
return image.forget();
|
|
}
|
|
|
|
VideoChunk::VideoChunk()
|
|
{}
|
|
|
|
VideoChunk::~VideoChunk()
|
|
{}
|
|
|
|
void
|
|
VideoSegment::AppendFrame(already_AddRefed<Image>&& aImage,
|
|
StreamTime aDuration,
|
|
const IntSize& aIntrinsicSize,
|
|
const PrincipalHandle& aPrincipalHandle,
|
|
bool aForceBlack)
|
|
{
|
|
VideoChunk* chunk = AppendChunk(aDuration);
|
|
VideoFrame frame(aImage, aIntrinsicSize);
|
|
frame.SetForceBlack(aForceBlack);
|
|
frame.SetPrincipalHandle(aPrincipalHandle);
|
|
chunk->mFrame.TakeFrom(&frame);
|
|
}
|
|
|
|
VideoSegment::VideoSegment()
|
|
: MediaSegmentBase<VideoSegment, VideoChunk>(VIDEO)
|
|
{}
|
|
|
|
VideoSegment::~VideoSegment()
|
|
{}
|
|
|
|
} // namespace mozilla
|