зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to inbound.
This commit is contained in:
Коммит
1adee1da91
|
@ -19,8 +19,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="707630df1b4270eae3dd49b7344c645f32c1b5f4"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="a9e08b91e9cd1f0930f16cfc49ec72f63575d5fe">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
"branch": "",
|
||||
"revision": ""
|
||||
},
|
||||
"revision": "a30074503b9be1198a496632099410f8cebe3773",
|
||||
"revision": "6064a315797a6db79e5ea926a69835b3d72e723b",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="707630df1b4270eae3dd49b7344c645f32c1b5f4"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="8c9191df3c107df4073f3ca63816a1d36c51af5d"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="f1d4d4c6d0e6079b2f7228a7ae849d4608e2c076"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="353d422fcbd0b41b76e1262f0992a832420a7567"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="cf1dcc0704c0c1845f8a0a0b44838f7e0c0362c9"/>
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "VideoUtils.h"
|
||||
#include "prsystem.h"
|
||||
#include "WebMWriter.h"
|
||||
#include "libyuv.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
|
@ -24,6 +25,8 @@ PRLogModuleInfo* gVP8TrackEncoderLog;
|
|||
#define DEFAULT_BITRATE 2500 // in kbit/s
|
||||
#define DEFAULT_ENCODE_FRAMERATE 30
|
||||
|
||||
using namespace mozilla::layers;
|
||||
|
||||
VP8TrackEncoder::VP8TrackEncoder()
|
||||
: VideoTrackEncoder()
|
||||
, mEncodedFrameDuration(0)
|
||||
|
@ -226,15 +229,15 @@ void VP8TrackEncoder::PrepareMutedFrame()
|
|||
CreateMutedFrame(&mMuteFrame);
|
||||
}
|
||||
|
||||
uint32_t yPlanSize = mFrameWidth * mFrameHeight;
|
||||
uint32_t yPlaneSize = mFrameWidth * mFrameHeight;
|
||||
uint32_t halfWidth = (mFrameWidth + 1) / 2;
|
||||
uint32_t halfHeight = (mFrameHeight + 1) / 2;
|
||||
uint32_t uvPlanSize = halfWidth * halfHeight;
|
||||
uint32_t uvPlaneSize = halfWidth * halfHeight;
|
||||
|
||||
MOZ_ASSERT(mMuteFrame.Length() >= (yPlanSize + uvPlanSize));
|
||||
MOZ_ASSERT(mMuteFrame.Length() >= (yPlaneSize + uvPlaneSize * 2));
|
||||
uint8_t *y = mMuteFrame.Elements();
|
||||
uint8_t *cb = mMuteFrame.Elements() + yPlanSize;
|
||||
uint8_t *cr = mMuteFrame.Elements() + yPlanSize + uvPlanSize;
|
||||
uint8_t *cb = mMuteFrame.Elements() + yPlaneSize;
|
||||
uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize;
|
||||
|
||||
mVPXImageWrapper->planes[PLANE_Y] = y;
|
||||
mVPXImageWrapper->planes[PLANE_U] = cb;
|
||||
|
@ -244,12 +247,37 @@ void VP8TrackEncoder::PrepareMutedFrame()
|
|||
mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
|
||||
}
|
||||
|
||||
static bool isYUV420(const PlanarYCbCrImage::Data *aData)
|
||||
{
|
||||
if (aData->mYSize == aData->mCbCrSize * 2) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isYUV422(const PlanarYCbCrImage::Data *aData)
|
||||
{
|
||||
if ((aData->mYSize.width == aData->mCbCrSize.width * 2) &&
|
||||
(aData->mYSize.height == aData->mCbCrSize.height)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isYUV444(const PlanarYCbCrImage::Data *aData)
|
||||
{
|
||||
if (aData->mYSize == aData->mCbCrSize) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
|
||||
{
|
||||
if (aChunk.mFrame.GetForceBlack() || aChunk.IsNull()) {
|
||||
PrepareMutedFrame();
|
||||
} else {
|
||||
layers::Image* img = aChunk.mFrame.GetImage();
|
||||
Image* img = aChunk.mFrame.GetImage();
|
||||
ImageFormat format = img->GetFormat();
|
||||
if (format != ImageFormat::PLANAR_YCBCR) {
|
||||
VP8LOG("Unsupported video format\n");
|
||||
|
@ -257,19 +285,79 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
|
|||
}
|
||||
|
||||
// Cast away constness b/c some of the accessors are non-const
|
||||
layers::PlanarYCbCrImage* yuv =
|
||||
const_cast<layers::PlanarYCbCrImage *>(static_cast<const layers::PlanarYCbCrImage *>(img));
|
||||
PlanarYCbCrImage* yuv =
|
||||
const_cast<PlanarYCbCrImage *>(static_cast<const PlanarYCbCrImage *>(img));
|
||||
// Big-time assumption here that this is all contiguous data coming
|
||||
// from getUserMedia or other sources.
|
||||
MOZ_ASSERT(yuv);
|
||||
const layers::PlanarYCbCrImage::Data *data = yuv->GetData();
|
||||
const PlanarYCbCrImage::Data *data = yuv->GetData();
|
||||
|
||||
mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel;
|
||||
mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel;
|
||||
mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride;
|
||||
if (isYUV420(data) && !data->mCbSkip) { // 420 planar
|
||||
mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel;
|
||||
mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel;
|
||||
mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride;
|
||||
} else {
|
||||
uint32_t yPlaneSize = mFrameWidth * mFrameHeight;
|
||||
uint32_t halfWidth = (mFrameWidth + 1) / 2;
|
||||
uint32_t halfHeight = (mFrameHeight + 1) / 2;
|
||||
uint32_t uvPlaneSize = halfWidth * halfHeight;
|
||||
if (mI420Frame.IsEmpty()) {
|
||||
mI420Frame.SetLength(yPlaneSize + uvPlaneSize * 2);
|
||||
}
|
||||
|
||||
MOZ_ASSERT(mI420Frame.Length() >= (yPlaneSize + uvPlaneSize * 2));
|
||||
uint8_t *y = mI420Frame.Elements();
|
||||
uint8_t *cb = mI420Frame.Elements() + yPlaneSize;
|
||||
uint8_t *cr = mI420Frame.Elements() + yPlaneSize + uvPlaneSize;
|
||||
|
||||
if (isYUV420(data) && data->mCbSkip) {
|
||||
// If mCbSkip is set, we assume it's nv12 or nv21.
|
||||
if (data->mCbChannel < data->mCrChannel) { // nv12
|
||||
libyuv::NV12ToI420(data->mYChannel, data->mYStride,
|
||||
data->mCbChannel, data->mCbCrStride,
|
||||
y, mFrameWidth,
|
||||
cb, halfWidth,
|
||||
cr, halfWidth,
|
||||
mFrameWidth, mFrameHeight);
|
||||
} else { // nv21
|
||||
libyuv::NV21ToI420(data->mYChannel, data->mYStride,
|
||||
data->mCrChannel, data->mCbCrStride,
|
||||
y, mFrameWidth,
|
||||
cb, halfWidth,
|
||||
cr, halfWidth,
|
||||
mFrameWidth, mFrameHeight);
|
||||
}
|
||||
} else if (isYUV444(data) && !data->mCbSkip) {
|
||||
libyuv::I444ToI420(data->mYChannel, data->mYStride,
|
||||
data->mCbChannel, data->mCbCrStride,
|
||||
data->mCrChannel, data->mCbCrStride,
|
||||
y, mFrameWidth,
|
||||
cb, halfWidth,
|
||||
cr, halfWidth,
|
||||
mFrameWidth, mFrameHeight);
|
||||
} else if (isYUV422(data) && !data->mCbSkip) {
|
||||
libyuv::I422ToI420(data->mYChannel, data->mYStride,
|
||||
data->mCbChannel, data->mCbCrStride,
|
||||
data->mCrChannel, data->mCbCrStride,
|
||||
y, mFrameWidth,
|
||||
cb, halfWidth,
|
||||
cr, halfWidth,
|
||||
mFrameWidth, mFrameHeight);
|
||||
} else {
|
||||
VP8LOG("Unsupported planar format\n");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
mVPXImageWrapper->planes[PLANE_Y] = y;
|
||||
mVPXImageWrapper->planes[PLANE_U] = cb;
|
||||
mVPXImageWrapper->planes[PLANE_V] = cr;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth;
|
||||
mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -74,6 +74,9 @@ private:
|
|||
// Muted frame, we only create it once.
|
||||
nsTArray<uint8_t> mMuteFrame;
|
||||
|
||||
// I420 frame, convert the 4:4:4, 4:2:2 to I420.
|
||||
nsTArray<uint8_t> mI420Frame;
|
||||
|
||||
/**
|
||||
* A local segment queue which takes the raw data out from mRawSegment in the
|
||||
* call of GetEncodedTrack(). Since we implement the fixed FPS encoding
|
||||
|
|
|
@ -35,6 +35,7 @@ if CONFIG['MOZ_WEBM_ENCODER']:
|
|||
UNIFIED_SOURCES += ['VorbisTrackEncoder.cpp',
|
||||
'VP8TrackEncoder.cpp',
|
||||
]
|
||||
LOCAL_INCLUDES += ['/media/libyuv/include']
|
||||
|
||||
FAIL_ON_WARNINGS = True
|
||||
|
||||
|
|
|
@ -828,8 +828,10 @@ nsDOMCameraControl::AutoFocus(CameraAutoFocusCallback& aOnSuccess,
|
|||
// we have a callback, which means we're already in the process of
|
||||
// auto-focusing--cancel the old callback
|
||||
nsCOMPtr<CameraErrorCallback> ecb = mAutoFocusOnErrorCb.forget();
|
||||
ErrorResult ignored;
|
||||
ecb->Call(NS_LITERAL_STRING("Interrupted"), ignored);
|
||||
if (ecb) {
|
||||
ErrorResult ignored;
|
||||
ecb->Call(NS_LITERAL_STRING("Interrupted"), ignored);
|
||||
}
|
||||
cancel = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "mozilla/dom/devicestorage/DeviceStorageRequestParent.h"
|
||||
#include "mozilla/dom/GeolocationBinding.h"
|
||||
#include "mozilla/dom/telephony/TelephonyParent.h"
|
||||
#include "mozilla/dom/time/DateCacheCleaner.h"
|
||||
#include "mozilla/dom/FileSystemRequestParent.h"
|
||||
#include "SmsParent.h"
|
||||
#include "mozilla/hal_sandbox/PHalParent.h"
|
||||
|
@ -489,6 +490,8 @@ ContentParent::StartUp()
|
|||
// Note: This reporter measures all ContentParents.
|
||||
RegisterStrongMemoryReporter(new ContentParentsMemoryReporter());
|
||||
|
||||
mozilla::dom::time::InitializeDateCacheCleaner();
|
||||
|
||||
BackgroundChild::Startup();
|
||||
|
||||
sCanLaunchSubprocesses = true;
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace layers {
|
|||
void
|
||||
ColorLayerComposite::RenderLayer(const nsIntRect& aClipRect)
|
||||
{
|
||||
EffectChain effects;
|
||||
EffectChain effects(this);
|
||||
gfxRGBA color(GetColor());
|
||||
effects.mPrimaryEffect = new EffectSolidColor(gfx::Color(color.r,
|
||||
color.g,
|
||||
|
|
|
@ -375,7 +375,7 @@ ContainerRender(ContainerT* aContainer,
|
|||
#endif
|
||||
|
||||
compositor->SetRenderTarget(previousTarget);
|
||||
EffectChain effectChain;
|
||||
EffectChain effectChain(aContainer);
|
||||
LayerManagerComposite::AutoAddMaskEffect autoMaskEffect(aContainer->GetMaskLayer(),
|
||||
effectChain,
|
||||
!aContainer->GetTransform().CanDraw2D());
|
||||
|
|
|
@ -98,7 +98,7 @@ ImageLayerComposite::RenderLayer(const nsIntRect& aClipRect)
|
|||
|
||||
mCompositor->MakeCurrent();
|
||||
|
||||
EffectChain effectChain;
|
||||
EffectChain effectChain(this);
|
||||
LayerManagerComposite::AutoAddMaskEffect autoMaskEffect(mMaskLayer, effectChain);
|
||||
|
||||
gfx::Rect clipRect(aClipRect.x, aClipRect.y, aClipRect.width, aClipRect.height);
|
||||
|
|
|
@ -126,7 +126,7 @@ ThebesLayerComposite::RenderLayer(const nsIntRect& aClipRect)
|
|||
}
|
||||
#endif
|
||||
|
||||
EffectChain effectChain;
|
||||
EffectChain effectChain(this);
|
||||
LayerManagerComposite::AutoAddMaskEffect autoMaskEffect(mMaskLayer, effectChain);
|
||||
|
||||
nsIntRegion visibleRegion = GetEffectiveVisibleRegion();
|
||||
|
|
|
@ -98,11 +98,14 @@ UnixSocketWatcher::OnFileCanReadWithoutBlocking(int aFd)
|
|||
if (mConnectionStatus == SOCKET_IS_CONNECTED) {
|
||||
OnSocketCanReceiveWithoutBlocking();
|
||||
} else if (mConnectionStatus == SOCKET_IS_LISTENING) {
|
||||
int fd = TEMP_FAILURE_RETRY(accept(GetFd(), NULL, NULL));
|
||||
sockaddr_any addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
int fd = TEMP_FAILURE_RETRY(accept(GetFd(),
|
||||
reinterpret_cast<struct sockaddr*>(&addr), &addrLen));
|
||||
if (fd < 0) {
|
||||
OnError("accept", errno);
|
||||
} else {
|
||||
OnAccepted(fd);
|
||||
OnAccepted(fd, &addr, addrLen);
|
||||
}
|
||||
} else {
|
||||
NS_NOTREACHED("invalid connection state for reading");
|
||||
|
|
|
@ -7,11 +7,34 @@
|
|||
#ifndef mozilla_ipc_UnixSocketWatcher_h
|
||||
#define mozilla_ipc_UnixSocketWatcher_h
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/un.h>
|
||||
#include <netinet/in.h>
|
||||
#ifdef MOZ_B2G_BT_BLUEZ
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/sco.h>
|
||||
#include <bluetooth/l2cap.h>
|
||||
#include <bluetooth/rfcomm.h>
|
||||
#endif
|
||||
#include "UnixFdWatcher.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace ipc {
|
||||
|
||||
union sockaddr_any {
|
||||
sockaddr_storage storage; // address-family only
|
||||
sockaddr_un un;
|
||||
sockaddr_in in;
|
||||
sockaddr_in6 in6;
|
||||
#ifdef MOZ_B2G_BT_BLUEZ
|
||||
sockaddr_sco sco;
|
||||
sockaddr_rc rc;
|
||||
sockaddr_l2 l2;
|
||||
#endif
|
||||
// ... others
|
||||
};
|
||||
|
||||
class UnixSocketWatcher : public UnixFdWatcher
|
||||
{
|
||||
public:
|
||||
|
@ -34,11 +57,12 @@ public:
|
|||
// Connect to a peer
|
||||
nsresult Connect(const struct sockaddr* aAddr, socklen_t aAddrLen);
|
||||
|
||||
// Listen on socket for incomming connection requests
|
||||
// Listen on socket for incoming connection requests
|
||||
nsresult Listen(const struct sockaddr* aAddr, socklen_t aAddrLen);
|
||||
|
||||
// Callback method for accepted connections
|
||||
virtual void OnAccepted(int aFd) {};
|
||||
virtual void OnAccepted(int aFd, const sockaddr_any* aAddr,
|
||||
socklen_t aAddrLen) {};
|
||||
|
||||
// Callback method for successful connection requests
|
||||
virtual void OnConnected() {};
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "UnixSocket.h"
|
||||
#include "mozilla/ipc/UnixSocketWatcher.h"
|
||||
#include "nsTArray.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
#include <fcntl.h>
|
||||
|
@ -119,7 +118,8 @@ public:
|
|||
*/
|
||||
RefPtr<UnixSocketConsumer> mConsumer;
|
||||
|
||||
void OnAccepted(int aFd) MOZ_OVERRIDE;
|
||||
void OnAccepted(int aFd, const sockaddr_any* aAddr,
|
||||
socklen_t aAddrLen) MOZ_OVERRIDE;
|
||||
void OnConnected() MOZ_OVERRIDE;
|
||||
void OnError(const char* aFunction, int aErrno) MOZ_OVERRIDE;
|
||||
void OnListening() MOZ_OVERRIDE;
|
||||
|
@ -553,10 +553,17 @@ UnixSocketImpl::SetSocketFlags(int aFd)
|
|||
}
|
||||
|
||||
void
|
||||
UnixSocketImpl::OnAccepted(int aFd)
|
||||
UnixSocketImpl::OnAccepted(int aFd,
|
||||
const sockaddr_any* aAddr,
|
||||
socklen_t aAddrLen)
|
||||
{
|
||||
MOZ_ASSERT(MessageLoopForIO::current() == GetIOLoop());
|
||||
MOZ_ASSERT(GetConnectionStatus() == SOCKET_IS_LISTENING);
|
||||
MOZ_ASSERT(aAddr);
|
||||
MOZ_ASSERT(aAddrLen <= sizeof(mAddr));
|
||||
|
||||
memcpy (&mAddr, aAddr, aAddrLen);
|
||||
mAddrSize = aAddrLen;
|
||||
|
||||
if (!mConnector->SetUp(aFd)) {
|
||||
NS_WARNING("Could not set up socket!");
|
||||
|
|
|
@ -8,38 +8,16 @@
|
|||
#define mozilla_ipc_UnixSocket_h
|
||||
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/un.h>
|
||||
#include <netinet/in.h>
|
||||
#ifdef MOZ_B2G_BT_BLUEZ
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/sco.h>
|
||||
#include <bluetooth/l2cap.h>
|
||||
#include <bluetooth/rfcomm.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include "nsString.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "mozilla/ipc/UnixSocketWatcher.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace ipc {
|
||||
|
||||
union sockaddr_any {
|
||||
sockaddr_storage storage; // address-family only
|
||||
sockaddr_un un;
|
||||
sockaddr_in in;
|
||||
sockaddr_in6 in6;
|
||||
#ifdef MOZ_B2G_BT_BLUEZ
|
||||
sockaddr_sco sco;
|
||||
sockaddr_rc rc;
|
||||
sockaddr_l2 l2;
|
||||
#endif
|
||||
// ... others
|
||||
};
|
||||
|
||||
class UnixSocketRawData
|
||||
{
|
||||
public:
|
||||
|
|
Загрузка…
Ссылка в новой задаче