mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 08:18:41 +09:00
Issue #1751 -- Remove files unused without XP_DARWIN
This commit is contained in:
parent
2f27335cc4
commit
9aed800398
18 changed files with 2 additions and 5136 deletions
|
|
@ -1,615 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
// vim:set ts=2 sts=2 sw=2 et cin:
|
||||
/* 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 "MacIOSurface.h"
|
||||
#include <OpenGL/gl.h>
|
||||
#include <QuartzCore/QuartzCore.h>
|
||||
#include <dlfcn.h>
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/Assertions.h"
|
||||
#include "GLConsts.h"
|
||||
|
||||
using namespace mozilla;
|
||||
// IOSurface signatures
|
||||
#define IOSURFACE_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/IOSurface.framework/IOSurface"
|
||||
#define OPENGL_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/OpenGL.framework/OpenGL"
|
||||
#define COREGRAPHICS_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Frameworks/" \
|
||||
"CoreGraphics.framework/CoreGraphics"
|
||||
#define COREVIDEO_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Frameworks/" \
|
||||
"CoreVideo.framework/CoreVideo"
|
||||
|
||||
#define GET_CONST(const_name) \
|
||||
((CFStringRef*) dlsym(sIOSurfaceFramework, const_name))
|
||||
#define GET_IOSYM(dest,sym_name) \
|
||||
(typeof(dest)) dlsym(sIOSurfaceFramework, sym_name)
|
||||
#define GET_CGLSYM(dest,sym_name) \
|
||||
(typeof(dest)) dlsym(sOpenGLFramework, sym_name)
|
||||
#define GET_CGSYM(dest,sym_name) \
|
||||
(typeof(dest)) dlsym(sCoreGraphicsFramework, sym_name)
|
||||
#define GET_CVSYM(dest, sym_name) \
|
||||
(typeof(dest)) dlsym(sCoreVideoFramework, sym_name)
|
||||
|
||||
MacIOSurfaceLib::LibraryUnloader MacIOSurfaceLib::sLibraryUnloader;
|
||||
bool MacIOSurfaceLib::isLoaded = false;
|
||||
void* MacIOSurfaceLib::sIOSurfaceFramework;
|
||||
void* MacIOSurfaceLib::sOpenGLFramework;
|
||||
void* MacIOSurfaceLib::sCoreGraphicsFramework;
|
||||
void* MacIOSurfaceLib::sCoreVideoFramework;
|
||||
IOSurfaceCreateFunc MacIOSurfaceLib::sCreate;
|
||||
IOSurfaceGetIDFunc MacIOSurfaceLib::sGetID;
|
||||
IOSurfaceLookupFunc MacIOSurfaceLib::sLookup;
|
||||
IOSurfaceGetBaseAddressFunc MacIOSurfaceLib::sGetBaseAddress;
|
||||
IOSurfaceGetBaseAddressOfPlaneFunc MacIOSurfaceLib::sGetBaseAddressOfPlane;
|
||||
IOSurfaceSizePlaneTFunc MacIOSurfaceLib::sWidth;
|
||||
IOSurfaceSizePlaneTFunc MacIOSurfaceLib::sHeight;
|
||||
IOSurfaceSizeTFunc MacIOSurfaceLib::sPlaneCount;
|
||||
IOSurfaceSizePlaneTFunc MacIOSurfaceLib::sBytesPerRow;
|
||||
IOSurfaceGetPropertyMaximumFunc MacIOSurfaceLib::sGetPropertyMaximum;
|
||||
IOSurfaceVoidFunc MacIOSurfaceLib::sIncrementUseCount;
|
||||
IOSurfaceVoidFunc MacIOSurfaceLib::sDecrementUseCount;
|
||||
IOSurfaceLockFunc MacIOSurfaceLib::sLock;
|
||||
IOSurfaceUnlockFunc MacIOSurfaceLib::sUnlock;
|
||||
CGLTexImageIOSurface2DFunc MacIOSurfaceLib::sTexImage;
|
||||
IOSurfaceContextCreateFunc MacIOSurfaceLib::sIOSurfaceContextCreate;
|
||||
IOSurfaceContextCreateImageFunc MacIOSurfaceLib::sIOSurfaceContextCreateImage;
|
||||
IOSurfaceContextGetSurfaceFunc MacIOSurfaceLib::sIOSurfaceContextGetSurface;
|
||||
CVPixelBufferGetIOSurfaceFunc MacIOSurfaceLib::sCVPixelBufferGetIOSurface;
|
||||
unsigned int (*MacIOSurfaceLib::sCGContextGetTypePtr) (CGContextRef) = nullptr;
|
||||
IOSurfacePixelFormatFunc MacIOSurfaceLib::sPixelFormat;
|
||||
|
||||
CFStringRef MacIOSurfaceLib::kPropWidth;
|
||||
CFStringRef MacIOSurfaceLib::kPropHeight;
|
||||
CFStringRef MacIOSurfaceLib::kPropBytesPerElem;
|
||||
CFStringRef MacIOSurfaceLib::kPropBytesPerRow;
|
||||
CFStringRef MacIOSurfaceLib::kPropIsGlobal;
|
||||
|
||||
bool MacIOSurfaceLib::isInit() {
|
||||
// Guard against trying to reload the library
|
||||
// if it is not available.
|
||||
if (!isLoaded)
|
||||
LoadLibrary();
|
||||
MOZ_ASSERT(sIOSurfaceFramework);
|
||||
return sIOSurfaceFramework;
|
||||
}
|
||||
|
||||
IOSurfacePtr MacIOSurfaceLib::IOSurfaceCreate(CFDictionaryRef properties) {
|
||||
return sCreate(properties);
|
||||
}
|
||||
|
||||
IOSurfacePtr MacIOSurfaceLib::IOSurfaceLookup(IOSurfaceID aIOSurfaceID) {
|
||||
return sLookup(aIOSurfaceID);
|
||||
}
|
||||
|
||||
IOSurfaceID MacIOSurfaceLib::IOSurfaceGetID(IOSurfacePtr aIOSurfacePtr) {
|
||||
return sGetID(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
void* MacIOSurfaceLib::IOSurfaceGetBaseAddress(IOSurfacePtr aIOSurfacePtr) {
|
||||
return sGetBaseAddress(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
void* MacIOSurfaceLib::IOSurfaceGetBaseAddressOfPlane(IOSurfacePtr aIOSurfacePtr,
|
||||
size_t planeIndex) {
|
||||
return sGetBaseAddressOfPlane(aIOSurfacePtr, planeIndex);
|
||||
}
|
||||
|
||||
size_t MacIOSurfaceLib::IOSurfaceGetPlaneCount(IOSurfacePtr aIOSurfacePtr) {
|
||||
return sPlaneCount(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
size_t MacIOSurfaceLib::IOSurfaceGetWidth(IOSurfacePtr aIOSurfacePtr, size_t plane) {
|
||||
return sWidth(aIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
size_t MacIOSurfaceLib::IOSurfaceGetHeight(IOSurfacePtr aIOSurfacePtr, size_t plane) {
|
||||
return sHeight(aIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
size_t MacIOSurfaceLib::IOSurfaceGetBytesPerRow(IOSurfacePtr aIOSurfacePtr, size_t plane) {
|
||||
return sBytesPerRow(aIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
size_t MacIOSurfaceLib::IOSurfaceGetPropertyMaximum(CFStringRef property) {
|
||||
return sGetPropertyMaximum(property);
|
||||
}
|
||||
|
||||
OSType MacIOSurfaceLib::IOSurfaceGetPixelFormat(IOSurfacePtr aIOSurfacePtr) {
|
||||
return sPixelFormat(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
IOReturn MacIOSurfaceLib::IOSurfaceLock(IOSurfacePtr aIOSurfacePtr,
|
||||
uint32_t options, uint32_t* seed) {
|
||||
return sLock(aIOSurfacePtr, options, seed);
|
||||
}
|
||||
|
||||
IOReturn MacIOSurfaceLib::IOSurfaceUnlock(IOSurfacePtr aIOSurfacePtr,
|
||||
uint32_t options, uint32_t *seed) {
|
||||
return sUnlock(aIOSurfacePtr, options, seed);
|
||||
}
|
||||
|
||||
void MacIOSurfaceLib::IOSurfaceIncrementUseCount(IOSurfacePtr aIOSurfacePtr) {
|
||||
sIncrementUseCount(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
void MacIOSurfaceLib::IOSurfaceDecrementUseCount(IOSurfacePtr aIOSurfacePtr) {
|
||||
sDecrementUseCount(aIOSurfacePtr);
|
||||
}
|
||||
|
||||
CGLError MacIOSurfaceLib::CGLTexImageIOSurface2D(CGLContextObj ctxt,
|
||||
GLenum target, GLenum internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
IOSurfacePtr ioSurface, GLuint plane) {
|
||||
return sTexImage(ctxt, target, internalFormat, width, height,
|
||||
format, type, ioSurface, plane);
|
||||
}
|
||||
|
||||
IOSurfacePtr MacIOSurfaceLib::CVPixelBufferGetIOSurface(CVPixelBufferRef aPixelBuffer) {
|
||||
return sCVPixelBufferGetIOSurface(aPixelBuffer);
|
||||
}
|
||||
|
||||
CGContextRef MacIOSurfaceLib::IOSurfaceContextCreate(IOSurfacePtr aIOSurfacePtr,
|
||||
unsigned aWidth, unsigned aHeight,
|
||||
unsigned aBitsPerComponent, unsigned aBytes,
|
||||
CGColorSpaceRef aColorSpace, CGBitmapInfo bitmapInfo) {
|
||||
if (!sIOSurfaceContextCreate)
|
||||
return nullptr;
|
||||
return sIOSurfaceContextCreate(aIOSurfacePtr, aWidth, aHeight, aBitsPerComponent, aBytes, aColorSpace, bitmapInfo);
|
||||
}
|
||||
|
||||
CGImageRef MacIOSurfaceLib::IOSurfaceContextCreateImage(CGContextRef aContext) {
|
||||
if (!sIOSurfaceContextCreateImage)
|
||||
return nullptr;
|
||||
return sIOSurfaceContextCreateImage(aContext);
|
||||
}
|
||||
|
||||
IOSurfacePtr MacIOSurfaceLib::IOSurfaceContextGetSurface(CGContextRef aContext) {
|
||||
if (!sIOSurfaceContextGetSurface)
|
||||
return nullptr;
|
||||
return sIOSurfaceContextGetSurface(aContext);
|
||||
}
|
||||
|
||||
CFStringRef MacIOSurfaceLib::GetIOConst(const char* symbole) {
|
||||
CFStringRef *address = (CFStringRef*)dlsym(sIOSurfaceFramework, symbole);
|
||||
if (!address)
|
||||
return nullptr;
|
||||
|
||||
return *address;
|
||||
}
|
||||
|
||||
void MacIOSurfaceLib::LoadLibrary() {
|
||||
if (isLoaded) {
|
||||
return;
|
||||
}
|
||||
isLoaded = true;
|
||||
sIOSurfaceFramework = dlopen(IOSURFACE_FRAMEWORK_PATH,
|
||||
RTLD_LAZY | RTLD_LOCAL);
|
||||
sOpenGLFramework = dlopen(OPENGL_FRAMEWORK_PATH,
|
||||
RTLD_LAZY | RTLD_LOCAL);
|
||||
|
||||
sCoreGraphicsFramework = dlopen(COREGRAPHICS_FRAMEWORK_PATH,
|
||||
RTLD_LAZY | RTLD_LOCAL);
|
||||
|
||||
sCoreVideoFramework = dlopen(COREVIDEO_FRAMEWORK_PATH,
|
||||
RTLD_LAZY | RTLD_LOCAL);
|
||||
|
||||
if (!sIOSurfaceFramework || !sOpenGLFramework || !sCoreGraphicsFramework ||
|
||||
!sCoreVideoFramework) {
|
||||
if (sIOSurfaceFramework)
|
||||
dlclose(sIOSurfaceFramework);
|
||||
if (sOpenGLFramework)
|
||||
dlclose(sOpenGLFramework);
|
||||
if (sCoreGraphicsFramework)
|
||||
dlclose(sCoreGraphicsFramework);
|
||||
if (sCoreVideoFramework)
|
||||
dlclose(sCoreVideoFramework);
|
||||
sIOSurfaceFramework = nullptr;
|
||||
sOpenGLFramework = nullptr;
|
||||
sCoreGraphicsFramework = nullptr;
|
||||
sCoreVideoFramework = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
kPropWidth = GetIOConst("kIOSurfaceWidth");
|
||||
kPropHeight = GetIOConst("kIOSurfaceHeight");
|
||||
kPropBytesPerElem = GetIOConst("kIOSurfaceBytesPerElement");
|
||||
kPropBytesPerRow = GetIOConst("kIOSurfaceBytesPerRow");
|
||||
kPropIsGlobal = GetIOConst("kIOSurfaceIsGlobal");
|
||||
sCreate = GET_IOSYM(sCreate, "IOSurfaceCreate");
|
||||
sGetID = GET_IOSYM(sGetID, "IOSurfaceGetID");
|
||||
sWidth = GET_IOSYM(sWidth, "IOSurfaceGetWidthOfPlane");
|
||||
sHeight = GET_IOSYM(sHeight, "IOSurfaceGetHeightOfPlane");
|
||||
sBytesPerRow = GET_IOSYM(sBytesPerRow, "IOSurfaceGetBytesPerRowOfPlane");
|
||||
sGetPropertyMaximum = GET_IOSYM(sGetPropertyMaximum, "IOSurfaceGetPropertyMaximum");
|
||||
sLookup = GET_IOSYM(sLookup, "IOSurfaceLookup");
|
||||
sLock = GET_IOSYM(sLock, "IOSurfaceLock");
|
||||
sUnlock = GET_IOSYM(sUnlock, "IOSurfaceUnlock");
|
||||
sIncrementUseCount =
|
||||
GET_IOSYM(sIncrementUseCount, "IOSurfaceIncrementUseCount");
|
||||
sDecrementUseCount =
|
||||
GET_IOSYM(sDecrementUseCount, "IOSurfaceDecrementUseCount");
|
||||
sGetBaseAddress = GET_IOSYM(sGetBaseAddress, "IOSurfaceGetBaseAddress");
|
||||
sGetBaseAddressOfPlane =
|
||||
GET_IOSYM(sGetBaseAddressOfPlane, "IOSurfaceGetBaseAddressOfPlane");
|
||||
sPlaneCount = GET_IOSYM(sPlaneCount, "IOSurfaceGetPlaneCount");
|
||||
sPixelFormat = GET_IOSYM(sPixelFormat, "IOSurfaceGetPixelFormat");
|
||||
|
||||
sTexImage = GET_CGLSYM(sTexImage, "CGLTexImageIOSurface2D");
|
||||
sCGContextGetTypePtr = (unsigned int (*)(CGContext*))dlsym(RTLD_DEFAULT, "CGContextGetType");
|
||||
|
||||
sCVPixelBufferGetIOSurface =
|
||||
GET_CVSYM(sCVPixelBufferGetIOSurface, "CVPixelBufferGetIOSurface");
|
||||
|
||||
// Optional symbols
|
||||
sIOSurfaceContextCreate = GET_CGSYM(sIOSurfaceContextCreate, "CGIOSurfaceContextCreate");
|
||||
sIOSurfaceContextCreateImage = GET_CGSYM(sIOSurfaceContextCreateImage, "CGIOSurfaceContextCreateImage");
|
||||
sIOSurfaceContextGetSurface = GET_CGSYM(sIOSurfaceContextGetSurface, "CGIOSurfaceContextGetSurface");
|
||||
|
||||
if (!sCreate || !sGetID || !sLookup || !sTexImage || !sGetBaseAddress ||
|
||||
!sGetBaseAddressOfPlane || !sPlaneCount ||
|
||||
!kPropWidth || !kPropHeight || !kPropBytesPerElem || !kPropIsGlobal ||
|
||||
!sLock || !sUnlock || !sIncrementUseCount || !sDecrementUseCount ||
|
||||
!sWidth || !sHeight || !kPropBytesPerRow ||
|
||||
!sBytesPerRow || !sGetPropertyMaximum || !sCVPixelBufferGetIOSurface) {
|
||||
CloseLibrary();
|
||||
}
|
||||
}
|
||||
|
||||
void MacIOSurfaceLib::CloseLibrary() {
|
||||
if (sIOSurfaceFramework) {
|
||||
dlclose(sIOSurfaceFramework);
|
||||
}
|
||||
if (sOpenGLFramework) {
|
||||
dlclose(sOpenGLFramework);
|
||||
}
|
||||
if (sCoreVideoFramework) {
|
||||
dlclose(sCoreVideoFramework);
|
||||
}
|
||||
sIOSurfaceFramework = nullptr;
|
||||
sOpenGLFramework = nullptr;
|
||||
sCoreVideoFramework = nullptr;
|
||||
}
|
||||
|
||||
MacIOSurface::MacIOSurface(const void* aIOSurfacePtr,
|
||||
double aContentsScaleFactor, bool aHasAlpha)
|
||||
: mIOSurfacePtr(aIOSurfacePtr)
|
||||
, mContentsScaleFactor(aContentsScaleFactor)
|
||||
, mHasAlpha(aHasAlpha)
|
||||
{
|
||||
CFRetain(mIOSurfacePtr);
|
||||
IncrementUseCount();
|
||||
}
|
||||
|
||||
MacIOSurface::~MacIOSurface() {
|
||||
DecrementUseCount();
|
||||
CFRelease(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
already_AddRefed<MacIOSurface> MacIOSurface::CreateIOSurface(int aWidth, int aHeight,
|
||||
double aContentsScaleFactor,
|
||||
bool aHasAlpha) {
|
||||
if (!MacIOSurfaceLib::isInit() || aContentsScaleFactor <= 0)
|
||||
return nullptr;
|
||||
|
||||
CFMutableDictionaryRef props = ::CFDictionaryCreateMutable(
|
||||
kCFAllocatorDefault, 4,
|
||||
&kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
if (!props)
|
||||
return nullptr;
|
||||
|
||||
MOZ_ASSERT((size_t)aWidth <= GetMaxWidth());
|
||||
MOZ_ASSERT((size_t)aHeight <= GetMaxHeight());
|
||||
|
||||
int32_t bytesPerElem = 4;
|
||||
size_t intScaleFactor = ceil(aContentsScaleFactor);
|
||||
aWidth *= intScaleFactor;
|
||||
aHeight *= intScaleFactor;
|
||||
CFNumberRef cfWidth = ::CFNumberCreate(nullptr, kCFNumberSInt32Type, &aWidth);
|
||||
CFNumberRef cfHeight = ::CFNumberCreate(nullptr, kCFNumberSInt32Type, &aHeight);
|
||||
CFNumberRef cfBytesPerElem = ::CFNumberCreate(nullptr, kCFNumberSInt32Type, &bytesPerElem);
|
||||
::CFDictionaryAddValue(props, MacIOSurfaceLib::kPropWidth,
|
||||
cfWidth);
|
||||
::CFRelease(cfWidth);
|
||||
::CFDictionaryAddValue(props, MacIOSurfaceLib::kPropHeight,
|
||||
cfHeight);
|
||||
::CFRelease(cfHeight);
|
||||
::CFDictionaryAddValue(props, MacIOSurfaceLib::kPropBytesPerElem,
|
||||
cfBytesPerElem);
|
||||
::CFRelease(cfBytesPerElem);
|
||||
::CFDictionaryAddValue(props, MacIOSurfaceLib::kPropIsGlobal,
|
||||
kCFBooleanTrue);
|
||||
|
||||
IOSurfacePtr surfaceRef = MacIOSurfaceLib::IOSurfaceCreate(props);
|
||||
::CFRelease(props);
|
||||
|
||||
if (!surfaceRef)
|
||||
return nullptr;
|
||||
|
||||
RefPtr<MacIOSurface> ioSurface = new MacIOSurface(surfaceRef, aContentsScaleFactor, aHasAlpha);
|
||||
if (!ioSurface) {
|
||||
::CFRelease(surfaceRef);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Release the IOSurface because MacIOSurface retained it
|
||||
CFRelease(surfaceRef);
|
||||
|
||||
return ioSurface.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<MacIOSurface> MacIOSurface::LookupSurface(IOSurfaceID aIOSurfaceID,
|
||||
double aContentsScaleFactor,
|
||||
bool aHasAlpha) {
|
||||
if (!MacIOSurfaceLib::isInit() || aContentsScaleFactor <= 0)
|
||||
return nullptr;
|
||||
|
||||
IOSurfacePtr surfaceRef = MacIOSurfaceLib::IOSurfaceLookup(aIOSurfaceID);
|
||||
if (!surfaceRef)
|
||||
return nullptr;
|
||||
|
||||
RefPtr<MacIOSurface> ioSurface = new MacIOSurface(surfaceRef, aContentsScaleFactor, aHasAlpha);
|
||||
if (!ioSurface) {
|
||||
::CFRelease(surfaceRef);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Release the IOSurface because MacIOSurface retained it
|
||||
CFRelease(surfaceRef);
|
||||
|
||||
return ioSurface.forget();
|
||||
}
|
||||
|
||||
IOSurfaceID MacIOSurface::GetIOSurfaceID() {
|
||||
return MacIOSurfaceLib::IOSurfaceGetID(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
void* MacIOSurface::GetBaseAddress() {
|
||||
return MacIOSurfaceLib::IOSurfaceGetBaseAddress(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
void* MacIOSurface::GetBaseAddressOfPlane(size_t aPlaneIndex)
|
||||
{
|
||||
return MacIOSurfaceLib::IOSurfaceGetBaseAddressOfPlane(mIOSurfacePtr,
|
||||
aPlaneIndex);
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetWidth(size_t plane) {
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
return GetDevicePixelWidth(plane) / intScaleFactor;
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetHeight(size_t plane) {
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
return GetDevicePixelHeight(plane) / intScaleFactor;
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetPlaneCount() {
|
||||
return MacIOSurfaceLib::IOSurfaceGetPlaneCount(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
/*static*/ size_t MacIOSurface::GetMaxWidth() {
|
||||
if (!MacIOSurfaceLib::isInit())
|
||||
return -1;
|
||||
return MacIOSurfaceLib::IOSurfaceGetPropertyMaximum(MacIOSurfaceLib::kPropWidth);
|
||||
}
|
||||
|
||||
/*static*/ size_t MacIOSurface::GetMaxHeight() {
|
||||
if (!MacIOSurfaceLib::isInit())
|
||||
return -1;
|
||||
return MacIOSurfaceLib::IOSurfaceGetPropertyMaximum(MacIOSurfaceLib::kPropHeight);
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetDevicePixelWidth(size_t plane) {
|
||||
return MacIOSurfaceLib::IOSurfaceGetWidth(mIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetDevicePixelHeight(size_t plane) {
|
||||
return MacIOSurfaceLib::IOSurfaceGetHeight(mIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
size_t MacIOSurface::GetBytesPerRow(size_t plane) {
|
||||
return MacIOSurfaceLib::IOSurfaceGetBytesPerRow(mIOSurfacePtr, plane);
|
||||
}
|
||||
|
||||
OSType MacIOSurface::GetPixelFormat() {
|
||||
return MacIOSurfaceLib::IOSurfaceGetPixelFormat(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
void MacIOSurface::IncrementUseCount() {
|
||||
MacIOSurfaceLib::IOSurfaceIncrementUseCount(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
void MacIOSurface::DecrementUseCount() {
|
||||
MacIOSurfaceLib::IOSurfaceDecrementUseCount(mIOSurfacePtr);
|
||||
}
|
||||
|
||||
#define READ_ONLY 0x1
|
||||
void MacIOSurface::Lock(bool aReadOnly) {
|
||||
MacIOSurfaceLib::IOSurfaceLock(mIOSurfacePtr, aReadOnly ? READ_ONLY : 0, nullptr);
|
||||
}
|
||||
|
||||
void MacIOSurface::Unlock(bool aReadOnly) {
|
||||
MacIOSurfaceLib::IOSurfaceUnlock(mIOSurfacePtr, aReadOnly ? READ_ONLY : 0, nullptr);
|
||||
}
|
||||
|
||||
using mozilla::gfx::SourceSurface;
|
||||
using mozilla::gfx::IntSize;
|
||||
using mozilla::gfx::SurfaceFormat;
|
||||
|
||||
void
|
||||
MacIOSurfaceBufferDeallocator(void* aClosure)
|
||||
{
|
||||
MOZ_ASSERT(aClosure);
|
||||
|
||||
delete [] static_cast<unsigned char*>(aClosure);
|
||||
}
|
||||
|
||||
already_AddRefed<SourceSurface>
|
||||
MacIOSurface::GetAsSurface() {
|
||||
Lock();
|
||||
size_t bytesPerRow = GetBytesPerRow();
|
||||
size_t ioWidth = GetDevicePixelWidth();
|
||||
size_t ioHeight = GetDevicePixelHeight();
|
||||
|
||||
unsigned char* ioData = (unsigned char*)GetBaseAddress();
|
||||
unsigned char* dataCpy =
|
||||
new unsigned char[bytesPerRow * ioHeight / sizeof(unsigned char)];
|
||||
for (size_t i = 0; i < ioHeight; i++) {
|
||||
memcpy(dataCpy + i * bytesPerRow,
|
||||
ioData + i * bytesPerRow, ioWidth * 4);
|
||||
}
|
||||
|
||||
Unlock();
|
||||
|
||||
SurfaceFormat format = HasAlpha() ? mozilla::gfx::SurfaceFormat::B8G8R8A8 :
|
||||
mozilla::gfx::SurfaceFormat::B8G8R8X8;
|
||||
|
||||
RefPtr<mozilla::gfx::DataSourceSurface> surf =
|
||||
mozilla::gfx::Factory::CreateWrappingDataSourceSurface(dataCpy,
|
||||
bytesPerRow,
|
||||
IntSize(ioWidth, ioHeight),
|
||||
format,
|
||||
&MacIOSurfaceBufferDeallocator,
|
||||
static_cast<void*>(dataCpy));
|
||||
|
||||
return surf.forget();
|
||||
}
|
||||
|
||||
SurfaceFormat
|
||||
MacIOSurface::GetFormat()
|
||||
{
|
||||
OSType pixelFormat = GetPixelFormat();
|
||||
if (pixelFormat == '420v') {
|
||||
return SurfaceFormat::NV12;
|
||||
} else if (pixelFormat == '2vuy') {
|
||||
return SurfaceFormat::YUV422;
|
||||
} else {
|
||||
return HasAlpha() ? SurfaceFormat::R8G8B8A8 : SurfaceFormat::R8G8B8X8;
|
||||
}
|
||||
}
|
||||
|
||||
SurfaceFormat
|
||||
MacIOSurface::GetReadFormat()
|
||||
{
|
||||
OSType pixelFormat = GetPixelFormat();
|
||||
if (pixelFormat == '420v') {
|
||||
return SurfaceFormat::NV12;
|
||||
} else if (pixelFormat == '2vuy') {
|
||||
return SurfaceFormat::R8G8B8X8;
|
||||
} else {
|
||||
return HasAlpha() ? SurfaceFormat::R8G8B8A8 : SurfaceFormat::R8G8B8X8;
|
||||
}
|
||||
}
|
||||
|
||||
CGLError
|
||||
MacIOSurface::CGLTexImageIOSurface2D(CGLContextObj ctx, size_t plane)
|
||||
{
|
||||
MOZ_ASSERT(plane >= 0);
|
||||
OSType pixelFormat = GetPixelFormat();
|
||||
|
||||
GLenum internalFormat;
|
||||
GLenum format;
|
||||
GLenum type;
|
||||
if (pixelFormat == '420v') {
|
||||
MOZ_ASSERT(GetPlaneCount() == 2);
|
||||
MOZ_ASSERT(plane < 2);
|
||||
|
||||
if (plane == 0) {
|
||||
internalFormat = format = GL_LUMINANCE;
|
||||
} else {
|
||||
internalFormat = format = GL_LUMINANCE_ALPHA;
|
||||
}
|
||||
type = GL_UNSIGNED_BYTE;
|
||||
} else if (pixelFormat == '2vuy') {
|
||||
MOZ_ASSERT(plane == 0);
|
||||
|
||||
internalFormat = GL_RGB;
|
||||
format = LOCAL_GL_YCBCR_422_APPLE;
|
||||
type = GL_UNSIGNED_SHORT_8_8_APPLE;
|
||||
} else {
|
||||
MOZ_ASSERT(plane == 0);
|
||||
|
||||
internalFormat = HasAlpha() ? GL_RGBA : GL_RGB;
|
||||
format = GL_BGRA;
|
||||
type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||
}
|
||||
CGLError temp = MacIOSurfaceLib::CGLTexImageIOSurface2D(ctx,
|
||||
GL_TEXTURE_RECTANGLE_ARB,
|
||||
internalFormat,
|
||||
GetDevicePixelWidth(plane),
|
||||
GetDevicePixelHeight(plane),
|
||||
format,
|
||||
type,
|
||||
mIOSurfacePtr, plane);
|
||||
return temp;
|
||||
}
|
||||
|
||||
static
|
||||
CGColorSpaceRef CreateSystemColorSpace() {
|
||||
CGColorSpaceRef cspace = ::CGDisplayCopyColorSpace(::CGMainDisplayID());
|
||||
if (!cspace) {
|
||||
cspace = ::CGColorSpaceCreateDeviceRGB();
|
||||
}
|
||||
return cspace;
|
||||
}
|
||||
|
||||
CGContextRef MacIOSurface::CreateIOSurfaceContext() {
|
||||
CGColorSpaceRef cspace = CreateSystemColorSpace();
|
||||
CGContextRef ref = MacIOSurfaceLib::IOSurfaceContextCreate(mIOSurfacePtr,
|
||||
GetDevicePixelWidth(),
|
||||
GetDevicePixelHeight(),
|
||||
8, 32, cspace, 0x2002);
|
||||
::CGColorSpaceRelease(cspace);
|
||||
return ref;
|
||||
}
|
||||
|
||||
CGImageRef MacIOSurface::CreateImageFromIOSurfaceContext(CGContextRef aContext) {
|
||||
if (!MacIOSurfaceLib::isInit())
|
||||
return nullptr;
|
||||
|
||||
return MacIOSurfaceLib::IOSurfaceContextCreateImage(aContext);
|
||||
}
|
||||
|
||||
already_AddRefed<MacIOSurface> MacIOSurface::IOSurfaceContextGetSurface(CGContextRef aContext,
|
||||
double aContentsScaleFactor,
|
||||
bool aHasAlpha) {
|
||||
if (!MacIOSurfaceLib::isInit() || aContentsScaleFactor <= 0)
|
||||
return nullptr;
|
||||
|
||||
IOSurfacePtr surfaceRef = MacIOSurfaceLib::IOSurfaceContextGetSurface(aContext);
|
||||
if (!surfaceRef)
|
||||
return nullptr;
|
||||
|
||||
RefPtr<MacIOSurface> ioSurface = new MacIOSurface(surfaceRef, aContentsScaleFactor, aHasAlpha);
|
||||
if (!ioSurface) {
|
||||
::CFRelease(surfaceRef);
|
||||
return nullptr;
|
||||
}
|
||||
return ioSurface.forget();
|
||||
}
|
||||
|
||||
|
||||
CGContextType GetContextType(CGContextRef ref)
|
||||
{
|
||||
if (!MacIOSurfaceLib::isInit() || !MacIOSurfaceLib::sCGContextGetTypePtr)
|
||||
return CG_CONTEXT_TYPE_UNKNOWN;
|
||||
|
||||
unsigned int type = MacIOSurfaceLib::sCGContextGetTypePtr(ref);
|
||||
if (type == CG_CONTEXT_TYPE_BITMAP) {
|
||||
return CG_CONTEXT_TYPE_BITMAP;
|
||||
} else if (type == CG_CONTEXT_TYPE_IOSURFACE) {
|
||||
return CG_CONTEXT_TYPE_IOSURFACE;
|
||||
} else {
|
||||
return CG_CONTEXT_TYPE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,216 +0,0 @@
|
|||
/* -*- 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/. */
|
||||
|
||||
#ifndef MacIOSurface_h__
|
||||
#define MacIOSurface_h__
|
||||
#ifdef XP_DARWIN
|
||||
#include <QuartzCore/QuartzCore.h>
|
||||
#include <CoreVideo/CoreVideo.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
struct _CGLContextObject;
|
||||
|
||||
typedef _CGLContextObject* CGLContextObj;
|
||||
typedef struct CGContext* CGContextRef;
|
||||
typedef struct CGImage* CGImageRef;
|
||||
typedef uint32_t IOSurfaceID;
|
||||
|
||||
typedef CFTypeRef IOSurfacePtr;
|
||||
typedef IOSurfacePtr (*IOSurfaceCreateFunc) (CFDictionaryRef properties);
|
||||
typedef IOSurfacePtr (*IOSurfaceLookupFunc) (uint32_t io_surface_id);
|
||||
typedef IOSurfaceID (*IOSurfaceGetIDFunc)(IOSurfacePtr io_surface);
|
||||
typedef void (*IOSurfaceVoidFunc)(IOSurfacePtr io_surface);
|
||||
typedef IOReturn (*IOSurfaceLockFunc)(IOSurfacePtr io_surface, uint32_t options,
|
||||
uint32_t *seed);
|
||||
typedef IOReturn (*IOSurfaceUnlockFunc)(IOSurfacePtr io_surface,
|
||||
uint32_t options, uint32_t *seed);
|
||||
typedef void* (*IOSurfaceGetBaseAddressFunc)(IOSurfacePtr io_surface);
|
||||
typedef void* (*IOSurfaceGetBaseAddressOfPlaneFunc)(IOSurfacePtr io_surface,
|
||||
size_t planeIndex);
|
||||
typedef size_t (*IOSurfaceSizeTFunc)(IOSurfacePtr io_surface);
|
||||
typedef size_t (*IOSurfaceSizePlaneTFunc)(IOSurfacePtr io_surface, size_t plane);
|
||||
typedef size_t (*IOSurfaceGetPropertyMaximumFunc) (CFStringRef property);
|
||||
typedef CGLError (*CGLTexImageIOSurface2DFunc) (CGLContextObj ctxt,
|
||||
GLenum target, GLenum internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
IOSurfacePtr ioSurface, GLuint plane);
|
||||
typedef CGContextRef (*IOSurfaceContextCreateFunc)(CFTypeRef io_surface,
|
||||
unsigned width, unsigned height,
|
||||
unsigned bitsPerComponent, unsigned bytes,
|
||||
CGColorSpaceRef colorSpace, CGBitmapInfo bitmapInfo);
|
||||
typedef CGImageRef (*IOSurfaceContextCreateImageFunc)(CGContextRef ref);
|
||||
typedef IOSurfacePtr (*IOSurfaceContextGetSurfaceFunc)(CGContextRef ref);
|
||||
|
||||
typedef IOSurfacePtr (*CVPixelBufferGetIOSurfaceFunc)(
|
||||
CVPixelBufferRef pixelBuffer);
|
||||
|
||||
typedef OSType (*IOSurfacePixelFormatFunc)(IOSurfacePtr io_surface);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
#import <OpenGL/OpenGL.h>
|
||||
#else
|
||||
#import <OpenGLES/ES2/gl.h>
|
||||
#endif
|
||||
|
||||
#include "2D.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/RefCounted.h"
|
||||
|
||||
enum CGContextType {
|
||||
CG_CONTEXT_TYPE_UNKNOWN = 0,
|
||||
// These are found by inspection, it's possible they could be changed
|
||||
CG_CONTEXT_TYPE_BITMAP = 4,
|
||||
CG_CONTEXT_TYPE_IOSURFACE = 8
|
||||
};
|
||||
|
||||
CGContextType GetContextType(CGContextRef ref);
|
||||
|
||||
class MacIOSurface final : public mozilla::external::AtomicRefCounted<MacIOSurface> {
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(MacIOSurface)
|
||||
typedef mozilla::gfx::SourceSurface SourceSurface;
|
||||
|
||||
// The usage count of the IOSurface is increased by 1 during the lifetime
|
||||
// of the MacIOSurface instance.
|
||||
// MacIOSurface holds a reference to the corresponding IOSurface.
|
||||
|
||||
static already_AddRefed<MacIOSurface> CreateIOSurface(int aWidth, int aHeight,
|
||||
double aContentsScaleFactor = 1.0,
|
||||
bool aHasAlpha = true);
|
||||
static void ReleaseIOSurface(MacIOSurface *aIOSurface);
|
||||
static already_AddRefed<MacIOSurface> LookupSurface(IOSurfaceID aSurfaceID,
|
||||
double aContentsScaleFactor = 1.0,
|
||||
bool aHasAlpha = true);
|
||||
|
||||
explicit MacIOSurface(const void *aIOSurfacePtr,
|
||||
double aContentsScaleFactor = 1.0,
|
||||
bool aHasAlpha = true);
|
||||
~MacIOSurface();
|
||||
IOSurfaceID GetIOSurfaceID();
|
||||
void *GetBaseAddress();
|
||||
void *GetBaseAddressOfPlane(size_t planeIndex);
|
||||
size_t GetPlaneCount();
|
||||
OSType GetPixelFormat();
|
||||
// GetWidth() and GetHeight() return values in "display pixels". A
|
||||
// "display pixel" is the smallest fully addressable part of a display.
|
||||
// But in HiDPI modes each "display pixel" corresponds to more than one
|
||||
// device pixel. Use GetDevicePixel**() to get device pixels.
|
||||
size_t GetWidth(size_t plane = 0);
|
||||
size_t GetHeight(size_t plane = 0);
|
||||
double GetContentsScaleFactor() { return mContentsScaleFactor; }
|
||||
size_t GetDevicePixelWidth(size_t plane = 0);
|
||||
size_t GetDevicePixelHeight(size_t plane = 0);
|
||||
size_t GetBytesPerRow(size_t plane = 0);
|
||||
void Lock(bool aReadOnly = true);
|
||||
void Unlock(bool aReadOnly = true);
|
||||
void IncrementUseCount();
|
||||
void DecrementUseCount();
|
||||
bool HasAlpha() { return mHasAlpha; }
|
||||
mozilla::gfx::SurfaceFormat GetFormat();
|
||||
mozilla::gfx::SurfaceFormat GetReadFormat();
|
||||
|
||||
// We would like to forward declare NSOpenGLContext, but it is an @interface
|
||||
// and this file is also used from c++, so we use a void *.
|
||||
CGLError CGLTexImageIOSurface2D(CGLContextObj ctxt, size_t plane = 0);
|
||||
already_AddRefed<SourceSurface> GetAsSurface();
|
||||
CGContextRef CreateIOSurfaceContext();
|
||||
|
||||
// FIXME This doesn't really belong here
|
||||
static CGImageRef CreateImageFromIOSurfaceContext(CGContextRef aContext);
|
||||
static already_AddRefed<MacIOSurface> IOSurfaceContextGetSurface(CGContextRef aContext,
|
||||
double aContentsScaleFactor = 1.0,
|
||||
bool aHasAlpha = true);
|
||||
static size_t GetMaxWidth();
|
||||
static size_t GetMaxHeight();
|
||||
|
||||
private:
|
||||
friend class nsCARenderer;
|
||||
const void* mIOSurfacePtr;
|
||||
double mContentsScaleFactor;
|
||||
bool mHasAlpha;
|
||||
};
|
||||
|
||||
class MacIOSurfaceLib {
|
||||
public:
|
||||
MacIOSurfaceLib() = delete;
|
||||
static void *sIOSurfaceFramework;
|
||||
static void *sOpenGLFramework;
|
||||
static void *sCoreGraphicsFramework;
|
||||
static void *sCoreVideoFramework;
|
||||
static bool isLoaded;
|
||||
static IOSurfaceCreateFunc sCreate;
|
||||
static IOSurfaceGetIDFunc sGetID;
|
||||
static IOSurfaceLookupFunc sLookup;
|
||||
static IOSurfaceGetBaseAddressFunc sGetBaseAddress;
|
||||
static IOSurfaceGetBaseAddressOfPlaneFunc sGetBaseAddressOfPlane;
|
||||
static IOSurfaceSizeTFunc sPlaneCount;
|
||||
static IOSurfaceLockFunc sLock;
|
||||
static IOSurfaceUnlockFunc sUnlock;
|
||||
static IOSurfaceVoidFunc sIncrementUseCount;
|
||||
static IOSurfaceVoidFunc sDecrementUseCount;
|
||||
static IOSurfaceSizePlaneTFunc sWidth;
|
||||
static IOSurfaceSizePlaneTFunc sHeight;
|
||||
static IOSurfaceSizePlaneTFunc sBytesPerRow;
|
||||
static IOSurfaceGetPropertyMaximumFunc sGetPropertyMaximum;
|
||||
static CGLTexImageIOSurface2DFunc sTexImage;
|
||||
static IOSurfaceContextCreateFunc sIOSurfaceContextCreate;
|
||||
static IOSurfaceContextCreateImageFunc sIOSurfaceContextCreateImage;
|
||||
static IOSurfaceContextGetSurfaceFunc sIOSurfaceContextGetSurface;
|
||||
static CVPixelBufferGetIOSurfaceFunc sCVPixelBufferGetIOSurface;
|
||||
static IOSurfacePixelFormatFunc sPixelFormat;
|
||||
static CFStringRef kPropWidth;
|
||||
static CFStringRef kPropHeight;
|
||||
static CFStringRef kPropBytesPerElem;
|
||||
static CFStringRef kPropBytesPerRow;
|
||||
static CFStringRef kPropIsGlobal;
|
||||
|
||||
static bool isInit();
|
||||
static CFStringRef GetIOConst(const char* symbole);
|
||||
static IOSurfacePtr IOSurfaceCreate(CFDictionaryRef properties);
|
||||
static IOSurfacePtr IOSurfaceLookup(IOSurfaceID aIOSurfaceID);
|
||||
static IOSurfaceID IOSurfaceGetID(IOSurfacePtr aIOSurfacePtr);
|
||||
static void* IOSurfaceGetBaseAddress(IOSurfacePtr aIOSurfacePtr);
|
||||
static void* IOSurfaceGetBaseAddressOfPlane(IOSurfacePtr aIOSurfacePtr,
|
||||
size_t aPlaneIndex);
|
||||
static size_t IOSurfaceGetPlaneCount(IOSurfacePtr aIOSurfacePtr);
|
||||
static size_t IOSurfaceGetWidth(IOSurfacePtr aIOSurfacePtr, size_t plane);
|
||||
static size_t IOSurfaceGetHeight(IOSurfacePtr aIOSurfacePtr, size_t plane);
|
||||
static size_t IOSurfaceGetBytesPerRow(IOSurfacePtr aIOSurfacePtr, size_t plane);
|
||||
static size_t IOSurfaceGetPropertyMaximum(CFStringRef property);
|
||||
static IOReturn IOSurfaceLock(IOSurfacePtr aIOSurfacePtr,
|
||||
uint32_t options, uint32_t *seed);
|
||||
static IOReturn IOSurfaceUnlock(IOSurfacePtr aIOSurfacePtr,
|
||||
uint32_t options, uint32_t *seed);
|
||||
static void IOSurfaceIncrementUseCount(IOSurfacePtr aIOSurfacePtr);
|
||||
static void IOSurfaceDecrementUseCount(IOSurfacePtr aIOSurfacePtr);
|
||||
static CGLError CGLTexImageIOSurface2D(CGLContextObj ctxt,
|
||||
GLenum target, GLenum internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
IOSurfacePtr ioSurface, GLuint plane);
|
||||
static CGContextRef IOSurfaceContextCreate(IOSurfacePtr aIOSurfacePtr,
|
||||
unsigned aWidth, unsigned aHeight,
|
||||
unsigned aBitsPerCompoent, unsigned aBytes,
|
||||
CGColorSpaceRef aColorSpace, CGBitmapInfo bitmapInfo);
|
||||
static CGImageRef IOSurfaceContextCreateImage(CGContextRef ref);
|
||||
static IOSurfacePtr IOSurfaceContextGetSurface(CGContextRef ref);
|
||||
static IOSurfacePtr CVPixelBufferGetIOSurface(CVPixelBufferRef apixelBuffer);
|
||||
static OSType IOSurfaceGetPixelFormat(IOSurfacePtr aIOSurfacePtr);
|
||||
static unsigned int (*sCGContextGetTypePtr) (CGContextRef);
|
||||
static void LoadLibrary();
|
||||
static void CloseLibrary();
|
||||
|
||||
// Static deconstructor
|
||||
static class LibraryUnloader {
|
||||
public:
|
||||
~LibraryUnloader() {
|
||||
CloseLibrary();
|
||||
}
|
||||
} sLibraryUnloader;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; 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 "NativeFontResourceMac.h"
|
||||
#include "Types.h"
|
||||
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/gfx/Logging.h"
|
||||
|
||||
#ifdef MOZ_WIDGET_UIKIT
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
/* static */
|
||||
already_AddRefed<NativeFontResourceMac>
|
||||
NativeFontResourceMac::Create(uint8_t *aFontData, uint32_t aDataLength)
|
||||
{
|
||||
// copy font data
|
||||
CFDataRef data = CFDataCreate(kCFAllocatorDefault, aFontData, aDataLength);
|
||||
if (!data) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// create a provider
|
||||
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
|
||||
|
||||
// release our reference to the CFData, provider keeps it alive
|
||||
CFRelease(data);
|
||||
|
||||
// create the font object
|
||||
CGFontRef fontRef = CGFontCreateWithDataProvider(provider);
|
||||
|
||||
// release our reference, font will keep it alive as long as needed
|
||||
CGDataProviderRelease(provider);
|
||||
|
||||
if (!fontRef) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// passes ownership of fontRef to the NativeFontResourceMac instance
|
||||
RefPtr<NativeFontResourceMac> fontResource =
|
||||
new NativeFontResourceMac(fontRef);
|
||||
|
||||
return fontResource.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<ScaledFont>
|
||||
NativeFontResourceMac::CreateScaledFont(uint32_t aIndex, Float aGlyphSize,
|
||||
const uint8_t* aInstanceData, uint32_t aInstanceDataLength)
|
||||
{
|
||||
RefPtr<ScaledFontBase> scaledFont = new ScaledFontMac(mFontRef, aGlyphSize);
|
||||
|
||||
if (!scaledFont->PopulateCairoScaledFont()) {
|
||||
gfxWarning() << "Unable to create cairo scaled Mac font.";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return scaledFont.forget();
|
||||
}
|
||||
|
||||
} // gfx
|
||||
} // mozilla
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; 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/. */
|
||||
|
||||
#ifndef mozilla_gfx_NativeFontResourceMac_h
|
||||
#define mozilla_gfx_NativeFontResourceMac_h
|
||||
|
||||
#include "2D.h"
|
||||
#include "mozilla/AlreadyAddRefed.h"
|
||||
#include "ScaledFontMac.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
class NativeFontResourceMac final : public NativeFontResource
|
||||
{
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(NativeFontResourceMac)
|
||||
|
||||
static already_AddRefed<NativeFontResourceMac>
|
||||
Create(uint8_t *aFontData, uint32_t aDataLength);
|
||||
|
||||
already_AddRefed<ScaledFont>
|
||||
CreateScaledFont(uint32_t aIndex, Float aGlyphSize,
|
||||
const uint8_t* aInstanceData, uint32_t aInstanceDataLength) final;
|
||||
|
||||
~NativeFontResourceMac()
|
||||
{
|
||||
CFRelease(mFontRef);
|
||||
}
|
||||
|
||||
private:
|
||||
explicit NativeFontResourceMac(CGFontRef aFontRef) : mFontRef(aFontRef) {}
|
||||
|
||||
CGFontRef mFontRef;
|
||||
};
|
||||
|
||||
} // gfx
|
||||
} // mozilla
|
||||
|
||||
#endif // mozilla_gfx_NativeFontResourceMac_h
|
||||
|
|
@ -1,435 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 20; 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 "PathCG.h"
|
||||
#include <math.h>
|
||||
#include "Logging.h"
|
||||
#include "PathHelpers.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
static inline Rect
|
||||
CGRectToRect(CGRect rect)
|
||||
{
|
||||
return Rect(rect.origin.x,
|
||||
rect.origin.y,
|
||||
rect.size.width,
|
||||
rect.size.height);
|
||||
}
|
||||
|
||||
static inline Point
|
||||
CGPointToPoint(CGPoint point)
|
||||
{
|
||||
return Point(point.x, point.y);
|
||||
}
|
||||
|
||||
static inline void
|
||||
SetStrokeOptions(CGContextRef cg, const StrokeOptions &aStrokeOptions)
|
||||
{
|
||||
switch (aStrokeOptions.mLineCap)
|
||||
{
|
||||
case CapStyle::BUTT:
|
||||
CGContextSetLineCap(cg, kCGLineCapButt);
|
||||
break;
|
||||
case CapStyle::ROUND:
|
||||
CGContextSetLineCap(cg, kCGLineCapRound);
|
||||
break;
|
||||
case CapStyle::SQUARE:
|
||||
CGContextSetLineCap(cg, kCGLineCapSquare);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (aStrokeOptions.mLineJoin)
|
||||
{
|
||||
case JoinStyle::BEVEL:
|
||||
CGContextSetLineJoin(cg, kCGLineJoinBevel);
|
||||
break;
|
||||
case JoinStyle::ROUND:
|
||||
CGContextSetLineJoin(cg, kCGLineJoinRound);
|
||||
break;
|
||||
case JoinStyle::MITER:
|
||||
case JoinStyle::MITER_OR_BEVEL:
|
||||
CGContextSetLineJoin(cg, kCGLineJoinMiter);
|
||||
break;
|
||||
}
|
||||
|
||||
CGContextSetLineWidth(cg, aStrokeOptions.mLineWidth);
|
||||
CGContextSetMiterLimit(cg, aStrokeOptions.mMiterLimit);
|
||||
|
||||
// XXX: rename mDashLength to dashLength
|
||||
if (aStrokeOptions.mDashLength > 0) {
|
||||
// we use a regular array instead of a std::vector here because we don't want to leak the <vector> include
|
||||
CGFloat *dashes = new CGFloat[aStrokeOptions.mDashLength];
|
||||
for (size_t i=0; i<aStrokeOptions.mDashLength; i++) {
|
||||
dashes[i] = aStrokeOptions.mDashPattern[i];
|
||||
}
|
||||
CGContextSetLineDash(cg, aStrokeOptions.mDashOffset, dashes, aStrokeOptions.mDashLength);
|
||||
delete[] dashes;
|
||||
}
|
||||
}
|
||||
|
||||
static inline CGAffineTransform
|
||||
GfxMatrixToCGAffineTransform(const Matrix &m)
|
||||
{
|
||||
CGAffineTransform t;
|
||||
t.a = m._11;
|
||||
t.b = m._12;
|
||||
t.c = m._21;
|
||||
t.d = m._22;
|
||||
t.tx = m._31;
|
||||
t.ty = m._32;
|
||||
return t;
|
||||
}
|
||||
|
||||
PathBuilderCG::~PathBuilderCG()
|
||||
{
|
||||
CGPathRelease(mCGPath);
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::MoveTo(const Point &aPoint)
|
||||
{
|
||||
if (!aPoint.IsFinite()) {
|
||||
return;
|
||||
}
|
||||
CGPathMoveToPoint(mCGPath, nullptr, aPoint.x, aPoint.y);
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::LineTo(const Point &aPoint)
|
||||
{
|
||||
if (!aPoint.IsFinite()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (CGPathIsEmpty(mCGPath))
|
||||
MoveTo(aPoint);
|
||||
else
|
||||
CGPathAddLineToPoint(mCGPath, nullptr, aPoint.x, aPoint.y);
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::BezierTo(const Point &aCP1,
|
||||
const Point &aCP2,
|
||||
const Point &aCP3)
|
||||
{
|
||||
if (!aCP1.IsFinite() || !aCP2.IsFinite() || !aCP3.IsFinite()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (CGPathIsEmpty(mCGPath))
|
||||
MoveTo(aCP1);
|
||||
CGPathAddCurveToPoint(mCGPath, nullptr,
|
||||
aCP1.x, aCP1.y,
|
||||
aCP2.x, aCP2.y,
|
||||
aCP3.x, aCP3.y);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::QuadraticBezierTo(const Point &aCP1,
|
||||
const Point &aCP2)
|
||||
{
|
||||
if (!aCP1.IsFinite() || !aCP2.IsFinite()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (CGPathIsEmpty(mCGPath))
|
||||
MoveTo(aCP1);
|
||||
CGPathAddQuadCurveToPoint(mCGPath, nullptr,
|
||||
aCP1.x, aCP1.y,
|
||||
aCP2.x, aCP2.y);
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::Close()
|
||||
{
|
||||
if (!CGPathIsEmpty(mCGPath))
|
||||
CGPathCloseSubpath(mCGPath);
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::Arc(const Point &aOrigin, Float aRadius, Float aStartAngle,
|
||||
Float aEndAngle, bool aAntiClockwise)
|
||||
{
|
||||
if (!aOrigin.IsFinite() || !IsFinite(aRadius) ||
|
||||
!IsFinite(aStartAngle) || !IsFinite(aEndAngle)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Disabled for now due to a CG bug when using CGPathAddArc with stroke
|
||||
// dashing and rotation transforms that are multiples of 90 degrees. See:
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=949661#c8
|
||||
#if 0
|
||||
// Core Graphic's initial coordinate system is y-axis up, whereas Moz2D's is
|
||||
// y-axis down. Core Graphics therefore considers "clockwise" to mean "sweep
|
||||
// in the direction of decreasing angle" whereas Moz2D considers it to mean
|
||||
// "sweep in the direction of increasing angle". In other words if this
|
||||
// Moz2D method is instructed to sweep anti-clockwise we need to tell
|
||||
// CGPathAddArc to sweep clockwise, and vice versa. Hence why we pass the
|
||||
// value of aAntiClockwise directly to CGPathAddArc's "clockwise" bool
|
||||
// parameter.
|
||||
CGPathAddArc(mCGPath, nullptr,
|
||||
aOrigin.x, aOrigin.y,
|
||||
aRadius,
|
||||
aStartAngle,
|
||||
aEndAngle,
|
||||
aAntiClockwise);
|
||||
#endif
|
||||
ArcToBezier(this, aOrigin, Size(aRadius, aRadius), aStartAngle, aEndAngle,
|
||||
aAntiClockwise);
|
||||
}
|
||||
|
||||
Point
|
||||
PathBuilderCG::CurrentPoint() const
|
||||
{
|
||||
Point ret;
|
||||
if (!CGPathIsEmpty(mCGPath)) {
|
||||
CGPoint pt = CGPathGetCurrentPoint(mCGPath);
|
||||
ret.MoveTo(pt.x, pt.y);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
PathBuilderCG::EnsureActive(const Point &aPoint)
|
||||
{
|
||||
}
|
||||
|
||||
already_AddRefed<Path>
|
||||
PathBuilderCG::Finish()
|
||||
{
|
||||
return MakeAndAddRef<PathCG>(mCGPath, mFillRule);
|
||||
}
|
||||
|
||||
already_AddRefed<PathBuilder>
|
||||
PathCG::CopyToBuilder(FillRule aFillRule) const
|
||||
{
|
||||
CGMutablePathRef path = CGPathCreateMutableCopy(mPath);
|
||||
return MakeAndAddRef<PathBuilderCG>(path, aFillRule);
|
||||
}
|
||||
|
||||
|
||||
|
||||
already_AddRefed<PathBuilder>
|
||||
PathCG::TransformedCopyToBuilder(const Matrix &aTransform, FillRule aFillRule) const
|
||||
{
|
||||
// 10.7 adds CGPathCreateMutableCopyByTransformingPath it might be faster than doing
|
||||
// this by hand
|
||||
|
||||
struct TransformApplier {
|
||||
CGMutablePathRef path;
|
||||
CGAffineTransform transform;
|
||||
static void
|
||||
TranformCGPathApplierFunc(void *vinfo, const CGPathElement *element)
|
||||
{
|
||||
TransformApplier *info = reinterpret_cast<TransformApplier*>(vinfo);
|
||||
switch (element->type) {
|
||||
case kCGPathElementMoveToPoint:
|
||||
{
|
||||
CGPoint pt = element->points[0];
|
||||
CGPathMoveToPoint(info->path, &info->transform, pt.x, pt.y);
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddLineToPoint:
|
||||
{
|
||||
CGPoint pt = element->points[0];
|
||||
CGPathAddLineToPoint(info->path, &info->transform, pt.x, pt.y);
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddQuadCurveToPoint:
|
||||
{
|
||||
CGPoint cpt = element->points[0];
|
||||
CGPoint pt = element->points[1];
|
||||
CGPathAddQuadCurveToPoint(info->path, &info->transform, cpt.x, cpt.y, pt.x, pt.y);
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddCurveToPoint:
|
||||
{
|
||||
CGPoint cpt1 = element->points[0];
|
||||
CGPoint cpt2 = element->points[1];
|
||||
CGPoint pt = element->points[2];
|
||||
CGPathAddCurveToPoint(info->path, &info->transform, cpt1.x, cpt1.y, cpt2.x, cpt2.y, pt.x, pt.y);
|
||||
break;
|
||||
}
|
||||
case kCGPathElementCloseSubpath:
|
||||
{
|
||||
CGPathCloseSubpath(info->path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TransformApplier ta;
|
||||
ta.path = CGPathCreateMutable();
|
||||
ta.transform = GfxMatrixToCGAffineTransform(aTransform);
|
||||
|
||||
CGPathApply(mPath, &ta, TransformApplier::TranformCGPathApplierFunc);
|
||||
return MakeAndAddRef<PathBuilderCG>(ta.path, aFillRule);
|
||||
}
|
||||
|
||||
static void
|
||||
StreamPathToSinkApplierFunc(void *vinfo, const CGPathElement *element)
|
||||
{
|
||||
PathSink *sink = reinterpret_cast<PathSink*>(vinfo);
|
||||
switch (element->type) {
|
||||
case kCGPathElementMoveToPoint:
|
||||
{
|
||||
CGPoint pt = element->points[0];
|
||||
sink->MoveTo(CGPointToPoint(pt));
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddLineToPoint:
|
||||
{
|
||||
CGPoint pt = element->points[0];
|
||||
sink->LineTo(CGPointToPoint(pt));
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddQuadCurveToPoint:
|
||||
{
|
||||
CGPoint cpt = element->points[0];
|
||||
CGPoint pt = element->points[1];
|
||||
sink->QuadraticBezierTo(CGPointToPoint(cpt),
|
||||
CGPointToPoint(pt));
|
||||
break;
|
||||
}
|
||||
case kCGPathElementAddCurveToPoint:
|
||||
{
|
||||
CGPoint cpt1 = element->points[0];
|
||||
CGPoint cpt2 = element->points[1];
|
||||
CGPoint pt = element->points[2];
|
||||
sink->BezierTo(CGPointToPoint(cpt1),
|
||||
CGPointToPoint(cpt2),
|
||||
CGPointToPoint(pt));
|
||||
break;
|
||||
}
|
||||
case kCGPathElementCloseSubpath:
|
||||
{
|
||||
sink->Close();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PathCG::StreamToSink(PathSink *aSink) const
|
||||
{
|
||||
CGPathApply(mPath, aSink, StreamPathToSinkApplierFunc);
|
||||
}
|
||||
|
||||
bool
|
||||
PathCG::ContainsPoint(const Point &aPoint, const Matrix &aTransform) const
|
||||
{
|
||||
Matrix inverse = aTransform;
|
||||
inverse.Invert();
|
||||
Point transformedPoint = inverse.TransformPoint(aPoint);
|
||||
// We could probably drop the input transform and just transform the point at the caller?
|
||||
CGPoint point = {transformedPoint.x, transformedPoint.y};
|
||||
|
||||
// The transform parameter of CGPathContainsPoint doesn't seem to work properly on OS X 10.5
|
||||
// so we transform aPoint ourselves.
|
||||
return CGPathContainsPoint(mPath, nullptr, point, mFillRule == FillRule::FILL_EVEN_ODD);
|
||||
}
|
||||
|
||||
static size_t
|
||||
PutBytesNull(void *info, const void *buffer, size_t count)
|
||||
{
|
||||
return count;
|
||||
}
|
||||
|
||||
/* The idea of a scratch context comes from WebKit */
|
||||
static CGContextRef
|
||||
CreateScratchContext()
|
||||
{
|
||||
CGDataConsumerCallbacks callbacks = {PutBytesNull, nullptr};
|
||||
CGDataConsumerRef consumer = CGDataConsumerCreate(nullptr, &callbacks);
|
||||
CGContextRef cg = CGPDFContextCreate(consumer, nullptr, nullptr);
|
||||
CGDataConsumerRelease(consumer);
|
||||
return cg;
|
||||
}
|
||||
|
||||
static CGContextRef
|
||||
ScratchContext()
|
||||
{
|
||||
static CGContextRef cg = CreateScratchContext();
|
||||
return cg;
|
||||
}
|
||||
|
||||
bool
|
||||
PathCG::StrokeContainsPoint(const StrokeOptions &aStrokeOptions,
|
||||
const Point &aPoint,
|
||||
const Matrix &aTransform) const
|
||||
{
|
||||
Matrix inverse = aTransform;
|
||||
inverse.Invert();
|
||||
Point transformedPoint = inverse.TransformPoint(aPoint);
|
||||
// We could probably drop the input transform and just transform the point at the caller?
|
||||
CGPoint point = {transformedPoint.x, transformedPoint.y};
|
||||
|
||||
CGContextRef cg = ScratchContext();
|
||||
|
||||
CGContextSaveGState(cg);
|
||||
|
||||
CGContextBeginPath(cg);
|
||||
CGContextAddPath(cg, mPath);
|
||||
|
||||
SetStrokeOptions(cg, aStrokeOptions);
|
||||
|
||||
CGContextReplacePathWithStrokedPath(cg);
|
||||
CGContextRestoreGState(cg);
|
||||
|
||||
CGPathRef sPath = CGContextCopyPath(cg);
|
||||
bool inStroke = CGPathContainsPoint(sPath, nullptr, point, false);
|
||||
CGPathRelease(sPath);
|
||||
|
||||
return inStroke;
|
||||
}
|
||||
|
||||
//XXX: what should these functions return for an empty path?
|
||||
// currently they return CGRectNull {inf,inf, 0, 0}
|
||||
Rect
|
||||
PathCG::GetBounds(const Matrix &aTransform) const
|
||||
{
|
||||
//XXX: are these bounds tight enough
|
||||
Rect bounds = CGRectToRect(CGPathGetBoundingBox(mPath));
|
||||
|
||||
//XXX: currently this returns the bounds of the transformed bounds
|
||||
// this is strictly looser than the bounds of the transformed path
|
||||
return aTransform.TransformBounds(bounds);
|
||||
}
|
||||
|
||||
Rect
|
||||
PathCG::GetStrokedBounds(const StrokeOptions &aStrokeOptions,
|
||||
const Matrix &aTransform) const
|
||||
{
|
||||
// 10.7 has CGPathCreateCopyByStrokingPath which we could use
|
||||
// instead of this scratch context business
|
||||
CGContextRef cg = ScratchContext();
|
||||
|
||||
CGContextSaveGState(cg);
|
||||
|
||||
CGContextBeginPath(cg);
|
||||
CGContextAddPath(cg, mPath);
|
||||
|
||||
SetStrokeOptions(cg, aStrokeOptions);
|
||||
|
||||
CGContextReplacePathWithStrokedPath(cg);
|
||||
Rect bounds = CGRectToRect(CGContextGetPathBoundingBox(cg));
|
||||
|
||||
CGContextRestoreGState(cg);
|
||||
|
||||
if (!bounds.IsFinite()) {
|
||||
return Rect();
|
||||
}
|
||||
|
||||
return aTransform.TransformBounds(bounds);
|
||||
}
|
||||
|
||||
|
||||
} // namespace gfx
|
||||
|
||||
} // namespace mozilla
|
||||
114
gfx/2d/PathCG.h
114
gfx/2d/PathCG.h
|
|
@ -1,114 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 20; 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/. */
|
||||
|
||||
#ifndef MOZILLA_GFX_PATHCG_H_
|
||||
#define MOZILLA_GFX_PATHCG_H_
|
||||
|
||||
#ifdef MOZ_WIDGET_COCOA
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
#else
|
||||
#include <CoreGraphics/CoreGraphics.h>
|
||||
#endif
|
||||
|
||||
#include "2D.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
class PathCG;
|
||||
|
||||
class PathBuilderCG : public PathBuilder
|
||||
{
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathBuilderCG)
|
||||
// absorbs a reference of aPath
|
||||
PathBuilderCG(CGMutablePathRef aPath, FillRule aFillRule)
|
||||
: mFillRule(aFillRule)
|
||||
{
|
||||
mCGPath = aPath;
|
||||
}
|
||||
|
||||
explicit PathBuilderCG(FillRule aFillRule)
|
||||
: mFillRule(aFillRule)
|
||||
{
|
||||
mCGPath = CGPathCreateMutable();
|
||||
}
|
||||
|
||||
virtual ~PathBuilderCG();
|
||||
|
||||
virtual void MoveTo(const Point &aPoint);
|
||||
virtual void LineTo(const Point &aPoint);
|
||||
virtual void BezierTo(const Point &aCP1,
|
||||
const Point &aCP2,
|
||||
const Point &aCP3);
|
||||
virtual void QuadraticBezierTo(const Point &aCP1,
|
||||
const Point &aCP2);
|
||||
virtual void Close();
|
||||
virtual void Arc(const Point &aOrigin, Float aRadius, Float aStartAngle,
|
||||
Float aEndAngle, bool aAntiClockwise = false);
|
||||
virtual Point CurrentPoint() const;
|
||||
|
||||
virtual already_AddRefed<Path> Finish();
|
||||
|
||||
virtual BackendType GetBackendType() const { return BackendType::SKIA; }
|
||||
|
||||
private:
|
||||
friend class PathCG;
|
||||
friend class ScaledFontMac;
|
||||
|
||||
void EnsureActive(const Point &aPoint);
|
||||
|
||||
CGMutablePathRef mCGPath;
|
||||
Point mCurrentPoint;
|
||||
Point mBeginPoint;
|
||||
FillRule mFillRule;
|
||||
};
|
||||
|
||||
class PathCG : public Path
|
||||
{
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathCG)
|
||||
PathCG(CGMutablePathRef aPath, FillRule aFillRule)
|
||||
: mPath(aPath)
|
||||
, mFillRule(aFillRule)
|
||||
{
|
||||
CGPathRetain(mPath);
|
||||
}
|
||||
virtual ~PathCG() { CGPathRelease(mPath); }
|
||||
|
||||
// Paths will always return BackendType::COREGRAPHICS, but note that they
|
||||
// are compatible with BackendType::COREGRAPHICS_ACCELERATED backend.
|
||||
virtual BackendType GetBackendType() const { return BackendType::SKIA; }
|
||||
|
||||
virtual already_AddRefed<PathBuilder> CopyToBuilder(FillRule aFillRule) const;
|
||||
virtual already_AddRefed<PathBuilder> TransformedCopyToBuilder(const Matrix &aTransform,
|
||||
FillRule aFillRule) const;
|
||||
|
||||
virtual bool ContainsPoint(const Point &aPoint, const Matrix &aTransform) const;
|
||||
virtual bool StrokeContainsPoint(const StrokeOptions &aStrokeOptions,
|
||||
const Point &aPoint,
|
||||
const Matrix &aTransform) const;
|
||||
virtual Rect GetBounds(const Matrix &aTransform = Matrix()) const;
|
||||
virtual Rect GetStrokedBounds(const StrokeOptions &aStrokeOptions,
|
||||
const Matrix &aTransform = Matrix()) const;
|
||||
|
||||
virtual void StreamToSink(PathSink *aSink) const;
|
||||
|
||||
virtual FillRule GetFillRule() const { return mFillRule; }
|
||||
|
||||
CGMutablePathRef GetPath() const { return mPath; }
|
||||
|
||||
private:
|
||||
friend class DrawTargetCG;
|
||||
|
||||
CGMutablePathRef mPath;
|
||||
Point mEndPoint;
|
||||
FillRule mFillRule;
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
#endif
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
// vim:set ts=2 sts=2 sw=2 et cin:
|
||||
/* 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/. */
|
||||
|
||||
#ifndef nsCoreAnimationSupport_h__
|
||||
#define nsCoreAnimationSupport_h__
|
||||
#ifdef XP_MACOSX
|
||||
|
||||
#import <OpenGL/OpenGL.h>
|
||||
#import <OpenGL/gl.h>
|
||||
#import "ApplicationServices/ApplicationServices.h"
|
||||
#include "gfxTypes.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/gfx/MacIOSurface.h"
|
||||
#include "nsError.h"
|
||||
|
||||
// Get the system color space.
|
||||
CGColorSpaceRef CreateSystemColorSpace();
|
||||
|
||||
// Manages a CARenderer
|
||||
struct _CGLContextObject;
|
||||
|
||||
enum AllowOfflineRendererEnum { ALLOW_OFFLINE_RENDERER, DISALLOW_OFFLINE_RENDERER };
|
||||
|
||||
class nsCARenderer : public mozilla::RefCounted<nsCARenderer> {
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_TYPENAME(nsCARenderer)
|
||||
nsCARenderer() : mCARenderer(nullptr), mWrapperCALayer(nullptr), mFBOTexture(0),
|
||||
mOpenGLContext(nullptr), mCGImage(nullptr), mCGData(nullptr),
|
||||
mIOSurface(nullptr), mFBO(0), mIOTexture(0),
|
||||
mUnsupportedWidth(UINT32_MAX), mUnsupportedHeight(UINT32_MAX),
|
||||
mAllowOfflineRenderer(DISALLOW_OFFLINE_RENDERER),
|
||||
mContentsScaleFactor(1.0) {}
|
||||
~nsCARenderer();
|
||||
// aWidth and aHeight are in "display pixels". A "display pixel" is the
|
||||
// smallest fully addressable part of a display. But in HiDPI modes each
|
||||
// "display pixel" corresponds to more than one device pixel. Multiply
|
||||
// display pixels by aContentsScaleFactor to get device pixels.
|
||||
nsresult SetupRenderer(void* aCALayer, int aWidth, int aHeight,
|
||||
double aContentsScaleFactor,
|
||||
AllowOfflineRendererEnum aAllowOfflineRenderer);
|
||||
// aWidth and aHeight are in "display pixels". Multiply by
|
||||
// aContentsScaleFactor to get device pixels.
|
||||
nsresult Render(int aWidth, int aHeight,
|
||||
double aContentsScaleFactor,
|
||||
CGImageRef *aOutCAImage);
|
||||
bool isInit() { return mCARenderer != nullptr; }
|
||||
/*
|
||||
* Render the CALayer to an IOSurface. If no IOSurface
|
||||
* is attached then an internal pixel buffer will be
|
||||
* used.
|
||||
*/
|
||||
void AttachIOSurface(MacIOSurface *aSurface);
|
||||
IOSurfaceID GetIOSurfaceID();
|
||||
// aX, aY, aWidth and aHeight are in "display pixels". Multiply by
|
||||
// surf->GetContentsScaleFactor() to get device pixels.
|
||||
static nsresult DrawSurfaceToCGContext(CGContextRef aContext,
|
||||
MacIOSurface *surf,
|
||||
CGColorSpaceRef aColorSpace,
|
||||
int aX, int aY,
|
||||
size_t aWidth, size_t aHeight);
|
||||
|
||||
// Remove & Add the layer without destroying
|
||||
// the renderer for fast back buffer swapping.
|
||||
void DetachCALayer();
|
||||
void AttachCALayer(void *aCALayer);
|
||||
#ifdef DEBUG
|
||||
static void SaveToDisk(MacIOSurface *surf);
|
||||
#endif
|
||||
private:
|
||||
// aWidth and aHeight are in "display pixels". Multiply by
|
||||
// mContentsScaleFactor to get device pixels.
|
||||
void SetBounds(int aWidth, int aHeight);
|
||||
// aWidth and aHeight are in "display pixels". Multiply by
|
||||
// mContentsScaleFactor to get device pixels.
|
||||
void SetViewport(int aWidth, int aHeight);
|
||||
void Destroy();
|
||||
|
||||
void *mCARenderer;
|
||||
void *mWrapperCALayer;
|
||||
GLuint mFBOTexture;
|
||||
_CGLContextObject *mOpenGLContext;
|
||||
CGImageRef mCGImage;
|
||||
void *mCGData;
|
||||
RefPtr<MacIOSurface> mIOSurface;
|
||||
uint32_t mFBO;
|
||||
uint32_t mIOTexture;
|
||||
int mUnsupportedWidth;
|
||||
int mUnsupportedHeight;
|
||||
AllowOfflineRendererEnum mAllowOfflineRenderer;
|
||||
double mContentsScaleFactor;
|
||||
};
|
||||
|
||||
#endif // XP_MACOSX
|
||||
#endif // nsCoreAnimationSupport_h__
|
||||
|
||||
|
|
@ -1,625 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
// vim:set ts=2 sts=2 sw=2 et cin:
|
||||
/* 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 "QuartzSupport.h"
|
||||
#include "nsDebug.h"
|
||||
#include "MacIOSurface.h"
|
||||
#include "mozilla/Sprintf.h"
|
||||
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
#import <AppKit/NSOpenGL.h>
|
||||
#include <dlfcn.h>
|
||||
#include "GLDefs.h"
|
||||
|
||||
#define IOSURFACE_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/IOSurface.framework/IOSurface"
|
||||
#define OPENGL_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/OpenGL.framework/OpenGL"
|
||||
#define COREGRAPHICS_FRAMEWORK_PATH \
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/CoreGraphics"
|
||||
|
||||
@interface CALayer (ContentsScale)
|
||||
- (double)contentsScale;
|
||||
- (void)setContentsScale:(double)scale;
|
||||
@end
|
||||
|
||||
|
||||
CGColorSpaceRef CreateSystemColorSpace() {
|
||||
CGColorSpaceRef cspace = ::CGDisplayCopyColorSpace(::CGMainDisplayID());
|
||||
if (!cspace) {
|
||||
cspace = ::CGColorSpaceCreateDeviceRGB();
|
||||
}
|
||||
return cspace;
|
||||
}
|
||||
|
||||
nsCARenderer::~nsCARenderer() {
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void cgdata_release_callback(void *aCGData, const void *data, size_t size) {
|
||||
if (aCGData) {
|
||||
free(aCGData);
|
||||
}
|
||||
}
|
||||
|
||||
void nsCARenderer::Destroy() {
|
||||
if (mCARenderer) {
|
||||
CARenderer* caRenderer = (CARenderer*)mCARenderer;
|
||||
// Bug 556453:
|
||||
// Explicitly remove the layer from the renderer
|
||||
// otherwise it does not always happen right away.
|
||||
caRenderer.layer = nullptr;
|
||||
[caRenderer release];
|
||||
}
|
||||
if (mWrapperCALayer) {
|
||||
CALayer* wrapperLayer = (CALayer*)mWrapperCALayer;
|
||||
[wrapperLayer release];
|
||||
}
|
||||
if (mOpenGLContext) {
|
||||
if (mFBO || mIOTexture || mFBOTexture) {
|
||||
// Release these resources with the context that allocated them
|
||||
CGLContextObj oldContext = ::CGLGetCurrentContext();
|
||||
::CGLSetCurrentContext(mOpenGLContext);
|
||||
|
||||
if (mFBOTexture) {
|
||||
::glDeleteTextures(1, &mFBOTexture);
|
||||
}
|
||||
if (mIOTexture) {
|
||||
::glDeleteTextures(1, &mIOTexture);
|
||||
}
|
||||
if (mFBO) {
|
||||
::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
|
||||
::glDeleteFramebuffersEXT(1, &mFBO);
|
||||
}
|
||||
|
||||
if (oldContext)
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
}
|
||||
::CGLDestroyContext((CGLContextObj)mOpenGLContext);
|
||||
}
|
||||
if (mCGImage) {
|
||||
::CGImageRelease(mCGImage);
|
||||
}
|
||||
// mCGData is deallocated by cgdata_release_callback
|
||||
|
||||
mCARenderer = nil;
|
||||
mWrapperCALayer = nil;
|
||||
mFBOTexture = 0;
|
||||
mOpenGLContext = nullptr;
|
||||
mCGImage = nullptr;
|
||||
mIOSurface = nullptr;
|
||||
mFBO = 0;
|
||||
mIOTexture = 0;
|
||||
}
|
||||
|
||||
nsresult nsCARenderer::SetupRenderer(void *aCALayer, int aWidth, int aHeight,
|
||||
double aContentsScaleFactor,
|
||||
AllowOfflineRendererEnum aAllowOfflineRenderer) {
|
||||
mAllowOfflineRenderer = aAllowOfflineRenderer;
|
||||
|
||||
if (aWidth == 0 || aHeight == 0 || aContentsScaleFactor <= 0)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (aWidth == mUnsupportedWidth &&
|
||||
aHeight == mUnsupportedHeight) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CGLPixelFormatAttribute attributes[] = {
|
||||
kCGLPFAAccelerated,
|
||||
kCGLPFADepthSize, (CGLPixelFormatAttribute)24,
|
||||
kCGLPFAAllowOfflineRenderers,
|
||||
(CGLPixelFormatAttribute)0
|
||||
};
|
||||
|
||||
if (mAllowOfflineRenderer == DISALLOW_OFFLINE_RENDERER) {
|
||||
attributes[3] = (CGLPixelFormatAttribute)0;
|
||||
}
|
||||
|
||||
GLint screen;
|
||||
CGLPixelFormatObj format;
|
||||
if (::CGLChoosePixelFormat(attributes, &format, &screen) != kCGLNoError) {
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (::CGLCreateContext(format, nullptr, &mOpenGLContext) != kCGLNoError) {
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
::CGLDestroyPixelFormat(format);
|
||||
|
||||
CARenderer* caRenderer = [[CARenderer rendererWithCGLContext:mOpenGLContext
|
||||
options:nil] retain];
|
||||
if (caRenderer == nil) {
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
CALayer* wrapperCALayer = [[CALayer layer] retain];
|
||||
if (wrapperCALayer == nil) {
|
||||
[caRenderer release];
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mCARenderer = caRenderer;
|
||||
mWrapperCALayer = wrapperCALayer;
|
||||
caRenderer.layer = wrapperCALayer;
|
||||
[wrapperCALayer addSublayer:(CALayer*)aCALayer];
|
||||
mContentsScaleFactor = aContentsScaleFactor;
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
SetBounds(aWidth, aHeight);
|
||||
|
||||
// We target rendering to a CGImage if no shared IOSurface are given.
|
||||
if (!mIOSurface) {
|
||||
mCGData = malloc(aWidth*intScaleFactor*aHeight*4*intScaleFactor);
|
||||
if (!mCGData) {
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
memset(mCGData, 0, aWidth*intScaleFactor*aHeight*4*intScaleFactor);
|
||||
|
||||
CGDataProviderRef dataProvider = nullptr;
|
||||
dataProvider = ::CGDataProviderCreateWithData(mCGData,
|
||||
mCGData, aHeight*intScaleFactor*aWidth*4*intScaleFactor,
|
||||
cgdata_release_callback);
|
||||
if (!dataProvider) {
|
||||
cgdata_release_callback(mCGData, mCGData,
|
||||
aHeight*intScaleFactor*aWidth*4*intScaleFactor);
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CGColorSpaceRef colorSpace = CreateSystemColorSpace();
|
||||
|
||||
mCGImage = ::CGImageCreate(aWidth * intScaleFactor, aHeight * intScaleFactor,
|
||||
8, 32, aWidth * intScaleFactor * 4, colorSpace,
|
||||
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
|
||||
dataProvider, nullptr, true, kCGRenderingIntentDefault);
|
||||
|
||||
::CGDataProviderRelease(dataProvider);
|
||||
::CGColorSpaceRelease(colorSpace);
|
||||
if (!mCGImage) {
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
CGLContextObj oldContext = ::CGLGetCurrentContext();
|
||||
::CGLSetCurrentContext(mOpenGLContext);
|
||||
|
||||
if (mIOSurface) {
|
||||
// Create the IOSurface mapped texture.
|
||||
::glGenTextures(1, &mIOTexture);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mIOTexture);
|
||||
::glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
::glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
MacIOSurfaceLib::CGLTexImageIOSurface2D(mOpenGLContext, GL_TEXTURE_RECTANGLE_ARB,
|
||||
GL_RGBA, aWidth * intScaleFactor,
|
||||
aHeight * intScaleFactor,
|
||||
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
|
||||
mIOSurface->mIOSurfacePtr, 0);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
|
||||
} else {
|
||||
::glGenTextures(1, &mFBOTexture);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mFBOTexture);
|
||||
::glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
::glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
|
||||
}
|
||||
|
||||
// Create the fbo
|
||||
::glGenFramebuffersEXT(1, &mFBO);
|
||||
::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
|
||||
if (mIOSurface) {
|
||||
::glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_TEXTURE_RECTANGLE_ARB, mIOTexture, 0);
|
||||
} else {
|
||||
::glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_TEXTURE_RECTANGLE_ARB, mFBOTexture, 0);
|
||||
}
|
||||
|
||||
|
||||
// Make sure that the Framebuffer configuration is supported on the client machine
|
||||
GLenum fboStatus;
|
||||
fboStatus = ::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
||||
if (fboStatus != GL_FRAMEBUFFER_COMPLETE_EXT) {
|
||||
NS_ERROR("FBO not supported");
|
||||
if (oldContext)
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
SetViewport(aWidth, aHeight);
|
||||
|
||||
GLenum result = ::glGetError();
|
||||
if (result != GL_NO_ERROR) {
|
||||
NS_ERROR("Unexpected OpenGL Error");
|
||||
mUnsupportedWidth = aWidth;
|
||||
mUnsupportedHeight = aHeight;
|
||||
Destroy();
|
||||
if (oldContext)
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (oldContext)
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void nsCARenderer::SetBounds(int aWidth, int aHeight) {
|
||||
CARenderer* caRenderer = (CARenderer*)mCARenderer;
|
||||
CALayer* wrapperLayer = (CALayer*)mWrapperCALayer;
|
||||
NSArray* sublayers = [wrapperLayer sublayers];
|
||||
CALayer* pluginLayer = (CALayer*) [sublayers objectAtIndex:0];
|
||||
|
||||
// Create a transaction and disable animations
|
||||
// to make the position update instant.
|
||||
[CATransaction begin];
|
||||
NSMutableDictionary *newActions =
|
||||
[[NSMutableDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSNull null], @"onOrderIn",
|
||||
[NSNull null], @"onOrderOut",
|
||||
[NSNull null], @"sublayers",
|
||||
[NSNull null], @"contents",
|
||||
[NSNull null], @"position",
|
||||
[NSNull null], @"bounds",
|
||||
nil];
|
||||
wrapperLayer.actions = newActions;
|
||||
[newActions release];
|
||||
|
||||
// If we're in HiDPI mode, mContentsScaleFactor will (presumably) be 2.0.
|
||||
// For some reason, to make things work properly in HiDPI mode we need to
|
||||
// make caRenderer's 'bounds' and 'layer' different sizes -- to set 'bounds'
|
||||
// to the size of 'layer's backing store. And to avoid this possibly
|
||||
// confusing the plugin, we need to hide it's effects from the plugin by
|
||||
// making pluginLayer (usually the CALayer* provided by the plugin) a
|
||||
// sublayer of our own wrapperLayer (see bug 829284).
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
[CATransaction setValue: [NSNumber numberWithFloat:0.0f] forKey: kCATransactionAnimationDuration];
|
||||
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
|
||||
[wrapperLayer setBounds:CGRectMake(0, 0, aWidth, aHeight)];
|
||||
[wrapperLayer setPosition:CGPointMake(aWidth/2.0, aHeight/2.0)];
|
||||
[pluginLayer setBounds:CGRectMake(0, 0, aWidth, aHeight)];
|
||||
[pluginLayer setFrame:CGRectMake(0, 0, aWidth, aHeight)];
|
||||
caRenderer.bounds = CGRectMake(0, 0, aWidth * intScaleFactor, aHeight * intScaleFactor);
|
||||
if (mContentsScaleFactor != 1.0) {
|
||||
CGAffineTransform affineTransform = [wrapperLayer affineTransform];
|
||||
affineTransform.a = mContentsScaleFactor;
|
||||
affineTransform.d = mContentsScaleFactor;
|
||||
affineTransform.tx = ((double)aWidth)/mContentsScaleFactor;
|
||||
affineTransform.ty = ((double)aHeight)/mContentsScaleFactor;
|
||||
[wrapperLayer setAffineTransform:affineTransform];
|
||||
} else {
|
||||
// These settings are the default values. But they might have been
|
||||
// changed as above if we were previously running in a HiDPI mode
|
||||
// (i.e. if we just switched from that to a non-HiDPI mode).
|
||||
[wrapperLayer setAffineTransform:CGAffineTransformIdentity];
|
||||
}
|
||||
[CATransaction commit];
|
||||
}
|
||||
|
||||
void nsCARenderer::SetViewport(int aWidth, int aHeight) {
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
aWidth *= intScaleFactor;
|
||||
aHeight *= intScaleFactor;
|
||||
|
||||
::glViewport(0.0, 0.0, aWidth, aHeight);
|
||||
::glMatrixMode(GL_PROJECTION);
|
||||
::glLoadIdentity();
|
||||
::glOrtho (0.0, aWidth, 0.0, aHeight, -1, 1);
|
||||
|
||||
// Render upside down to speed up CGContextDrawImage
|
||||
::glTranslatef(0.0f, aHeight, 0.0);
|
||||
::glScalef(1.0, -1.0, 1.0);
|
||||
}
|
||||
|
||||
void nsCARenderer::AttachIOSurface(MacIOSurface *aSurface) {
|
||||
if (mIOSurface &&
|
||||
aSurface->GetIOSurfaceID() == mIOSurface->GetIOSurfaceID()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mIOSurface = aSurface;
|
||||
|
||||
// Update the framebuffer and viewport
|
||||
if (mCARenderer) {
|
||||
CARenderer* caRenderer = (CARenderer*)mCARenderer;
|
||||
size_t intScaleFactor = ceil(mContentsScaleFactor);
|
||||
int width = caRenderer.bounds.size.width / intScaleFactor;
|
||||
int height = caRenderer.bounds.size.height / intScaleFactor;
|
||||
|
||||
CGLContextObj oldContext = ::CGLGetCurrentContext();
|
||||
::CGLSetCurrentContext(mOpenGLContext);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mIOTexture);
|
||||
MacIOSurfaceLib::CGLTexImageIOSurface2D(mOpenGLContext, GL_TEXTURE_RECTANGLE_ARB,
|
||||
GL_RGBA, mIOSurface->GetDevicePixelWidth(),
|
||||
mIOSurface->GetDevicePixelHeight(),
|
||||
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
|
||||
mIOSurface->mIOSurfacePtr, 0);
|
||||
::glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
|
||||
|
||||
// Rebind the FBO to make it live
|
||||
::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
|
||||
|
||||
if (static_cast<int>(mIOSurface->GetWidth()) != width ||
|
||||
static_cast<int>(mIOSurface->GetHeight()) != height) {
|
||||
width = mIOSurface->GetWidth();
|
||||
height = mIOSurface->GetHeight();
|
||||
SetBounds(width, height);
|
||||
SetViewport(width, height);
|
||||
}
|
||||
|
||||
if (oldContext) {
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IOSurfaceID nsCARenderer::GetIOSurfaceID() {
|
||||
if (!mIOSurface) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mIOSurface->GetIOSurfaceID();
|
||||
}
|
||||
|
||||
nsresult nsCARenderer::Render(int aWidth, int aHeight,
|
||||
double aContentsScaleFactor,
|
||||
CGImageRef *aOutCGImage) {
|
||||
if (!aOutCGImage && !mIOSurface) {
|
||||
NS_ERROR("No target destination for rendering");
|
||||
} else if (aOutCGImage) {
|
||||
// We are expected to return a CGImageRef, we will set
|
||||
// it to nullptr in case we fail before the image is ready.
|
||||
*aOutCGImage = nullptr;
|
||||
}
|
||||
|
||||
if (aWidth == 0 || aHeight == 0 || aContentsScaleFactor <= 0)
|
||||
return NS_OK;
|
||||
|
||||
if (!mCARenderer || !mWrapperCALayer) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CARenderer* caRenderer = (CARenderer*)mCARenderer;
|
||||
CALayer* wrapperLayer = (CALayer*)mWrapperCALayer;
|
||||
size_t intScaleFactor = ceil(aContentsScaleFactor);
|
||||
int renderer_width = caRenderer.bounds.size.width / intScaleFactor;
|
||||
int renderer_height = caRenderer.bounds.size.height / intScaleFactor;
|
||||
|
||||
if (renderer_width != aWidth || renderer_height != aHeight ||
|
||||
mContentsScaleFactor != aContentsScaleFactor) {
|
||||
// XXX: This should be optimized to not rescale the buffer
|
||||
// if we are resizing down.
|
||||
// caLayer may be the CALayer* provided by the plugin, so we need to
|
||||
// preserve it across the call to Destroy().
|
||||
NSArray* sublayers = [wrapperLayer sublayers];
|
||||
CALayer* caLayer = (CALayer*) [sublayers objectAtIndex:0];
|
||||
// mIOSurface is set by AttachIOSurface(), not by SetupRenderer(). So
|
||||
// since it may have been set by a prior call to AttachIOSurface(), we
|
||||
// need to preserve it across the call to Destroy().
|
||||
RefPtr<MacIOSurface> ioSurface = mIOSurface;
|
||||
Destroy();
|
||||
mIOSurface = ioSurface;
|
||||
if (SetupRenderer(caLayer, aWidth, aHeight, aContentsScaleFactor,
|
||||
mAllowOfflineRenderer) != NS_OK) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
caRenderer = (CARenderer*)mCARenderer;
|
||||
}
|
||||
|
||||
CGLContextObj oldContext = ::CGLGetCurrentContext();
|
||||
::CGLSetCurrentContext(mOpenGLContext);
|
||||
if (!mIOSurface) {
|
||||
// If no shared IOSurface is given render to our own
|
||||
// texture for readback.
|
||||
::glGenTextures(1, &mFBOTexture);
|
||||
}
|
||||
|
||||
GLenum result = ::glGetError();
|
||||
if (result != GL_NO_ERROR) {
|
||||
NS_ERROR("Unexpected OpenGL Error");
|
||||
Destroy();
|
||||
if (oldContext)
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
::glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||
::glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
[CATransaction commit];
|
||||
double caTime = ::CACurrentMediaTime();
|
||||
[caRenderer beginFrameAtTime:caTime timeStamp:nullptr];
|
||||
[caRenderer addUpdateRect:CGRectMake(0,0, aWidth * intScaleFactor,
|
||||
aHeight * intScaleFactor)];
|
||||
[caRenderer render];
|
||||
[caRenderer endFrame];
|
||||
|
||||
// Read the data back either to the IOSurface or mCGImage.
|
||||
if (mIOSurface) {
|
||||
::glFlush();
|
||||
} else {
|
||||
::glPixelStorei(GL_PACK_ALIGNMENT, 4);
|
||||
::glPixelStorei(GL_PACK_ROW_LENGTH, 0);
|
||||
::glPixelStorei(GL_PACK_SKIP_ROWS, 0);
|
||||
::glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
|
||||
|
||||
::glReadPixels(0.0f, 0.0f, aWidth * intScaleFactor,
|
||||
aHeight * intScaleFactor,
|
||||
GL_BGRA, GL_UNSIGNED_BYTE,
|
||||
mCGData);
|
||||
|
||||
*aOutCGImage = mCGImage;
|
||||
}
|
||||
|
||||
if (oldContext) {
|
||||
::CGLSetCurrentContext(oldContext);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsCARenderer::DrawSurfaceToCGContext(CGContextRef aContext,
|
||||
MacIOSurface *surf,
|
||||
CGColorSpaceRef aColorSpace,
|
||||
int aX, int aY,
|
||||
size_t aWidth, size_t aHeight) {
|
||||
surf->Lock();
|
||||
size_t bytesPerRow = surf->GetBytesPerRow();
|
||||
size_t ioWidth = surf->GetWidth();
|
||||
size_t ioHeight = surf->GetHeight();
|
||||
|
||||
// We get rendering glitches if we use a width/height that falls
|
||||
// outside of the IOSurface.
|
||||
if (aWidth + aX > ioWidth)
|
||||
aWidth = ioWidth - aX;
|
||||
if (aHeight + aY > ioHeight)
|
||||
aHeight = ioHeight - aY;
|
||||
|
||||
if (aX < 0 || static_cast<size_t>(aX) >= ioWidth ||
|
||||
aY < 0 || static_cast<size_t>(aY) >= ioHeight) {
|
||||
surf->Unlock();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
void* ioData = surf->GetBaseAddress();
|
||||
double scaleFactor = surf->GetContentsScaleFactor();
|
||||
size_t intScaleFactor = ceil(surf->GetContentsScaleFactor());
|
||||
CGDataProviderRef dataProvider = ::CGDataProviderCreateWithData(ioData,
|
||||
ioData, ioHeight*intScaleFactor*(bytesPerRow)*4,
|
||||
nullptr); //No release callback
|
||||
if (!dataProvider) {
|
||||
surf->Unlock();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CGImageRef cgImage = ::CGImageCreate(ioWidth * intScaleFactor,
|
||||
ioHeight * intScaleFactor, 8, 32, bytesPerRow, aColorSpace,
|
||||
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
|
||||
dataProvider, nullptr, true, kCGRenderingIntentDefault);
|
||||
::CGDataProviderRelease(dataProvider);
|
||||
if (!cgImage) {
|
||||
surf->Unlock();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
CGImageRef subImage = ::CGImageCreateWithImageInRect(cgImage,
|
||||
::CGRectMake(aX * scaleFactor,
|
||||
aY * scaleFactor,
|
||||
aWidth * scaleFactor,
|
||||
aHeight * scaleFactor));
|
||||
if (!subImage) {
|
||||
::CGImageRelease(cgImage);
|
||||
surf->Unlock();
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
::CGContextScaleCTM(aContext, 1.0f, -1.0f);
|
||||
::CGContextDrawImage(aContext,
|
||||
CGRectMake(aX * scaleFactor,
|
||||
(-(CGFloat)aY - (CGFloat)aHeight) * scaleFactor,
|
||||
aWidth * scaleFactor,
|
||||
aHeight * scaleFactor),
|
||||
subImage);
|
||||
|
||||
::CGImageRelease(subImage);
|
||||
::CGImageRelease(cgImage);
|
||||
surf->Unlock();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void nsCARenderer::DetachCALayer() {
|
||||
CALayer* wrapperLayer = (CALayer*)mWrapperCALayer;
|
||||
NSArray* sublayers = [wrapperLayer sublayers];
|
||||
CALayer* oldLayer = (CALayer*) [sublayers objectAtIndex:0];
|
||||
[oldLayer removeFromSuperlayer];
|
||||
}
|
||||
|
||||
void nsCARenderer::AttachCALayer(void *aCALayer) {
|
||||
CALayer* wrapperLayer = (CALayer*)mWrapperCALayer;
|
||||
NSArray* sublayers = [wrapperLayer sublayers];
|
||||
CALayer* oldLayer = (CALayer*) [sublayers objectAtIndex:0];
|
||||
[oldLayer removeFromSuperlayer];
|
||||
[wrapperLayer addSublayer:(CALayer*)aCALayer];
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
int sSaveToDiskSequence = 0;
|
||||
void nsCARenderer::SaveToDisk(MacIOSurface *surf) {
|
||||
surf->Lock();
|
||||
size_t bytesPerRow = surf->GetBytesPerRow();
|
||||
size_t ioWidth = surf->GetWidth();
|
||||
size_t ioHeight = surf->GetHeight();
|
||||
void* ioData = surf->GetBaseAddress();
|
||||
CGDataProviderRef dataProvider = ::CGDataProviderCreateWithData(ioData,
|
||||
ioData, ioHeight*(bytesPerRow)*4,
|
||||
nullptr); //No release callback
|
||||
if (!dataProvider) {
|
||||
surf->Unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
CGColorSpaceRef colorSpace = CreateSystemColorSpace();
|
||||
CGImageRef cgImage = ::CGImageCreate(ioWidth, ioHeight, 8, 32, bytesPerRow,
|
||||
colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
|
||||
dataProvider, nullptr, true, kCGRenderingIntentDefault);
|
||||
::CGDataProviderRelease(dataProvider);
|
||||
::CGColorSpaceRelease(colorSpace);
|
||||
if (!cgImage) {
|
||||
surf->Unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
char cstr[1000];
|
||||
SprintfLiteral(cstr, "file:///Users/benoitgirard/debug/iosurface_%i.png", ++sSaveToDiskSequence);
|
||||
|
||||
CFStringRef cfStr = ::CFStringCreateWithCString(kCFAllocatorDefault, cstr, kCFStringEncodingMacRoman);
|
||||
|
||||
printf("Exporting: %s\n", cstr);
|
||||
CFURLRef url = ::CFURLCreateWithString( nullptr, cfStr, nullptr);
|
||||
::CFRelease(cfStr);
|
||||
|
||||
CFStringRef type = kUTTypePNG;
|
||||
size_t count = 1;
|
||||
CFDictionaryRef options = nullptr;
|
||||
CGImageDestinationRef dest = ::CGImageDestinationCreateWithURL(url, type, count, options);
|
||||
::CFRelease(url);
|
||||
|
||||
::CGImageDestinationAddImage(dest, cgImage, nullptr);
|
||||
|
||||
::CGImageDestinationFinalize(dest);
|
||||
::CFRelease(dest);
|
||||
::CGImageRelease(cgImage);
|
||||
|
||||
surf->Unlock();
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,247 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 20; 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 "ScaledFontMac.h"
|
||||
#ifdef USE_SKIA
|
||||
#include "PathSkia.h"
|
||||
#include "skia/include/core/SkPaint.h"
|
||||
#include "skia/include/core/SkPath.h"
|
||||
#include "skia/include/ports/SkTypeface_mac.h"
|
||||
#endif
|
||||
#include <vector>
|
||||
#include <dlfcn.h>
|
||||
#ifdef MOZ_WIDGET_UIKIT
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_WIDGET_COCOA
|
||||
// prototype for private API
|
||||
extern "C" {
|
||||
CGPathRef CGFontGetGlyphPath(CGFontRef fontRef, CGAffineTransform *textTransform, int unknown, CGGlyph glyph);
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef USE_CAIRO_SCALED_FONT
|
||||
#include "cairo-quartz.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
ScaledFontMac::CTFontDrawGlyphsFuncT* ScaledFontMac::CTFontDrawGlyphsPtr = nullptr;
|
||||
bool ScaledFontMac::sSymbolLookupDone = false;
|
||||
|
||||
ScaledFontMac::ScaledFontMac(CGFontRef aFont, Float aSize)
|
||||
: ScaledFontBase(aSize)
|
||||
{
|
||||
if (!sSymbolLookupDone) {
|
||||
CTFontDrawGlyphsPtr =
|
||||
(CTFontDrawGlyphsFuncT*)dlsym(RTLD_DEFAULT, "CTFontDrawGlyphs");
|
||||
sSymbolLookupDone = true;
|
||||
}
|
||||
|
||||
// XXX: should we be taking a reference
|
||||
mFont = CGFontRetain(aFont);
|
||||
if (CTFontDrawGlyphsPtr != nullptr) {
|
||||
// only create mCTFont if we're going to be using the CTFontDrawGlyphs API
|
||||
mCTFont = CTFontCreateWithGraphicsFont(aFont, aSize, nullptr, nullptr);
|
||||
} else {
|
||||
mCTFont = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
ScaledFontMac::~ScaledFontMac()
|
||||
{
|
||||
if (mCTFont) {
|
||||
CFRelease(mCTFont);
|
||||
}
|
||||
CGFontRelease(mFont);
|
||||
}
|
||||
|
||||
#ifdef USE_SKIA
|
||||
SkTypeface* ScaledFontMac::GetSkTypeface()
|
||||
{
|
||||
if (!mTypeface) {
|
||||
if (mCTFont) {
|
||||
mTypeface = SkCreateTypefaceFromCTFont(mCTFont);
|
||||
} else {
|
||||
CTFontRef fontFace = CTFontCreateWithGraphicsFont(mFont, mSize, nullptr, nullptr);
|
||||
mTypeface = SkCreateTypefaceFromCTFont(fontFace);
|
||||
CFRelease(fontFace);
|
||||
}
|
||||
}
|
||||
return mTypeface;
|
||||
}
|
||||
#endif
|
||||
|
||||
// private API here are the public options on OS X
|
||||
// CTFontCreatePathForGlyph
|
||||
// ATSUGlyphGetCubicPaths
|
||||
// we've used this in cairo sucessfully for some time.
|
||||
// Note: cairo dlsyms it. We could do that but maybe it's
|
||||
// safe just to use?
|
||||
|
||||
already_AddRefed<Path>
|
||||
ScaledFontMac::GetPathForGlyphs(const GlyphBuffer &aBuffer, const DrawTarget *aTarget)
|
||||
{
|
||||
return ScaledFontBase::GetPathForGlyphs(aBuffer, aTarget);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
CalcTableChecksum(const uint32_t *tableStart, uint32_t length, bool skipChecksumAdjust = false)
|
||||
{
|
||||
uint32_t sum = 0L;
|
||||
const uint32_t *table = tableStart;
|
||||
const uint32_t *end = table+((length+3) & ~3) / sizeof(uint32_t);
|
||||
while (table < end) {
|
||||
if (skipChecksumAdjust && (table - tableStart) == 2) {
|
||||
table++;
|
||||
} else {
|
||||
sum += CFSwapInt32BigToHost(*table++);
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
struct TableRecord {
|
||||
uint32_t tag;
|
||||
uint32_t checkSum;
|
||||
uint32_t offset;
|
||||
uint32_t length;
|
||||
CFDataRef data;
|
||||
};
|
||||
|
||||
int maxPow2LessThan(int a)
|
||||
{
|
||||
int x = 1;
|
||||
int shift = 0;
|
||||
while ((x<<(shift+1)) < a) {
|
||||
shift++;
|
||||
}
|
||||
return shift;
|
||||
}
|
||||
|
||||
struct writeBuf
|
||||
{
|
||||
explicit writeBuf(int size)
|
||||
{
|
||||
this->data = new unsigned char [size];
|
||||
this->offset = 0;
|
||||
}
|
||||
~writeBuf() {
|
||||
delete this->data;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void writeElement(T a)
|
||||
{
|
||||
*reinterpret_cast<T*>(&this->data[this->offset]) = a;
|
||||
this->offset += sizeof(T);
|
||||
}
|
||||
|
||||
void writeMem(const void *data, unsigned long length)
|
||||
{
|
||||
memcpy(&this->data[this->offset], data, length);
|
||||
this->offset += length;
|
||||
}
|
||||
|
||||
void align()
|
||||
{
|
||||
while (this->offset & 3) {
|
||||
this->data[this->offset] = 0;
|
||||
this->offset++;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char *data;
|
||||
int offset;
|
||||
};
|
||||
|
||||
bool
|
||||
ScaledFontMac::GetFontFileData(FontFileDataOutput aDataCallback, void *aBaton)
|
||||
{
|
||||
// We'll reconstruct a TTF font from the tables we can get from the CGFont
|
||||
CFArrayRef tags = CGFontCopyTableTags(mFont);
|
||||
CFIndex count = CFArrayGetCount(tags);
|
||||
|
||||
TableRecord *records = new TableRecord[count];
|
||||
uint32_t offset = 0;
|
||||
offset += sizeof(uint32_t)*3;
|
||||
offset += sizeof(uint32_t)*4*count;
|
||||
bool CFF = false;
|
||||
for (CFIndex i = 0; i<count; i++) {
|
||||
uint32_t tag = (uint32_t)(uintptr_t)CFArrayGetValueAtIndex(tags, i);
|
||||
if (tag == 0x43464620) // 'CFF '
|
||||
CFF = true;
|
||||
CFDataRef data = CGFontCopyTableForTag(mFont, tag);
|
||||
records[i].tag = tag;
|
||||
records[i].offset = offset;
|
||||
records[i].data = data;
|
||||
records[i].length = CFDataGetLength(data);
|
||||
bool skipChecksumAdjust = (tag == 0x68656164); // 'head'
|
||||
records[i].checkSum = CalcTableChecksum(reinterpret_cast<const uint32_t*>(CFDataGetBytePtr(data)),
|
||||
records[i].length, skipChecksumAdjust);
|
||||
offset += records[i].length;
|
||||
// 32 bit align the tables
|
||||
offset = (offset + 3) & ~3;
|
||||
}
|
||||
CFRelease(tags);
|
||||
|
||||
struct writeBuf buf(offset);
|
||||
// write header/offset table
|
||||
if (CFF) {
|
||||
buf.writeElement(CFSwapInt32HostToBig(0x4f54544f));
|
||||
} else {
|
||||
buf.writeElement(CFSwapInt32HostToBig(0x00010000));
|
||||
}
|
||||
buf.writeElement(CFSwapInt16HostToBig(count));
|
||||
buf.writeElement(CFSwapInt16HostToBig((1<<maxPow2LessThan(count))*16));
|
||||
buf.writeElement(CFSwapInt16HostToBig(maxPow2LessThan(count)));
|
||||
buf.writeElement(CFSwapInt16HostToBig(count*16-((1<<maxPow2LessThan(count))*16)));
|
||||
|
||||
// write table record entries
|
||||
for (CFIndex i = 0; i<count; i++) {
|
||||
buf.writeElement(CFSwapInt32HostToBig(records[i].tag));
|
||||
buf.writeElement(CFSwapInt32HostToBig(records[i].checkSum));
|
||||
buf.writeElement(CFSwapInt32HostToBig(records[i].offset));
|
||||
buf.writeElement(CFSwapInt32HostToBig(records[i].length));
|
||||
}
|
||||
|
||||
// write tables
|
||||
int checkSumAdjustmentOffset = 0;
|
||||
for (CFIndex i = 0; i<count; i++) {
|
||||
if (records[i].tag == 0x68656164) {
|
||||
checkSumAdjustmentOffset = buf.offset + 2*4;
|
||||
}
|
||||
buf.writeMem(CFDataGetBytePtr(records[i].data), CFDataGetLength(records[i].data));
|
||||
buf.align();
|
||||
CFRelease(records[i].data);
|
||||
}
|
||||
delete[] records;
|
||||
|
||||
// clear the checksumAdjust field before checksumming the whole font
|
||||
memset(&buf.data[checkSumAdjustmentOffset], 0, sizeof(uint32_t));
|
||||
uint32_t fontChecksum = CFSwapInt32HostToBig(0xb1b0afba - CalcTableChecksum(reinterpret_cast<const uint32_t*>(buf.data), offset));
|
||||
// set checkSumAdjust to the computed checksum
|
||||
memcpy(&buf.data[checkSumAdjustmentOffset], &fontChecksum, sizeof(fontChecksum));
|
||||
|
||||
// we always use an index of 0
|
||||
aDataCallback(buf.data, buf.offset, 0, mSize, aBaton);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
#ifdef USE_CAIRO_SCALED_FONT
|
||||
cairo_font_face_t*
|
||||
ScaledFontMac::GetCairoFontFace()
|
||||
{
|
||||
MOZ_ASSERT(mFont);
|
||||
return cairo_quartz_font_face_create_for_cgfont(mFont);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 20; 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/. */
|
||||
|
||||
#ifndef MOZILLA_GFX_SCALEDFONTMAC_H_
|
||||
#define MOZILLA_GFX_SCALEDFONTMAC_H_
|
||||
|
||||
#ifdef MOZ_WIDGET_COCOA
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
#else
|
||||
#include <CoreGraphics/CoreGraphics.h>
|
||||
#include <CoreText/CoreText.h>
|
||||
#endif
|
||||
|
||||
#include "2D.h"
|
||||
|
||||
#include "ScaledFontBase.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
class GlyphRenderingOptionsCG : public GlyphRenderingOptions
|
||||
{
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(GlyphRenderingOptionsCG, override)
|
||||
|
||||
explicit GlyphRenderingOptionsCG(const Color &aFontSmoothingBackgroundColor)
|
||||
: mFontSmoothingBackgroundColor(aFontSmoothingBackgroundColor)
|
||||
{}
|
||||
|
||||
const Color &FontSmoothingBackgroundColor() const { return mFontSmoothingBackgroundColor; }
|
||||
|
||||
virtual FontType GetType() const override { return FontType::MAC; }
|
||||
|
||||
private:
|
||||
Color mFontSmoothingBackgroundColor;
|
||||
};
|
||||
|
||||
class ScaledFontMac : public ScaledFontBase
|
||||
{
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(ScaledFontMac)
|
||||
ScaledFontMac(CGFontRef aFont, Float aSize);
|
||||
virtual ~ScaledFontMac();
|
||||
|
||||
virtual FontType GetType() const { return FontType::MAC; }
|
||||
#ifdef USE_SKIA
|
||||
virtual SkTypeface* GetSkTypeface();
|
||||
#endif
|
||||
virtual already_AddRefed<Path> GetPathForGlyphs(const GlyphBuffer &aBuffer, const DrawTarget *aTarget);
|
||||
virtual bool GetFontFileData(FontFileDataOutput aDataCallback, void *aBaton);
|
||||
|
||||
#ifdef USE_CAIRO_SCALED_FONT
|
||||
cairo_font_face_t* GetCairoFontFace();
|
||||
#endif
|
||||
|
||||
private:
|
||||
friend class DrawTargetSkia;
|
||||
CGFontRef mFont;
|
||||
CTFontRef mCTFont; // only created if CTFontDrawGlyphs is available, otherwise null
|
||||
|
||||
typedef void (CTFontDrawGlyphsFuncT)(CTFontRef,
|
||||
const CGGlyph[], const CGPoint[],
|
||||
size_t, CGContextRef);
|
||||
|
||||
static bool sSymbolLookupDone;
|
||||
|
||||
public:
|
||||
// function pointer for CTFontDrawGlyphs, if available;
|
||||
// initialized the first time a ScaledFontMac is created,
|
||||
// so it will be valid by the time DrawTargetCG wants to use it
|
||||
static CTFontDrawGlyphsFuncT* CTFontDrawGlyphsPtr;
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
#endif /* MOZILLA_GFX_SCALEDFONTMAC_H_ */
|
||||
|
|
@ -58,16 +58,7 @@ EXPORTS.mozilla.gfx += [
|
|||
|
||||
EXPORTS.mozilla.gfx += ['ssse3-scaler.h']
|
||||
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'uikit'):
|
||||
EXPORTS.mozilla.gfx += [
|
||||
'MacIOSurface.h',
|
||||
]
|
||||
SOURCES += [
|
||||
'NativeFontResourceMac.cpp',
|
||||
'PathCG.cpp',
|
||||
'ScaledFontMac.cpp',
|
||||
]
|
||||
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
||||
SOURCES += [
|
||||
'DrawTargetD2D1.cpp',
|
||||
'ExtendInputEffectD2D1.cpp',
|
||||
|
|
@ -181,15 +172,6 @@ if CONFIG['CLANG_CXX']:
|
|||
if CONFIG['GNU_CXX']:
|
||||
CXXFLAGS += ['-Wno-error=shadow']
|
||||
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
||||
EXPORTS.mozilla.gfx += [
|
||||
'QuartzSupport.h',
|
||||
]
|
||||
SOURCES += [
|
||||
'MacIOSurface.cpp',
|
||||
'QuartzSupport.mm',
|
||||
]
|
||||
|
||||
if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['BUILD_ARM_NEON']:
|
||||
SOURCES += ['BlurNEON.cpp']
|
||||
SOURCES['BlurNEON.cpp'].flags += CONFIG['NEON_FLAGS']
|
||||
|
|
|
|||
|
|
@ -1,83 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; 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/. */
|
||||
|
||||
#ifndef mozilla_ipc_SharedMemoryBasic_mach_h
|
||||
#define mozilla_ipc_SharedMemoryBasic_mach_h
|
||||
|
||||
#include "base/file_descriptor_posix.h"
|
||||
#include "base/process.h"
|
||||
|
||||
#include "SharedMemory.h"
|
||||
#include <mach/port.h>
|
||||
|
||||
//
|
||||
// This is a low-level wrapper around platform shared memory. Don't
|
||||
// use it directly; use Shmem allocated through IPDL interfaces.
|
||||
//
|
||||
|
||||
class MachPortSender;
|
||||
class ReceivePort;
|
||||
|
||||
namespace mozilla {
|
||||
namespace ipc {
|
||||
|
||||
class SharedMemoryBasic final : public SharedMemoryCommon<mach_port_t>
|
||||
{
|
||||
public:
|
||||
static void SetupMachMemory(pid_t pid,
|
||||
ReceivePort* listen_port,
|
||||
MachPortSender* listen_port_ack,
|
||||
MachPortSender* send_port,
|
||||
ReceivePort* send_port_ack,
|
||||
bool pidIsParent);
|
||||
|
||||
static void CleanupForPid(pid_t pid);
|
||||
|
||||
static void Shutdown();
|
||||
|
||||
SharedMemoryBasic();
|
||||
|
||||
virtual bool SetHandle(const Handle& aHandle) override;
|
||||
|
||||
virtual bool Create(size_t aNbytes) override;
|
||||
|
||||
virtual bool Map(size_t nBytes) override;
|
||||
|
||||
virtual void CloseHandle() override;
|
||||
|
||||
virtual void* memory() const override
|
||||
{
|
||||
return mMemory;
|
||||
}
|
||||
|
||||
virtual SharedMemoryType Type() const override
|
||||
{
|
||||
return TYPE_BASIC;
|
||||
}
|
||||
|
||||
static Handle NULLHandle()
|
||||
{
|
||||
return Handle();
|
||||
}
|
||||
|
||||
|
||||
virtual bool IsHandleValid(const Handle &aHandle) const override;
|
||||
|
||||
virtual bool ShareToProcess(base::ProcessId aProcessId,
|
||||
Handle* aNewHandle) override;
|
||||
|
||||
private:
|
||||
~SharedMemoryBasic();
|
||||
|
||||
void Unmap();
|
||||
mach_port_t mPort;
|
||||
// Pointer to mapped region, null if unmapped.
|
||||
void *mMemory;
|
||||
};
|
||||
|
||||
} // namespace ipc
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // ifndef mozilla_ipc_SharedMemoryBasic_mach_h
|
||||
|
|
@ -1,664 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; 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 <map>
|
||||
|
||||
#include <mach/vm_map.h>
|
||||
#include <mach/mach_port.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include "SharedMemoryBasic.h"
|
||||
#include "chrome/common/mach_ipc_mac.h"
|
||||
|
||||
#include "mozilla/StaticMutex.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#define LOG_ERROR(str, args...) \
|
||||
PR_BEGIN_MACRO \
|
||||
char *msg = PR_smprintf(str, ## args); \
|
||||
NS_WARNING(msg); \
|
||||
PR_smprintf_free(msg); \
|
||||
PR_END_MACRO
|
||||
#else
|
||||
#define LOG_ERROR(str, args...) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
#define CHECK_MACH_ERROR(kr, msg) \
|
||||
PR_BEGIN_MACRO \
|
||||
if (kr != KERN_SUCCESS) { \
|
||||
LOG_ERROR("%s %s (%x)\n", msg, mach_error_string(kr), kr); \
|
||||
return false; \
|
||||
} \
|
||||
PR_END_MACRO
|
||||
|
||||
/*
|
||||
* This code is responsible for sharing memory between processes. Memory can be
|
||||
* shared between parent and child or between two children. Each memory region is
|
||||
* referenced via a Mach port. Mach ports are also used for messaging when
|
||||
* sharing a memory region.
|
||||
*
|
||||
* When the parent starts a child, it starts a thread whose only purpose is to
|
||||
* communicate with the child about shared memory. Once the child has started,
|
||||
* it starts a similar thread for communicating with the parent. Each side can
|
||||
* communicate with the thread on the other side via Mach ports. When either
|
||||
* side wants to share memory with the other, it sends a Mach message to the
|
||||
* other side. Attached to the message is the port that references the shared
|
||||
* memory region. When the other side receives the message, it automatically
|
||||
* gets access to the region. It sends a reply (also via a Mach port) so that
|
||||
* the originating side can continue.
|
||||
*
|
||||
* The two sides communicate using four ports. Two ports are used when the
|
||||
* parent shares memory with the child. The other two are used when the child
|
||||
* shares memory with the parent. One of these two ports is used for sending the
|
||||
* "share" message and the other is used for the reply.
|
||||
*
|
||||
* If a child wants to share memory with another child, it sends a "GetPorts"
|
||||
* message to the parent. The parent forwards this GetPorts message to the
|
||||
* target child. The message includes some ports so that the children can talk
|
||||
* directly. Both children start up a thread to communicate with the other child,
|
||||
* similar to the way parent and child communicate. In the future, when these
|
||||
* two children want to communicate, they re-use the channels that were created.
|
||||
*
|
||||
* When a child shuts down, the parent notifies all other children. Those
|
||||
* children then have the opportunity to shut down any threads they might have
|
||||
* been using to communicate directly with that child.
|
||||
*/
|
||||
|
||||
namespace mozilla {
|
||||
namespace ipc {
|
||||
|
||||
struct MemoryPorts {
|
||||
MachPortSender* mSender;
|
||||
ReceivePort* mReceiver;
|
||||
|
||||
MemoryPorts() {}
|
||||
MemoryPorts(MachPortSender* sender, ReceivePort* receiver)
|
||||
: mSender(sender), mReceiver(receiver) {}
|
||||
};
|
||||
|
||||
// Protects gMemoryCommPorts and gThreads.
|
||||
static StaticMutex gMutex;
|
||||
|
||||
static std::map<pid_t, MemoryPorts> gMemoryCommPorts;
|
||||
|
||||
enum {
|
||||
kGetPortsMsg = 1,
|
||||
kSharePortsMsg,
|
||||
kReturnIdMsg,
|
||||
kReturnPortsMsg,
|
||||
kShutdownMsg,
|
||||
kCleanupMsg,
|
||||
};
|
||||
|
||||
const int kTimeout = 1000;
|
||||
const int kLongTimeout = 60 * kTimeout;
|
||||
|
||||
pid_t gParentPid = 0;
|
||||
|
||||
struct PIDPair {
|
||||
pid_t mRequester;
|
||||
pid_t mRequested;
|
||||
|
||||
PIDPair(pid_t requester, pid_t requested)
|
||||
: mRequester(requester), mRequested(requested) {}
|
||||
};
|
||||
|
||||
struct ListeningThread {
|
||||
pthread_t mThread;
|
||||
MemoryPorts* mPorts;
|
||||
|
||||
ListeningThread() {}
|
||||
ListeningThread(pthread_t thread, MemoryPorts* ports)
|
||||
: mThread(thread), mPorts(ports) {}
|
||||
};
|
||||
|
||||
struct SharePortsReply {
|
||||
uint64_t serial;
|
||||
mach_port_t port;
|
||||
};
|
||||
|
||||
std::map<pid_t, ListeningThread> gThreads;
|
||||
|
||||
static void *
|
||||
PortServerThread(void *argument);
|
||||
|
||||
|
||||
static void
|
||||
SetupMachMemory(pid_t pid,
|
||||
ReceivePort* listen_port,
|
||||
MachPortSender* listen_port_ack,
|
||||
MachPortSender* send_port,
|
||||
ReceivePort* send_port_ack,
|
||||
bool pidIsParent)
|
||||
{
|
||||
if (pidIsParent) {
|
||||
gParentPid = pid;
|
||||
}
|
||||
MemoryPorts* listen_ports = new MemoryPorts(listen_port_ack, listen_port);
|
||||
pthread_t thread;
|
||||
pthread_attr_t attr;
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||
int err = pthread_create(&thread, &attr, PortServerThread, listen_ports);
|
||||
if (err) {
|
||||
LOG_ERROR("pthread_create failed with %x\n", err);
|
||||
return;
|
||||
}
|
||||
|
||||
gMutex.AssertCurrentThreadOwns();
|
||||
gThreads[pid] = ListeningThread(thread, listen_ports);
|
||||
gMemoryCommPorts[pid] = MemoryPorts(send_port, send_port_ack);
|
||||
}
|
||||
|
||||
// Send two communication ports to another process along with the pid of the process that is
|
||||
// listening on them.
|
||||
bool
|
||||
SendPortsMessage(MachPortSender* sender,
|
||||
mach_port_t ports_in_receiver,
|
||||
mach_port_t ports_out_receiver,
|
||||
PIDPair pid_pair)
|
||||
{
|
||||
MachSendMessage getPortsMsg(kGetPortsMsg);
|
||||
if (!getPortsMsg.AddDescriptor(MachMsgPortDescriptor(ports_in_receiver))) {
|
||||
LOG_ERROR("Adding descriptor to message failed");
|
||||
return false;
|
||||
}
|
||||
if (!getPortsMsg.AddDescriptor(MachMsgPortDescriptor(ports_out_receiver))) {
|
||||
LOG_ERROR("Adding descriptor to message failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
getPortsMsg.SetData(&pid_pair, sizeof(PIDPair));
|
||||
kern_return_t err = sender->SendMessage(getPortsMsg, kTimeout);
|
||||
if (KERN_SUCCESS != err) {
|
||||
LOG_ERROR("Error sending get ports message %s (%x)\n", mach_error_string(err), err);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Receive two communication ports from another process
|
||||
bool
|
||||
RecvPortsMessage(ReceivePort* receiver, mach_port_t* ports_in_sender, mach_port_t* ports_out_sender)
|
||||
{
|
||||
MachReceiveMessage rcvPortsMsg;
|
||||
kern_return_t err = receiver->WaitForMessage(&rcvPortsMsg, kTimeout);
|
||||
if (KERN_SUCCESS != err) {
|
||||
LOG_ERROR("Error receiving get ports message %s (%x)\n", mach_error_string(err), err);
|
||||
}
|
||||
if (rcvPortsMsg.GetTranslatedPort(0) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(0) failed");
|
||||
return false;
|
||||
}
|
||||
*ports_in_sender = rcvPortsMsg.GetTranslatedPort(0);
|
||||
|
||||
if (rcvPortsMsg.GetTranslatedPort(1) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(1) failed");
|
||||
return false;
|
||||
}
|
||||
*ports_out_sender = rcvPortsMsg.GetTranslatedPort(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Send two communication ports to another process and receive two back
|
||||
bool
|
||||
RequestPorts(const MemoryPorts& request_ports,
|
||||
mach_port_t ports_in_receiver,
|
||||
mach_port_t* ports_in_sender,
|
||||
mach_port_t* ports_out_sender,
|
||||
mach_port_t ports_out_receiver,
|
||||
PIDPair pid_pair)
|
||||
{
|
||||
if (!SendPortsMessage(request_ports.mSender, ports_in_receiver, ports_out_receiver, pid_pair)) {
|
||||
return false;
|
||||
}
|
||||
return RecvPortsMessage(request_ports.mReceiver, ports_in_sender, ports_out_sender);
|
||||
}
|
||||
|
||||
MemoryPorts*
|
||||
GetMemoryPortsForPid(pid_t pid)
|
||||
{
|
||||
gMutex.AssertCurrentThreadOwns();
|
||||
|
||||
if (gMemoryCommPorts.find(pid) == gMemoryCommPorts.end()) {
|
||||
// We don't have the ports open to communicate with that pid, so we're going to
|
||||
// ask our parent process over IPC to set them up for us.
|
||||
if (gParentPid == 0) {
|
||||
// If we're the top level parent process, we have no parent to ask.
|
||||
LOG_ERROR("request for ports for pid %d, but we're the chrome process\n", pid);
|
||||
return nullptr;
|
||||
}
|
||||
const MemoryPorts& parent = gMemoryCommPorts[gParentPid];
|
||||
|
||||
// Create two receiving ports in this process to send to the parent. One will be used for
|
||||
// for listening for incoming memory to be shared, the other for getting the Handle of
|
||||
// memory we share to the other process.
|
||||
ReceivePort* ports_in_receiver = new ReceivePort();
|
||||
ReceivePort* ports_out_receiver = new ReceivePort();
|
||||
mach_port_t raw_ports_in_sender, raw_ports_out_sender;
|
||||
if (!RequestPorts(parent,
|
||||
ports_in_receiver->GetPort(),
|
||||
&raw_ports_in_sender,
|
||||
&raw_ports_out_sender,
|
||||
ports_out_receiver->GetPort(),
|
||||
PIDPair(getpid(), pid))) {
|
||||
LOG_ERROR("failed to request ports\n");
|
||||
return nullptr;
|
||||
}
|
||||
// Our parent process sent us two ports, one is for sending new memory to, the other
|
||||
// is for replying with the Handle when we receive new memory.
|
||||
MachPortSender* ports_in_sender = new MachPortSender(raw_ports_in_sender);
|
||||
MachPortSender* ports_out_sender = new MachPortSender(raw_ports_out_sender);
|
||||
SetupMachMemory(pid,
|
||||
ports_in_receiver,
|
||||
ports_in_sender,
|
||||
ports_out_sender,
|
||||
ports_out_receiver,
|
||||
false);
|
||||
MOZ_ASSERT(gMemoryCommPorts.find(pid) != gMemoryCommPorts.end());
|
||||
}
|
||||
return &gMemoryCommPorts.at(pid);
|
||||
}
|
||||
|
||||
// We just received a port representing a region of shared memory, reply to
|
||||
// the process that set it with the mach_port_t that represents it in this process.
|
||||
// That will be the Handle to be shared over normal IPC
|
||||
void
|
||||
HandleSharePortsMessage(MachReceiveMessage* rmsg, MemoryPorts* ports)
|
||||
{
|
||||
mach_port_t port = rmsg->GetTranslatedPort(0);
|
||||
uint64_t* serial = reinterpret_cast<uint64_t*>(rmsg->GetData());
|
||||
MachSendMessage msg(kReturnIdMsg);
|
||||
// Construct the reply message, echoing the serial, and adding the port
|
||||
SharePortsReply replydata;
|
||||
replydata.port = port;
|
||||
replydata.serial = *serial;
|
||||
msg.SetData(&replydata, sizeof(SharePortsReply));
|
||||
kern_return_t err = ports->mSender->SendMessage(msg, kTimeout);
|
||||
if (KERN_SUCCESS != err) {
|
||||
LOG_ERROR("SendMessage failed 0x%x %s\n", err, mach_error_string(err));
|
||||
}
|
||||
}
|
||||
|
||||
// We were asked by another process to get communications ports to some process. Return
|
||||
// those ports via an IPC message.
|
||||
bool
|
||||
SendReturnPortsMsg(MachPortSender* sender,
|
||||
mach_port_t raw_ports_in_sender,
|
||||
mach_port_t raw_ports_out_sender)
|
||||
{
|
||||
MachSendMessage getPortsMsg(kReturnPortsMsg);
|
||||
if (!getPortsMsg.AddDescriptor(MachMsgPortDescriptor(raw_ports_in_sender))) {
|
||||
LOG_ERROR("Adding descriptor to message failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!getPortsMsg.AddDescriptor(MachMsgPortDescriptor(raw_ports_out_sender))) {
|
||||
LOG_ERROR("Adding descriptor to message failed");
|
||||
return false;
|
||||
}
|
||||
kern_return_t err = sender->SendMessage(getPortsMsg, kTimeout);
|
||||
if (KERN_SUCCESS != err) {
|
||||
LOG_ERROR("Error sending get ports message %s (%x)\n", mach_error_string(err), err);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// We were asked for communcations ports to a process that isn't us. Assuming that process
|
||||
// is one of our children, forward that request on.
|
||||
void
|
||||
ForwardGetPortsMessage(MachReceiveMessage* rmsg, MemoryPorts* ports, PIDPair* pid_pair)
|
||||
{
|
||||
if (rmsg->GetTranslatedPort(0) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(0) failed");
|
||||
return;
|
||||
}
|
||||
if (rmsg->GetTranslatedPort(1) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(1) failed");
|
||||
return;
|
||||
}
|
||||
mach_port_t raw_ports_in_sender, raw_ports_out_sender;
|
||||
MemoryPorts* requestedPorts = GetMemoryPortsForPid(pid_pair->mRequested);
|
||||
if (!requestedPorts) {
|
||||
LOG_ERROR("failed to find port for process\n");
|
||||
return;
|
||||
}
|
||||
if (!RequestPorts(*requestedPorts, rmsg->GetTranslatedPort(0), &raw_ports_in_sender,
|
||||
&raw_ports_out_sender, rmsg->GetTranslatedPort(1), *pid_pair)) {
|
||||
LOG_ERROR("failed to request ports\n");
|
||||
return;
|
||||
}
|
||||
SendReturnPortsMsg(ports->mSender, raw_ports_in_sender, raw_ports_out_sender);
|
||||
}
|
||||
|
||||
// We receieved a message asking us to get communications ports for another process
|
||||
void
|
||||
HandleGetPortsMessage(MachReceiveMessage* rmsg, MemoryPorts* ports)
|
||||
{
|
||||
PIDPair* pid_pair;
|
||||
if (rmsg->GetDataLength() != sizeof(PIDPair)) {
|
||||
LOG_ERROR("Improperly formatted message\n");
|
||||
return;
|
||||
}
|
||||
pid_pair = reinterpret_cast<PIDPair*>(rmsg->GetData());
|
||||
if (pid_pair->mRequested != getpid()) {
|
||||
// This request is for ports to a process that isn't us, forward it to that process
|
||||
ForwardGetPortsMessage(rmsg, ports, pid_pair);
|
||||
} else {
|
||||
if (rmsg->GetTranslatedPort(0) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(0) failed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (rmsg->GetTranslatedPort(1) == MACH_PORT_NULL) {
|
||||
LOG_ERROR("GetTranslatedPort(1) failed");
|
||||
return;
|
||||
}
|
||||
|
||||
MachPortSender* ports_in_sender = new MachPortSender(rmsg->GetTranslatedPort(0));
|
||||
MachPortSender* ports_out_sender = new MachPortSender(rmsg->GetTranslatedPort(1));
|
||||
|
||||
ReceivePort* ports_in_receiver = new ReceivePort();
|
||||
ReceivePort* ports_out_receiver = new ReceivePort();
|
||||
if (SendReturnPortsMsg(ports->mSender, ports_in_receiver->GetPort(), ports_out_receiver->GetPort())) {
|
||||
SetupMachMemory(pid_pair->mRequester,
|
||||
ports_out_receiver,
|
||||
ports_out_sender,
|
||||
ports_in_sender,
|
||||
ports_in_receiver,
|
||||
false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void *
|
||||
PortServerThread(void *argument)
|
||||
{
|
||||
MemoryPorts* ports = static_cast<MemoryPorts*>(argument);
|
||||
MachReceiveMessage child_message;
|
||||
while (true) {
|
||||
MachReceiveMessage rmsg;
|
||||
kern_return_t err = ports->mReceiver->WaitForMessage(&rmsg, MACH_MSG_TIMEOUT_NONE);
|
||||
if (err != KERN_SUCCESS) {
|
||||
LOG_ERROR("Wait for message failed 0x%x %s\n", err, mach_error_string(err));
|
||||
continue;
|
||||
}
|
||||
if (rmsg.GetMessageID() == kShutdownMsg) {
|
||||
delete ports->mSender;
|
||||
delete ports->mReceiver;
|
||||
delete ports;
|
||||
return nullptr;
|
||||
}
|
||||
StaticMutexAutoLock smal(gMutex);
|
||||
switch (rmsg.GetMessageID()) {
|
||||
case kSharePortsMsg:
|
||||
HandleSharePortsMessage(&rmsg, ports);
|
||||
break;
|
||||
case kGetPortsMsg:
|
||||
HandleGetPortsMessage(&rmsg, ports);
|
||||
break;
|
||||
case kCleanupMsg:
|
||||
if (gParentPid == 0) {
|
||||
LOG_ERROR("Cleanup message not valid for parent process");
|
||||
continue;
|
||||
}
|
||||
|
||||
pid_t* pid;
|
||||
if (rmsg.GetDataLength() != sizeof(pid_t)) {
|
||||
LOG_ERROR("Improperly formatted message\n");
|
||||
continue;
|
||||
}
|
||||
pid = reinterpret_cast<pid_t*>(rmsg.GetData());
|
||||
SharedMemoryBasic::CleanupForPid(*pid);
|
||||
break;
|
||||
default:
|
||||
LOG_ERROR("Unknown message\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SharedMemoryBasic::SetupMachMemory(pid_t pid,
|
||||
ReceivePort* listen_port,
|
||||
MachPortSender* listen_port_ack,
|
||||
MachPortSender* send_port,
|
||||
ReceivePort* send_port_ack,
|
||||
bool pidIsParent)
|
||||
{
|
||||
StaticMutexAutoLock smal(gMutex);
|
||||
mozilla::ipc::SetupMachMemory(pid, listen_port, listen_port_ack, send_port, send_port_ack, pidIsParent);
|
||||
}
|
||||
|
||||
void
|
||||
SharedMemoryBasic::Shutdown()
|
||||
{
|
||||
StaticMutexAutoLock smal(gMutex);
|
||||
|
||||
for (auto it = gThreads.begin(); it != gThreads.end(); ++it) {
|
||||
MachSendMessage shutdownMsg(kShutdownMsg);
|
||||
it->second.mPorts->mReceiver->SendMessageToSelf(shutdownMsg, kTimeout);
|
||||
}
|
||||
gThreads.clear();
|
||||
|
||||
for (auto it = gMemoryCommPorts.begin(); it != gMemoryCommPorts.end(); ++it) {
|
||||
delete it->second.mSender;
|
||||
delete it->second.mReceiver;
|
||||
}
|
||||
gMemoryCommPorts.clear();
|
||||
}
|
||||
|
||||
void
|
||||
SharedMemoryBasic::CleanupForPid(pid_t pid)
|
||||
{
|
||||
if (gThreads.find(pid) == gThreads.end()) {
|
||||
return;
|
||||
}
|
||||
const ListeningThread& listeningThread = gThreads[pid];
|
||||
MachSendMessage shutdownMsg(kShutdownMsg);
|
||||
kern_return_t ret = listeningThread.mPorts->mReceiver->SendMessageToSelf(shutdownMsg, kTimeout);
|
||||
if (ret != KERN_SUCCESS) {
|
||||
LOG_ERROR("sending shutdown msg failed %s %x\n", mach_error_string(ret), ret);
|
||||
}
|
||||
gThreads.erase(pid);
|
||||
|
||||
if (gParentPid == 0) {
|
||||
// We're the parent. Broadcast the cleanup message to everyone else.
|
||||
for (auto it = gMemoryCommPorts.begin(); it != gMemoryCommPorts.end(); ++it) {
|
||||
MachSendMessage msg(kCleanupMsg);
|
||||
msg.SetData(&pid, sizeof(pid));
|
||||
// We don't really care if this fails, we could be trying to send to an already shut down proc
|
||||
it->second.mSender->SendMessage(msg, kTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
MemoryPorts& ports = gMemoryCommPorts[pid];
|
||||
delete ports.mSender;
|
||||
delete ports.mReceiver;
|
||||
gMemoryCommPorts.erase(pid);
|
||||
}
|
||||
|
||||
SharedMemoryBasic::SharedMemoryBasic()
|
||||
: mPort(MACH_PORT_NULL)
|
||||
, mMemory(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
SharedMemoryBasic::~SharedMemoryBasic()
|
||||
{
|
||||
Unmap();
|
||||
CloseHandle();
|
||||
}
|
||||
|
||||
bool
|
||||
SharedMemoryBasic::SetHandle(const Handle& aHandle)
|
||||
{
|
||||
MOZ_ASSERT(mPort == MACH_PORT_NULL, "already initialized");
|
||||
|
||||
mPort = aHandle;
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void*
|
||||
toPointer(mach_vm_address_t address)
|
||||
{
|
||||
return reinterpret_cast<void*>(static_cast<uintptr_t>(address));
|
||||
}
|
||||
|
||||
static inline mach_vm_address_t
|
||||
toVMAddress(void* pointer)
|
||||
{
|
||||
return static_cast<mach_vm_address_t>(reinterpret_cast<uintptr_t>(pointer));
|
||||
}
|
||||
|
||||
bool
|
||||
SharedMemoryBasic::Create(size_t size)
|
||||
{
|
||||
mach_vm_address_t address;
|
||||
|
||||
kern_return_t kr = mach_vm_allocate(mach_task_self(), &address, round_page(size), VM_FLAGS_ANYWHERE);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
LOG_ERROR("Failed to allocate mach_vm_allocate shared memory (%zu bytes). %s (%x)\n",
|
||||
size, mach_error_string(kr), kr);
|
||||
return false;
|
||||
}
|
||||
|
||||
memory_object_size_t memoryObjectSize = round_page(size);
|
||||
|
||||
kr = mach_make_memory_entry_64(mach_task_self(),
|
||||
&memoryObjectSize,
|
||||
address,
|
||||
VM_PROT_DEFAULT,
|
||||
&mPort,
|
||||
MACH_PORT_NULL);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
LOG_ERROR("Failed to make memory entry (%zu bytes). %s (%x)\n",
|
||||
size, mach_error_string(kr), kr);
|
||||
return false;
|
||||
}
|
||||
|
||||
mMemory = toPointer(address);
|
||||
Mapped(size);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SharedMemoryBasic::Map(size_t size)
|
||||
{
|
||||
if (mMemory) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (MACH_PORT_NULL == mPort) {
|
||||
return false;
|
||||
}
|
||||
|
||||
kern_return_t kr;
|
||||
mach_vm_address_t address = 0;
|
||||
|
||||
vm_prot_t vmProtection = VM_PROT_READ | VM_PROT_WRITE;
|
||||
|
||||
kr = mach_vm_map(mach_task_self(), &address, round_page(size), 0, VM_FLAGS_ANYWHERE,
|
||||
mPort, 0, false, vmProtection, vmProtection, VM_INHERIT_NONE);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
LOG_ERROR("Failed to map shared memory (%zu bytes) into %x, port %x. %s (%x)\n",
|
||||
size, mach_task_self(), mPort, mach_error_string(kr), kr);
|
||||
return false;
|
||||
}
|
||||
|
||||
mMemory = toPointer(address);
|
||||
Mapped(size);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SharedMemoryBasic::ShareToProcess(base::ProcessId pid,
|
||||
Handle* aNewHandle)
|
||||
{
|
||||
if (pid == getpid()) {
|
||||
*aNewHandle = mPort;
|
||||
return mach_port_mod_refs(mach_task_self(), *aNewHandle, MACH_PORT_RIGHT_SEND, 1) == KERN_SUCCESS;
|
||||
}
|
||||
StaticMutexAutoLock smal(gMutex);
|
||||
|
||||
// Serially number the messages, to check whether
|
||||
// the reply we get was meant for us.
|
||||
static uint64_t serial = 0;
|
||||
uint64_t my_serial = serial;
|
||||
serial++;
|
||||
|
||||
MemoryPorts* ports = GetMemoryPortsForPid(pid);
|
||||
if (!ports) {
|
||||
LOG_ERROR("Unable to get ports for process.\n");
|
||||
return false;
|
||||
}
|
||||
MachSendMessage smsg(kSharePortsMsg);
|
||||
smsg.AddDescriptor(MachMsgPortDescriptor(mPort, MACH_MSG_TYPE_COPY_SEND));
|
||||
smsg.SetData(&my_serial, sizeof(uint64_t));
|
||||
kern_return_t err = ports->mSender->SendMessage(smsg, kTimeout);
|
||||
if (err != KERN_SUCCESS) {
|
||||
LOG_ERROR("sending port failed %s %x\n", mach_error_string(err), err);
|
||||
return false;
|
||||
}
|
||||
MachReceiveMessage msg;
|
||||
err = ports->mReceiver->WaitForMessage(&msg, kTimeout);
|
||||
if (err != KERN_SUCCESS) {
|
||||
LOG_ERROR("short timeout didn't get an id %s %x\n", mach_error_string(err), err);
|
||||
err = ports->mReceiver->WaitForMessage(&msg, kLongTimeout);
|
||||
|
||||
if (err != KERN_SUCCESS) {
|
||||
LOG_ERROR("long timeout didn't get an id %s %x\n", mach_error_string(err), err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (msg.GetDataLength() != sizeof(SharePortsReply)) {
|
||||
LOG_ERROR("Improperly formatted reply\n");
|
||||
return false;
|
||||
}
|
||||
SharePortsReply* msg_data = reinterpret_cast<SharePortsReply*>(msg.GetData());
|
||||
mach_port_t id = msg_data->port;
|
||||
uint64_t serial_check = msg_data->serial;
|
||||
if (serial_check != my_serial) {
|
||||
LOG_ERROR("Serials do not match up: %d vs %d", serial_check, my_serial);
|
||||
return false;
|
||||
}
|
||||
*aNewHandle = id;
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
SharedMemoryBasic::Unmap()
|
||||
{
|
||||
if (!mMemory) {
|
||||
return;
|
||||
}
|
||||
vm_address_t address = toVMAddress(mMemory);
|
||||
kern_return_t kr = vm_deallocate(mach_task_self(), address, round_page(mMappedSize));
|
||||
if (kr != KERN_SUCCESS) {
|
||||
LOG_ERROR("Failed to deallocate shared memory. %s (%x)\n", mach_error_string(kr), kr);
|
||||
return;
|
||||
}
|
||||
mMemory = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
SharedMemoryBasic::CloseHandle()
|
||||
{
|
||||
if (mPort != MACH_PORT_NULL) {
|
||||
mach_port_deallocate(mach_task_self(), mPort);
|
||||
mPort = MACH_PORT_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
SharedMemoryBasic::IsHandleValid(const Handle& aHandle) const
|
||||
{
|
||||
return aHandle > 0;
|
||||
}
|
||||
|
||||
} // namespace ipc
|
||||
} // namespace mozilla
|
||||
|
|
@ -77,13 +77,7 @@ else:
|
|||
'CrossProcessMutex_unimplemented.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'Darwin':
|
||||
EXPORTS.mozilla.ipc += ['SharedMemoryBasic_mach.h']
|
||||
SOURCES += [
|
||||
'SharedMemoryBasic_mach.mm',
|
||||
]
|
||||
else:
|
||||
EXPORTS.mozilla.ipc += ['SharedMemoryBasic_chromium.h']
|
||||
EXPORTS.mozilla.ipc += ['SharedMemoryBasic_chromium.h']
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'Linux':
|
||||
UNIFIED_SOURCES += [
|
||||
|
|
|
|||
|
|
@ -1,650 +0,0 @@
|
|||
%define ARCH_AARCH64 0
|
||||
%define ARCH_ALPHA 0
|
||||
%define ARCH_ARM 0
|
||||
%define ARCH_AVR32 0
|
||||
%define ARCH_AVR32_AP 0
|
||||
%define ARCH_AVR32_UC 0
|
||||
%define ARCH_BFIN 0
|
||||
%define ARCH_IA64 0
|
||||
%define ARCH_M68K 0
|
||||
%define ARCH_MIPS 0
|
||||
%define ARCH_MIPS64 0
|
||||
%define ARCH_PARISC 0
|
||||
%define ARCH_PPC 0
|
||||
%define ARCH_PPC64 0
|
||||
%define ARCH_S390 0
|
||||
%define ARCH_SH4 0
|
||||
%define ARCH_SPARC 0
|
||||
%define ARCH_SPARC64 0
|
||||
%define ARCH_TILEGX 0
|
||||
%define ARCH_TILEPRO 0
|
||||
%define ARCH_TOMI 0
|
||||
%define ARCH_X86 1
|
||||
%define ARCH_X86_32 0
|
||||
%define ARCH_X86_64 1
|
||||
%define HAVE_ARMV5TE 0
|
||||
%define HAVE_ARMV6 0
|
||||
%define HAVE_ARMV6T2 0
|
||||
%define HAVE_ARMV8 0
|
||||
%define HAVE_NEON 0
|
||||
%define HAVE_VFP 0
|
||||
%define HAVE_VFPV3 0
|
||||
%define HAVE_SETEND 0
|
||||
%define HAVE_ALTIVEC 0
|
||||
%define HAVE_DCBZL 0
|
||||
%define HAVE_LDBRX 0
|
||||
%define HAVE_POWER8 0
|
||||
%define HAVE_PPC4XX 0
|
||||
%define HAVE_VSX 0
|
||||
%define HAVE_AESNI 1
|
||||
%define HAVE_AMD3DNOW 1
|
||||
%define HAVE_AMD3DNOWEXT 1
|
||||
%define HAVE_AVX 1
|
||||
%define HAVE_AVX2 1
|
||||
%define HAVE_FMA3 1
|
||||
%define HAVE_FMA4 1
|
||||
%define HAVE_MMX 1
|
||||
%define HAVE_MMXEXT 1
|
||||
%define HAVE_SSE 1
|
||||
%define HAVE_SSE2 1
|
||||
%define HAVE_SSE3 1
|
||||
%define HAVE_SSE4 1
|
||||
%define HAVE_SSE42 1
|
||||
%define HAVE_SSSE3 1
|
||||
%define HAVE_XOP 1
|
||||
%define HAVE_CPUNOP 1
|
||||
%define HAVE_I686 1
|
||||
%define HAVE_MIPSFPU 0
|
||||
%define HAVE_MIPS32R2 0
|
||||
%define HAVE_MIPS32R5 0
|
||||
%define HAVE_MIPS64R2 0
|
||||
%define HAVE_MIPS32R6 0
|
||||
%define HAVE_MIPS64R6 0
|
||||
%define HAVE_MIPSDSP 0
|
||||
%define HAVE_MIPSDSPR2 0
|
||||
%define HAVE_MSA 0
|
||||
%define HAVE_LOONGSON2 0
|
||||
%define HAVE_LOONGSON3 0
|
||||
%define HAVE_MMI 0
|
||||
%define HAVE_ARMV5TE_EXTERNAL 0
|
||||
%define HAVE_ARMV6_EXTERNAL 0
|
||||
%define HAVE_ARMV6T2_EXTERNAL 0
|
||||
%define HAVE_ARMV8_EXTERNAL 0
|
||||
%define HAVE_NEON_EXTERNAL 0
|
||||
%define HAVE_VFP_EXTERNAL 0
|
||||
%define HAVE_VFPV3_EXTERNAL 0
|
||||
%define HAVE_SETEND_EXTERNAL 0
|
||||
%define HAVE_ALTIVEC_EXTERNAL 0
|
||||
%define HAVE_DCBZL_EXTERNAL 0
|
||||
%define HAVE_LDBRX_EXTERNAL 0
|
||||
%define HAVE_POWER8_EXTERNAL 0
|
||||
%define HAVE_PPC4XX_EXTERNAL 0
|
||||
%define HAVE_VSX_EXTERNAL 0
|
||||
%define HAVE_AESNI_EXTERNAL 1
|
||||
%define HAVE_AMD3DNOW_EXTERNAL 1
|
||||
%define HAVE_AMD3DNOWEXT_EXTERNAL 1
|
||||
%define HAVE_AVX_EXTERNAL 1
|
||||
%define HAVE_AVX2_EXTERNAL 1
|
||||
%define HAVE_FMA3_EXTERNAL 1
|
||||
%define HAVE_FMA4_EXTERNAL 1
|
||||
%define HAVE_MMX_EXTERNAL 1
|
||||
%define HAVE_MMXEXT_EXTERNAL 1
|
||||
%define HAVE_SSE_EXTERNAL 1
|
||||
%define HAVE_SSE2_EXTERNAL 1
|
||||
%define HAVE_SSE3_EXTERNAL 1
|
||||
%define HAVE_SSE4_EXTERNAL 1
|
||||
%define HAVE_SSE42_EXTERNAL 1
|
||||
%define HAVE_SSSE3_EXTERNAL 1
|
||||
%define HAVE_XOP_EXTERNAL 1
|
||||
%define HAVE_CPUNOP_EXTERNAL 0
|
||||
%define HAVE_I686_EXTERNAL 0
|
||||
%define HAVE_MIPSFPU_EXTERNAL 0
|
||||
%define HAVE_MIPS32R2_EXTERNAL 0
|
||||
%define HAVE_MIPS32R5_EXTERNAL 0
|
||||
%define HAVE_MIPS64R2_EXTERNAL 0
|
||||
%define HAVE_MIPS32R6_EXTERNAL 0
|
||||
%define HAVE_MIPS64R6_EXTERNAL 0
|
||||
%define HAVE_MIPSDSP_EXTERNAL 0
|
||||
%define HAVE_MIPSDSPR2_EXTERNAL 0
|
||||
%define HAVE_MSA_EXTERNAL 0
|
||||
%define HAVE_LOONGSON2_EXTERNAL 0
|
||||
%define HAVE_LOONGSON3_EXTERNAL 0
|
||||
%define HAVE_MMI_EXTERNAL 0
|
||||
%define HAVE_ARMV5TE_INLINE 0
|
||||
%define HAVE_ARMV6_INLINE 0
|
||||
%define HAVE_ARMV6T2_INLINE 0
|
||||
%define HAVE_ARMV8_INLINE 0
|
||||
%define HAVE_NEON_INLINE 0
|
||||
%define HAVE_VFP_INLINE 0
|
||||
%define HAVE_VFPV3_INLINE 0
|
||||
%define HAVE_SETEND_INLINE 0
|
||||
%define HAVE_ALTIVEC_INLINE 0
|
||||
%define HAVE_DCBZL_INLINE 0
|
||||
%define HAVE_LDBRX_INLINE 0
|
||||
%define HAVE_POWER8_INLINE 0
|
||||
%define HAVE_PPC4XX_INLINE 0
|
||||
%define HAVE_VSX_INLINE 0
|
||||
%define HAVE_AESNI_INLINE 1
|
||||
%define HAVE_AMD3DNOW_INLINE 1
|
||||
%define HAVE_AMD3DNOWEXT_INLINE 1
|
||||
%define HAVE_AVX_INLINE 1
|
||||
%define HAVE_AVX2_INLINE 1
|
||||
%define HAVE_FMA3_INLINE 1
|
||||
%define HAVE_FMA4_INLINE 1
|
||||
%define HAVE_MMX_INLINE 1
|
||||
%define HAVE_MMXEXT_INLINE 1
|
||||
%define HAVE_SSE_INLINE 1
|
||||
%define HAVE_SSE2_INLINE 1
|
||||
%define HAVE_SSE3_INLINE 1
|
||||
%define HAVE_SSE4_INLINE 1
|
||||
%define HAVE_SSE42_INLINE 1
|
||||
%define HAVE_SSSE3_INLINE 1
|
||||
%define HAVE_XOP_INLINE 1
|
||||
%define HAVE_CPUNOP_INLINE 0
|
||||
%define HAVE_I686_INLINE 0
|
||||
%define HAVE_MIPSFPU_INLINE 0
|
||||
%define HAVE_MIPS32R2_INLINE 0
|
||||
%define HAVE_MIPS32R5_INLINE 0
|
||||
%define HAVE_MIPS64R2_INLINE 0
|
||||
%define HAVE_MIPS32R6_INLINE 0
|
||||
%define HAVE_MIPS64R6_INLINE 0
|
||||
%define HAVE_MIPSDSP_INLINE 0
|
||||
%define HAVE_MIPSDSPR2_INLINE 0
|
||||
%define HAVE_MSA_INLINE 0
|
||||
%define HAVE_LOONGSON2_INLINE 0
|
||||
%define HAVE_LOONGSON3_INLINE 0
|
||||
%define HAVE_MMI_INLINE 0
|
||||
%define HAVE_ALIGNED_STACK 1
|
||||
%define HAVE_FAST_64BIT 1
|
||||
%define HAVE_FAST_CLZ 1
|
||||
%define HAVE_FAST_CMOV 1
|
||||
%define HAVE_LOCAL_ALIGNED_8 1
|
||||
%define HAVE_LOCAL_ALIGNED_16 1
|
||||
%define HAVE_LOCAL_ALIGNED_32 1
|
||||
%define HAVE_SIMD_ALIGN_16 1
|
||||
%define HAVE_SIMD_ALIGN_32 1
|
||||
%define HAVE_ATOMICS_GCC 1
|
||||
%define HAVE_ATOMICS_SUNCC 0
|
||||
%define HAVE_ATOMICS_WIN32 0
|
||||
%define HAVE_ATOMIC_CAS_PTR 0
|
||||
%define HAVE_MACHINE_RW_BARRIER 0
|
||||
%define HAVE_MEMORYBARRIER 0
|
||||
%define HAVE_MM_EMPTY 1
|
||||
%define HAVE_RDTSC 0
|
||||
%define HAVE_SARESTART 1
|
||||
%define HAVE_SEM_TIMEDWAIT 0
|
||||
%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
|
||||
%define HAVE_CABS 1
|
||||
%define HAVE_CEXP 1
|
||||
%define HAVE_INLINE_ASM 1
|
||||
%define HAVE_SYMVER 1
|
||||
%define HAVE_X86ASM 1
|
||||
%define HAVE_BIGENDIAN 0
|
||||
%define HAVE_FAST_UNALIGNED 1
|
||||
%define HAVE_ALTIVEC_H 0
|
||||
%define HAVE_ARPA_INET_H 1
|
||||
%define HAVE_ASM_TYPES_H 0
|
||||
%define HAVE_CDIO_PARANOIA_H 0
|
||||
%define HAVE_CDIO_PARANOIA_PARANOIA_H 0
|
||||
%define HAVE_CUDA_H 0
|
||||
%define HAVE_D3D11_H 0
|
||||
%define HAVE_DISPATCH_DISPATCH_H 1
|
||||
%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
|
||||
%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
|
||||
%define HAVE_DEV_IC_BT8XX_H 0
|
||||
%define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
|
||||
%define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
|
||||
%define HAVE_DIRECT_H 0
|
||||
%define HAVE_DIRENT_H 1
|
||||
%define HAVE_DLFCN_H 1
|
||||
%define HAVE_DXGIDEBUG_H 0
|
||||
%define HAVE_DXVA_H 0
|
||||
%define HAVE_ES2_GL_H 0
|
||||
%define HAVE_GSM_H 0
|
||||
%define HAVE_IO_H 0
|
||||
%define HAVE_MACH_MACH_TIME_H 1
|
||||
%define HAVE_MACHINE_IOCTL_BT848_H 0
|
||||
%define HAVE_MACHINE_IOCTL_METEOR_H 0
|
||||
%define HAVE_OPENCV2_CORE_CORE_C_H 0
|
||||
%define HAVE_OPENJPEG_2_3_OPENJPEG_H 0
|
||||
%define HAVE_OPENJPEG_2_2_OPENJPEG_H 0
|
||||
%define HAVE_OPENJPEG_2_1_OPENJPEG_H 0
|
||||
%define HAVE_OPENJPEG_2_0_OPENJPEG_H 0
|
||||
%define HAVE_OPENJPEG_1_5_OPENJPEG_H 0
|
||||
%define HAVE_OPENGL_GL3_H 0
|
||||
%define HAVE_POLL_H 1
|
||||
%define HAVE_SOUNDCARD_H 0
|
||||
%define HAVE_STDATOMIC_H 1
|
||||
%define HAVE_SYS_MMAN_H 1
|
||||
%define HAVE_SYS_PARAM_H 1
|
||||
%define HAVE_SYS_RESOURCE_H 1
|
||||
%define HAVE_SYS_SELECT_H 1
|
||||
%define HAVE_SYS_SOUNDCARD_H 0
|
||||
%define HAVE_SYS_TIME_H 1
|
||||
%define HAVE_SYS_UN_H 1
|
||||
%define HAVE_SYS_VIDEOIO_H 0
|
||||
%define HAVE_TERMIOS_H 1
|
||||
%define HAVE_UDPLITE_H 0
|
||||
%define HAVE_UNISTD_H 1
|
||||
%define HAVE_VALGRIND_VALGRIND_H 0
|
||||
%define HAVE_WINDOWS_H 0
|
||||
%define HAVE_WINSOCK2_H 0
|
||||
%define HAVE_INTRINSICS_NEON 0
|
||||
%define HAVE_ATANF 1
|
||||
%define HAVE_ATAN2F 1
|
||||
%define HAVE_CBRT 1
|
||||
%define HAVE_CBRTF 1
|
||||
%define HAVE_COPYSIGN 1
|
||||
%define HAVE_COSF 1
|
||||
%define HAVE_ERF 1
|
||||
%define HAVE_EXP2 1
|
||||
%define HAVE_EXP2F 1
|
||||
%define HAVE_EXPF 1
|
||||
%define HAVE_HYPOT 1
|
||||
%define HAVE_ISFINITE 1
|
||||
%define HAVE_ISINF 1
|
||||
%define HAVE_ISNAN 1
|
||||
%define HAVE_LDEXPF 1
|
||||
%define HAVE_LLRINT 1
|
||||
%define HAVE_LLRINTF 1
|
||||
%define HAVE_LOG2 1
|
||||
%define HAVE_LOG2F 1
|
||||
%define HAVE_LOG10F 1
|
||||
%define HAVE_LRINT 1
|
||||
%define HAVE_LRINTF 1
|
||||
%define HAVE_POWF 1
|
||||
%define HAVE_RINT 1
|
||||
%define HAVE_ROUND 1
|
||||
%define HAVE_ROUNDF 1
|
||||
%define HAVE_SINF 1
|
||||
%define HAVE_TRUNC 1
|
||||
%define HAVE_TRUNCF 1
|
||||
%define HAVE_ACCESS 1
|
||||
%define HAVE_ALIGNED_MALLOC 0
|
||||
%define HAVE_CLOCK_GETTIME 1
|
||||
%define HAVE_CLOSESOCKET 0
|
||||
%define HAVE_COMMANDLINETOARGVW 0
|
||||
%define HAVE_COTASKMEMFREE 0
|
||||
%define HAVE_CRYPTGENRANDOM 0
|
||||
%define HAVE_FCNTL 1
|
||||
%define HAVE_FLT_LIM 1
|
||||
%define HAVE_FORK 1
|
||||
%define HAVE_GETADDRINFO 1
|
||||
%define HAVE_GETHRTIME 0
|
||||
%define HAVE_GETOPT 1
|
||||
%define HAVE_GETPROCESSAFFINITYMASK 0
|
||||
%define HAVE_GETPROCESSMEMORYINFO 0
|
||||
%define HAVE_GETPROCESSTIMES 0
|
||||
%define HAVE_GETRUSAGE 1
|
||||
%define HAVE_GETSYSTEMTIMEASFILETIME 0
|
||||
%define HAVE_GETTIMEOFDAY 1
|
||||
%define HAVE_GLOB 1
|
||||
%define HAVE_GLXGETPROCADDRESS 0
|
||||
%define HAVE_GMTIME_R 1
|
||||
%define HAVE_INET_ATON 1
|
||||
%define HAVE_ISATTY 1
|
||||
%define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
|
||||
%define HAVE_KBHIT 0
|
||||
%define HAVE_LOADLIBRARY 0
|
||||
%define HAVE_LSTAT 1
|
||||
%define HAVE_LZO1X_999_COMPRESS 0
|
||||
%define HAVE_MACH_ABSOLUTE_TIME 1
|
||||
%define HAVE_MAPVIEWOFFILE 0
|
||||
%define HAVE_MKSTEMP 1
|
||||
%define HAVE_MMAP 1
|
||||
%define HAVE_MPROTECT 1
|
||||
%define HAVE_NANOSLEEP 1
|
||||
%define HAVE_PEEKNAMEDPIPE 0
|
||||
%define HAVE_PTHREAD_CANCEL 1
|
||||
%define HAVE_SCHED_GETAFFINITY 0
|
||||
%define HAVE_SETCONSOLETEXTATTRIBUTE 0
|
||||
%define HAVE_SETCONSOLECTRLHANDLER 0
|
||||
%define HAVE_SETMODE 0
|
||||
%define HAVE_SETRLIMIT 1
|
||||
%define HAVE_SLEEP 0
|
||||
%define HAVE_STRERROR_R 1
|
||||
%define HAVE_SYSCONF 1
|
||||
%define HAVE_SYSCTL 1
|
||||
%define HAVE_USLEEP 1
|
||||
%define HAVE_UTGETOSTYPEFROMSTRING 0
|
||||
%define HAVE_VIRTUALALLOC 0
|
||||
%define HAVE_WGLGETPROCADDRESS 0
|
||||
%define HAVE_PTHREADS 1
|
||||
%define HAVE_OS2THREADS 0
|
||||
%define HAVE_W32THREADS 0
|
||||
%define HAVE_AS_DN_DIRECTIVE 0
|
||||
%define HAVE_AS_FPU_DIRECTIVE 0
|
||||
%define HAVE_AS_FUNC 0
|
||||
%define HAVE_AS_OBJECT_ARCH 0
|
||||
%define HAVE_ASM_MOD_Q 0
|
||||
%define HAVE_ATTRIBUTE_MAY_ALIAS 1
|
||||
%define HAVE_ATTRIBUTE_PACKED 1
|
||||
%define HAVE_BLOCKS_EXTENSION 1
|
||||
%define HAVE_EBP_AVAILABLE 1
|
||||
%define HAVE_EBX_AVAILABLE 1
|
||||
%define HAVE_GNU_AS 0
|
||||
%define HAVE_GNU_WINDRES 0
|
||||
%define HAVE_IBM_ASM 0
|
||||
%define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1
|
||||
%define HAVE_INLINE_ASM_LABELS 1
|
||||
%define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
|
||||
%define HAVE_PRAGMA_DEPRECATED 1
|
||||
%define HAVE_RSYNC_CONTIMEOUT 0
|
||||
%define HAVE_SYMVER_ASM_LABEL 1
|
||||
%define HAVE_SYMVER_GNU_ASM 0
|
||||
%define HAVE_VFP_ARGS 0
|
||||
%define HAVE_XFORM_ASM 0
|
||||
%define HAVE_XMM_CLOBBERS 1
|
||||
%define HAVE_CONDITION_VARIABLE_PTR 0
|
||||
%define HAVE_KCMVIDEOCODECTYPE_HEVC 0
|
||||
%define HAVE_SOCKLEN_T 1
|
||||
%define HAVE_STRUCT_ADDRINFO 1
|
||||
%define HAVE_STRUCT_GROUP_SOURCE_REQ 1
|
||||
%define HAVE_STRUCT_IP_MREQ_SOURCE 1
|
||||
%define HAVE_STRUCT_IPV6_MREQ 1
|
||||
%define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1
|
||||
%define HAVE_STRUCT_POLLFD 1
|
||||
%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
|
||||
%define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
|
||||
%define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||
%define HAVE_STRUCT_SOCKADDR_SA_LEN 1
|
||||
%define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||
%define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0
|
||||
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
|
||||
%define HAVE_ATOMICS_NATIVE 1
|
||||
%define HAVE_DOS_PATHS 0
|
||||
%define HAVE_LIBC_MSVCRT 0
|
||||
%define HAVE_MAKEINFO 1
|
||||
%define HAVE_MAKEINFO_HTML 0
|
||||
%define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
|
||||
%define HAVE_PERL 1
|
||||
%define HAVE_POD2MAN 1
|
||||
%define HAVE_SECTION_DATA_REL_RO 0
|
||||
%define HAVE_TEXI2HTML 0
|
||||
%define HAVE_THREADS 1
|
||||
%define HAVE_UWP 0
|
||||
%define HAVE_VAAPI_DRM 0
|
||||
%define HAVE_VAAPI_X11 0
|
||||
%define HAVE_VDPAU_X11 0
|
||||
%define HAVE_WINRT 0
|
||||
%define CONFIG_DOC 0
|
||||
%define CONFIG_HTMLPAGES 0
|
||||
%define CONFIG_MANPAGES 1
|
||||
%define CONFIG_PODPAGES 1
|
||||
%define CONFIG_TXTPAGES 1
|
||||
%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
|
||||
%define CONFIG_AVIO_READING_EXAMPLE 1
|
||||
%define CONFIG_DECODE_AUDIO_EXAMPLE 1
|
||||
%define CONFIG_DECODE_VIDEO_EXAMPLE 1
|
||||
%define CONFIG_DEMUXING_DECODING_EXAMPLE 0
|
||||
%define CONFIG_ENCODE_AUDIO_EXAMPLE 1
|
||||
%define CONFIG_ENCODE_VIDEO_EXAMPLE 1
|
||||
%define CONFIG_EXTRACT_MVS_EXAMPLE 0
|
||||
%define CONFIG_FILTER_AUDIO_EXAMPLE 0
|
||||
%define CONFIG_FILTERING_AUDIO_EXAMPLE 0
|
||||
%define CONFIG_FILTERING_VIDEO_EXAMPLE 0
|
||||
%define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0
|
||||
%define CONFIG_HW_DECODE_EXAMPLE 0
|
||||
%define CONFIG_METADATA_EXAMPLE 0
|
||||
%define CONFIG_MUXING_EXAMPLE 0
|
||||
%define CONFIG_QSVDEC_EXAMPLE 0
|
||||
%define CONFIG_REMUXING_EXAMPLE 0
|
||||
%define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
|
||||
%define CONFIG_SCALING_VIDEO_EXAMPLE 0
|
||||
%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
|
||||
%define CONFIG_TRANSCODING_EXAMPLE 0
|
||||
%define CONFIG_ALSA 0
|
||||
%define CONFIG_APPKIT 1
|
||||
%define CONFIG_AVFOUNDATION 1
|
||||
%define CONFIG_BZLIB 1
|
||||
%define CONFIG_COREIMAGE 1
|
||||
%define CONFIG_ICONV 0
|
||||
%define CONFIG_JACK 0
|
||||
%define CONFIG_LIBXCB 0
|
||||
%define CONFIG_LIBXCB_SHM 0
|
||||
%define CONFIG_LIBXCB_SHAPE 0
|
||||
%define CONFIG_LIBXCB_XFIXES 0
|
||||
%define CONFIG_LZMA 0
|
||||
%define CONFIG_SCHANNEL 0
|
||||
%define CONFIG_SDL2 0
|
||||
%define CONFIG_SECURETRANSPORT 0
|
||||
%define CONFIG_SNDIO 0
|
||||
%define CONFIG_XLIB 1
|
||||
%define CONFIG_ZLIB 1
|
||||
%define CONFIG_AVISYNTH 0
|
||||
%define CONFIG_FREI0R 0
|
||||
%define CONFIG_LIBCDIO 0
|
||||
%define CONFIG_LIBRUBBERBAND 0
|
||||
%define CONFIG_LIBVIDSTAB 0
|
||||
%define CONFIG_LIBX264 0
|
||||
%define CONFIG_LIBX265 0
|
||||
%define CONFIG_LIBXAVS 0
|
||||
%define CONFIG_LIBXVID 0
|
||||
%define CONFIG_DECKLINK 0
|
||||
%define CONFIG_LIBNDI_NEWTEK 0
|
||||
%define CONFIG_LIBFDK_AAC 0
|
||||
%define CONFIG_OPENSSL 0
|
||||
%define CONFIG_GMP 0
|
||||
%define CONFIG_LIBOPENCORE_AMRNB 0
|
||||
%define CONFIG_LIBOPENCORE_AMRWB 0
|
||||
%define CONFIG_LIBVO_AMRWBENC 0
|
||||
%define CONFIG_RKMPP 0
|
||||
%define CONFIG_LIBSMBCLIENT 0
|
||||
%define CONFIG_CHROMAPRINT 0
|
||||
%define CONFIG_GCRYPT 0
|
||||
%define CONFIG_GNUTLS 0
|
||||
%define CONFIG_JNI 0
|
||||
%define CONFIG_LADSPA 0
|
||||
%define CONFIG_LIBASS 0
|
||||
%define CONFIG_LIBBLURAY 0
|
||||
%define CONFIG_LIBBS2B 0
|
||||
%define CONFIG_LIBCACA 0
|
||||
%define CONFIG_LIBCELT 0
|
||||
%define CONFIG_LIBDC1394 0
|
||||
%define CONFIG_LIBDRM 0
|
||||
%define CONFIG_LIBFLITE 0
|
||||
%define CONFIG_LIBFONTCONFIG 0
|
||||
%define CONFIG_LIBFREETYPE 0
|
||||
%define CONFIG_LIBFRIBIDI 0
|
||||
%define CONFIG_LIBGME 0
|
||||
%define CONFIG_LIBGSM 0
|
||||
%define CONFIG_LIBIEC61883 0
|
||||
%define CONFIG_LIBILBC 0
|
||||
%define CONFIG_LIBKVAZAAR 0
|
||||
%define CONFIG_LIBMODPLUG 0
|
||||
%define CONFIG_LIBMP3LAME 0
|
||||
%define CONFIG_LIBMYSOFA 0
|
||||
%define CONFIG_LIBOPENCV 0
|
||||
%define CONFIG_LIBOPENH264 0
|
||||
%define CONFIG_LIBOPENJPEG 0
|
||||
%define CONFIG_LIBOPENMPT 0
|
||||
%define CONFIG_LIBOPUS 0
|
||||
%define CONFIG_LIBPULSE 0
|
||||
%define CONFIG_LIBRSVG 0
|
||||
%define CONFIG_LIBRTMP 0
|
||||
%define CONFIG_LIBSHINE 0
|
||||
%define CONFIG_LIBSMBCLIENT 0
|
||||
%define CONFIG_LIBSNAPPY 0
|
||||
%define CONFIG_LIBSOXR 0
|
||||
%define CONFIG_LIBSPEEX 0
|
||||
%define CONFIG_LIBSSH 0
|
||||
%define CONFIG_LIBTESSERACT 0
|
||||
%define CONFIG_LIBTHEORA 0
|
||||
%define CONFIG_LIBTWOLAME 0
|
||||
%define CONFIG_LIBV4L2 0
|
||||
%define CONFIG_LIBVMAF 0
|
||||
%define CONFIG_LIBVORBIS 0
|
||||
%define CONFIG_LIBVPX 0
|
||||
%define CONFIG_LIBWAVPACK 0
|
||||
%define CONFIG_LIBWEBP 0
|
||||
%define CONFIG_LIBXML2 0
|
||||
%define CONFIG_LIBZIMG 0
|
||||
%define CONFIG_LIBZMQ 0
|
||||
%define CONFIG_LIBZVBI 0
|
||||
%define CONFIG_MEDIACODEC 0
|
||||
%define CONFIG_OPENAL 0
|
||||
%define CONFIG_OPENCL 0
|
||||
%define CONFIG_OPENGL 0
|
||||
%define CONFIG_AUDIOTOOLBOX 1
|
||||
%define CONFIG_CRYSTALHD 0
|
||||
%define CONFIG_CUDA 0
|
||||
%define CONFIG_CUVID 0
|
||||
%define CONFIG_D3D11VA 0
|
||||
%define CONFIG_DXVA2 0
|
||||
%define CONFIG_NVENC 0
|
||||
%define CONFIG_VAAPI 0
|
||||
%define CONFIG_VDA 0
|
||||
%define CONFIG_VDPAU 0
|
||||
%define CONFIG_VIDEOTOOLBOX 0
|
||||
%define CONFIG_V4L2_M2M 0
|
||||
%define CONFIG_XVMC 0
|
||||
%define CONFIG_CUDA_SDK 0
|
||||
%define CONFIG_LIBNPP 0
|
||||
%define CONFIG_LIBMFX 0
|
||||
%define CONFIG_MMAL 0
|
||||
%define CONFIG_OMX 0
|
||||
%define CONFIG_FTRAPV 0
|
||||
%define CONFIG_GRAY 0
|
||||
%define CONFIG_HARDCODED_TABLES 0
|
||||
%define CONFIG_OMX_RPI 0
|
||||
%define CONFIG_RUNTIME_CPUDETECT 1
|
||||
%define CONFIG_SAFE_BITSTREAM_READER 1
|
||||
%define CONFIG_SHARED 1
|
||||
%define CONFIG_SMALL 0
|
||||
%define CONFIG_STATIC 0
|
||||
%define CONFIG_SWSCALE_ALPHA 1
|
||||
%define CONFIG_GPL 0
|
||||
%define CONFIG_NONFREE 0
|
||||
%define CONFIG_VERSION3 0
|
||||
%define CONFIG_AVCODEC 1
|
||||
%define CONFIG_AVDEVICE 0
|
||||
%define CONFIG_AVFILTER 0
|
||||
%define CONFIG_AVFORMAT 0
|
||||
%define CONFIG_AVRESAMPLE 0
|
||||
%define CONFIG_AVUTIL 1
|
||||
%define CONFIG_POSTPROC 0
|
||||
%define CONFIG_SWRESAMPLE 0
|
||||
%define CONFIG_SWSCALE 0
|
||||
%define CONFIG_FFPLAY 0
|
||||
%define CONFIG_FFPROBE 0
|
||||
%define CONFIG_FFSERVER 0
|
||||
%define CONFIG_FFMPEG 0
|
||||
%define CONFIG_DCT 0
|
||||
%define CONFIG_DWT 0
|
||||
%define CONFIG_ERROR_RESILIENCE 0
|
||||
%define CONFIG_FAAN 1
|
||||
%define CONFIG_FAST_UNALIGNED 1
|
||||
%define CONFIG_FFT 0
|
||||
%define CONFIG_LSP 0
|
||||
%define CONFIG_LZO 0
|
||||
%define CONFIG_MDCT 0
|
||||
%define CONFIG_PIXELUTILS 0
|
||||
%define CONFIG_NETWORK 0
|
||||
%define CONFIG_RDFT 0
|
||||
%define CONFIG_AUTODETECT 0
|
||||
%define CONFIG_FONTCONFIG 0
|
||||
%define CONFIG_LINUX_PERF 0
|
||||
%define CONFIG_MEMORY_POISONING 0
|
||||
%define CONFIG_NEON_CLOBBER_TEST 0
|
||||
%define CONFIG_OSSFUZZ 0
|
||||
%define CONFIG_PIC 1
|
||||
%define CONFIG_THUMB 0
|
||||
%define CONFIG_VALGRIND_BACKTRACE 0
|
||||
%define CONFIG_XMM_CLOBBER_TEST 0
|
||||
%define CONFIG_BSFS 1
|
||||
%define CONFIG_DECODERS 1
|
||||
%define CONFIG_ENCODERS 0
|
||||
%define CONFIG_HWACCELS 0
|
||||
%define CONFIG_PARSERS 1
|
||||
%define CONFIG_INDEVS 0
|
||||
%define CONFIG_OUTDEVS 0
|
||||
%define CONFIG_FILTERS 0
|
||||
%define CONFIG_DEMUXERS 0
|
||||
%define CONFIG_MUXERS 0
|
||||
%define CONFIG_PROTOCOLS 0
|
||||
%define CONFIG_AANDCTTABLES 0
|
||||
%define CONFIG_AC3DSP 0
|
||||
%define CONFIG_AUDIO_FRAME_QUEUE 0
|
||||
%define CONFIG_AUDIODSP 0
|
||||
%define CONFIG_BLOCKDSP 0
|
||||
%define CONFIG_BSWAPDSP 0
|
||||
%define CONFIG_CABAC 0
|
||||
%define CONFIG_DIRAC_PARSE 0
|
||||
%define CONFIG_DVPROFILE 0
|
||||
%define CONFIG_EXIF 0
|
||||
%define CONFIG_FAANDCT 0
|
||||
%define CONFIG_FAANIDCT 0
|
||||
%define CONFIG_FDCTDSP 0
|
||||
%define CONFIG_FLACDSP 1
|
||||
%define CONFIG_FMTCONVERT 0
|
||||
%define CONFIG_FRAME_THREAD_ENCODER 0
|
||||
%define CONFIG_G722DSP 0
|
||||
%define CONFIG_GOLOMB 0
|
||||
%define CONFIG_GPLV3 0
|
||||
%define CONFIG_H263DSP 0
|
||||
%define CONFIG_H264CHROMA 0
|
||||
%define CONFIG_H264DSP 0
|
||||
%define CONFIG_H264PARSE 0
|
||||
%define CONFIG_H264PRED 1
|
||||
%define CONFIG_H264QPEL 0
|
||||
%define CONFIG_HEVCPARSE 0
|
||||
%define CONFIG_HPELDSP 0
|
||||
%define CONFIG_HUFFMAN 0
|
||||
%define CONFIG_HUFFYUVDSP 0
|
||||
%define CONFIG_HUFFYUVENCDSP 0
|
||||
%define CONFIG_IDCTDSP 0
|
||||
%define CONFIG_IIRFILTER 0
|
||||
%define CONFIG_MDCT15 0
|
||||
%define CONFIG_INTRAX8 0
|
||||
%define CONFIG_ISO_MEDIA 0
|
||||
%define CONFIG_IVIDSP 0
|
||||
%define CONFIG_JPEGTABLES 0
|
||||
%define CONFIG_LGPLV3 0
|
||||
%define CONFIG_LIBX262 0
|
||||
%define CONFIG_LLAUDDSP 0
|
||||
%define CONFIG_LLVIDDSP 0
|
||||
%define CONFIG_LLVIDENCDSP 0
|
||||
%define CONFIG_LPC 0
|
||||
%define CONFIG_LZF 0
|
||||
%define CONFIG_ME_CMP 0
|
||||
%define CONFIG_MPEG_ER 0
|
||||
%define CONFIG_MPEGAUDIO 0
|
||||
%define CONFIG_MPEGAUDIODSP 0
|
||||
%define CONFIG_MPEGAUDIOHEADER 0
|
||||
%define CONFIG_MPEGVIDEO 0
|
||||
%define CONFIG_MPEGVIDEOENC 0
|
||||
%define CONFIG_MSS34DSP 0
|
||||
%define CONFIG_PIXBLOCKDSP 0
|
||||
%define CONFIG_QPELDSP 0
|
||||
%define CONFIG_QSV 0
|
||||
%define CONFIG_QSVDEC 0
|
||||
%define CONFIG_QSVENC 0
|
||||
%define CONFIG_RANGECODER 0
|
||||
%define CONFIG_RIFFDEC 0
|
||||
%define CONFIG_RIFFENC 0
|
||||
%define CONFIG_RTPDEC 0
|
||||
%define CONFIG_RTPENC_CHAIN 0
|
||||
%define CONFIG_RV34DSP 0
|
||||
%define CONFIG_SINEWIN 0
|
||||
%define CONFIG_SNAPPY 0
|
||||
%define CONFIG_SRTP 0
|
||||
%define CONFIG_STARTCODE 0
|
||||
%define CONFIG_TEXTUREDSP 0
|
||||
%define CONFIG_TEXTUREDSPENC 0
|
||||
%define CONFIG_TPELDSP 0
|
||||
%define CONFIG_VAAPI_1 0
|
||||
%define CONFIG_VAAPI_ENCODE 0
|
||||
%define CONFIG_VC1DSP 0
|
||||
%define CONFIG_VIDEODSP 1
|
||||
%define CONFIG_VP3DSP 0
|
||||
%define CONFIG_VP56DSP 0
|
||||
%define CONFIG_VP8DSP 1
|
||||
%define CONFIG_WMA_FREQS 0
|
||||
%define CONFIG_WMV2DSP 0
|
||||
%define CONFIG_NULL_BSF 1
|
||||
%define CONFIG_VP8_DECODER 1
|
||||
%define CONFIG_VP9_DECODER 1
|
||||
%define CONFIG_FLAC_DECODER 1
|
||||
%define CONFIG_FLAC_PARSER 0
|
||||
%define CONFIG_VP8_PARSER 1
|
||||
%define CONFIG_VP9_PARSER 1
|
||||
|
|
@ -1,667 +0,0 @@
|
|||
/* Automatically generated by configure - do not modify! */
|
||||
#ifndef FFMPEG_CONFIG_H
|
||||
#define FFMPEG_CONFIG_H
|
||||
#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm"
|
||||
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
|
||||
#define CONFIG_THIS_YEAR 2017
|
||||
#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
|
||||
#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
|
||||
#define CC_IDENT "Apple LLVM version 9.0.0 (clang-900.0.38)"
|
||||
#define av_restrict restrict
|
||||
#define EXTERN_PREFIX "_"
|
||||
#define EXTERN_ASM _
|
||||
#define BUILDSUF ""
|
||||
#define SLIBSUF ".dylib"
|
||||
#define HAVE_MMX2 HAVE_MMXEXT
|
||||
#define SWS_MAX_FILTER_SIZE 256
|
||||
#define ARCH_AARCH64 0
|
||||
#define ARCH_ALPHA 0
|
||||
#define ARCH_ARM 0
|
||||
#define ARCH_AVR32 0
|
||||
#define ARCH_AVR32_AP 0
|
||||
#define ARCH_AVR32_UC 0
|
||||
#define ARCH_BFIN 0
|
||||
#define ARCH_IA64 0
|
||||
#define ARCH_M68K 0
|
||||
#define ARCH_MIPS 0
|
||||
#define ARCH_MIPS64 0
|
||||
#define ARCH_PARISC 0
|
||||
#define ARCH_PPC 0
|
||||
#define ARCH_PPC64 0
|
||||
#define ARCH_S390 0
|
||||
#define ARCH_SH4 0
|
||||
#define ARCH_SPARC 0
|
||||
#define ARCH_SPARC64 0
|
||||
#define ARCH_TILEGX 0
|
||||
#define ARCH_TILEPRO 0
|
||||
#define ARCH_TOMI 0
|
||||
#define ARCH_X86 1
|
||||
#define ARCH_X86_32 0
|
||||
#define ARCH_X86_64 1
|
||||
#define HAVE_ARMV5TE 0
|
||||
#define HAVE_ARMV6 0
|
||||
#define HAVE_ARMV6T2 0
|
||||
#define HAVE_ARMV8 0
|
||||
#define HAVE_NEON 0
|
||||
#define HAVE_VFP 0
|
||||
#define HAVE_VFPV3 0
|
||||
#define HAVE_SETEND 0
|
||||
#define HAVE_ALTIVEC 0
|
||||
#define HAVE_DCBZL 0
|
||||
#define HAVE_LDBRX 0
|
||||
#define HAVE_POWER8 0
|
||||
#define HAVE_PPC4XX 0
|
||||
#define HAVE_VSX 0
|
||||
#define HAVE_AESNI 1
|
||||
#define HAVE_AMD3DNOW 1
|
||||
#define HAVE_AMD3DNOWEXT 1
|
||||
#define HAVE_AVX 1
|
||||
#define HAVE_AVX2 1
|
||||
#define HAVE_FMA3 1
|
||||
#define HAVE_FMA4 1
|
||||
#define HAVE_MMX 1
|
||||
#define HAVE_MMXEXT 1
|
||||
#define HAVE_SSE 1
|
||||
#define HAVE_SSE2 1
|
||||
#define HAVE_SSE3 1
|
||||
#define HAVE_SSE4 1
|
||||
#define HAVE_SSE42 1
|
||||
#define HAVE_SSSE3 1
|
||||
#define HAVE_XOP 1
|
||||
#define HAVE_CPUNOP 1
|
||||
#define HAVE_I686 1
|
||||
#define HAVE_MIPSFPU 0
|
||||
#define HAVE_MIPS32R2 0
|
||||
#define HAVE_MIPS32R5 0
|
||||
#define HAVE_MIPS64R2 0
|
||||
#define HAVE_MIPS32R6 0
|
||||
#define HAVE_MIPS64R6 0
|
||||
#define HAVE_MIPSDSP 0
|
||||
#define HAVE_MIPSDSPR2 0
|
||||
#define HAVE_MSA 0
|
||||
#define HAVE_LOONGSON2 0
|
||||
#define HAVE_LOONGSON3 0
|
||||
#define HAVE_MMI 0
|
||||
#define HAVE_ARMV5TE_EXTERNAL 0
|
||||
#define HAVE_ARMV6_EXTERNAL 0
|
||||
#define HAVE_ARMV6T2_EXTERNAL 0
|
||||
#define HAVE_ARMV8_EXTERNAL 0
|
||||
#define HAVE_NEON_EXTERNAL 0
|
||||
#define HAVE_VFP_EXTERNAL 0
|
||||
#define HAVE_VFPV3_EXTERNAL 0
|
||||
#define HAVE_SETEND_EXTERNAL 0
|
||||
#define HAVE_ALTIVEC_EXTERNAL 0
|
||||
#define HAVE_DCBZL_EXTERNAL 0
|
||||
#define HAVE_LDBRX_EXTERNAL 0
|
||||
#define HAVE_POWER8_EXTERNAL 0
|
||||
#define HAVE_PPC4XX_EXTERNAL 0
|
||||
#define HAVE_VSX_EXTERNAL 0
|
||||
#define HAVE_AESNI_EXTERNAL 1
|
||||
#define HAVE_AMD3DNOW_EXTERNAL 1
|
||||
#define HAVE_AMD3DNOWEXT_EXTERNAL 1
|
||||
#define HAVE_AVX_EXTERNAL 1
|
||||
#define HAVE_AVX2_EXTERNAL 1
|
||||
#define HAVE_FMA3_EXTERNAL 1
|
||||
#define HAVE_FMA4_EXTERNAL 1
|
||||
#define HAVE_MMX_EXTERNAL 1
|
||||
#define HAVE_MMXEXT_EXTERNAL 1
|
||||
#define HAVE_SSE_EXTERNAL 1
|
||||
#define HAVE_SSE2_EXTERNAL 1
|
||||
#define HAVE_SSE3_EXTERNAL 1
|
||||
#define HAVE_SSE4_EXTERNAL 1
|
||||
#define HAVE_SSE42_EXTERNAL 1
|
||||
#define HAVE_SSSE3_EXTERNAL 1
|
||||
#define HAVE_XOP_EXTERNAL 1
|
||||
#define HAVE_CPUNOP_EXTERNAL 0
|
||||
#define HAVE_I686_EXTERNAL 0
|
||||
#define HAVE_MIPSFPU_EXTERNAL 0
|
||||
#define HAVE_MIPS32R2_EXTERNAL 0
|
||||
#define HAVE_MIPS32R5_EXTERNAL 0
|
||||
#define HAVE_MIPS64R2_EXTERNAL 0
|
||||
#define HAVE_MIPS32R6_EXTERNAL 0
|
||||
#define HAVE_MIPS64R6_EXTERNAL 0
|
||||
#define HAVE_MIPSDSP_EXTERNAL 0
|
||||
#define HAVE_MIPSDSPR2_EXTERNAL 0
|
||||
#define HAVE_MSA_EXTERNAL 0
|
||||
#define HAVE_LOONGSON2_EXTERNAL 0
|
||||
#define HAVE_LOONGSON3_EXTERNAL 0
|
||||
#define HAVE_MMI_EXTERNAL 0
|
||||
#define HAVE_ARMV5TE_INLINE 0
|
||||
#define HAVE_ARMV6_INLINE 0
|
||||
#define HAVE_ARMV6T2_INLINE 0
|
||||
#define HAVE_ARMV8_INLINE 0
|
||||
#define HAVE_NEON_INLINE 0
|
||||
#define HAVE_VFP_INLINE 0
|
||||
#define HAVE_VFPV3_INLINE 0
|
||||
#define HAVE_SETEND_INLINE 0
|
||||
#define HAVE_ALTIVEC_INLINE 0
|
||||
#define HAVE_DCBZL_INLINE 0
|
||||
#define HAVE_LDBRX_INLINE 0
|
||||
#define HAVE_POWER8_INLINE 0
|
||||
#define HAVE_PPC4XX_INLINE 0
|
||||
#define HAVE_VSX_INLINE 0
|
||||
#define HAVE_AESNI_INLINE 1
|
||||
#define HAVE_AMD3DNOW_INLINE 1
|
||||
#define HAVE_AMD3DNOWEXT_INLINE 1
|
||||
#define HAVE_AVX_INLINE 1
|
||||
#define HAVE_AVX2_INLINE 1
|
||||
#define HAVE_FMA3_INLINE 1
|
||||
#define HAVE_FMA4_INLINE 1
|
||||
#define HAVE_MMX_INLINE 1
|
||||
#define HAVE_MMXEXT_INLINE 1
|
||||
#define HAVE_SSE_INLINE 1
|
||||
#define HAVE_SSE2_INLINE 1
|
||||
#define HAVE_SSE3_INLINE 1
|
||||
#define HAVE_SSE4_INLINE 1
|
||||
#define HAVE_SSE42_INLINE 1
|
||||
#define HAVE_SSSE3_INLINE 1
|
||||
#define HAVE_XOP_INLINE 1
|
||||
#define HAVE_CPUNOP_INLINE 0
|
||||
#define HAVE_I686_INLINE 0
|
||||
#define HAVE_MIPSFPU_INLINE 0
|
||||
#define HAVE_MIPS32R2_INLINE 0
|
||||
#define HAVE_MIPS32R5_INLINE 0
|
||||
#define HAVE_MIPS64R2_INLINE 0
|
||||
#define HAVE_MIPS32R6_INLINE 0
|
||||
#define HAVE_MIPS64R6_INLINE 0
|
||||
#define HAVE_MIPSDSP_INLINE 0
|
||||
#define HAVE_MIPSDSPR2_INLINE 0
|
||||
#define HAVE_MSA_INLINE 0
|
||||
#define HAVE_LOONGSON2_INLINE 0
|
||||
#define HAVE_LOONGSON3_INLINE 0
|
||||
#define HAVE_MMI_INLINE 0
|
||||
#define HAVE_ALIGNED_STACK 1
|
||||
#define HAVE_FAST_64BIT 1
|
||||
#define HAVE_FAST_CLZ 1
|
||||
#define HAVE_FAST_CMOV 1
|
||||
#define HAVE_LOCAL_ALIGNED_8 1
|
||||
#define HAVE_LOCAL_ALIGNED_16 1
|
||||
#define HAVE_LOCAL_ALIGNED_32 1
|
||||
#define HAVE_SIMD_ALIGN_16 1
|
||||
#define HAVE_SIMD_ALIGN_32 1
|
||||
#define HAVE_ATOMICS_GCC 1
|
||||
#define HAVE_ATOMICS_SUNCC 0
|
||||
#define HAVE_ATOMICS_WIN32 0
|
||||
#define HAVE_ATOMIC_CAS_PTR 0
|
||||
#define HAVE_MACHINE_RW_BARRIER 0
|
||||
#define HAVE_MEMORYBARRIER 0
|
||||
#define HAVE_MM_EMPTY 1
|
||||
#define HAVE_RDTSC 0
|
||||
#define HAVE_SARESTART 1
|
||||
#define HAVE_SEM_TIMEDWAIT 0
|
||||
#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
|
||||
#define HAVE_CABS 1
|
||||
#define HAVE_CEXP 1
|
||||
#define HAVE_INLINE_ASM 1
|
||||
#define HAVE_SYMVER 1
|
||||
#define HAVE_X86ASM 1
|
||||
#define HAVE_BIGENDIAN 0
|
||||
#define HAVE_FAST_UNALIGNED 1
|
||||
#define HAVE_ALTIVEC_H 0
|
||||
#define HAVE_ARPA_INET_H 1
|
||||
#define HAVE_ASM_TYPES_H 0
|
||||
#define HAVE_CDIO_PARANOIA_H 0
|
||||
#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
|
||||
#define HAVE_CUDA_H 0
|
||||
#define HAVE_D3D11_H 0
|
||||
#define HAVE_DISPATCH_DISPATCH_H 1
|
||||
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
|
||||
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
|
||||
#define HAVE_DEV_IC_BT8XX_H 0
|
||||
#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
|
||||
#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
|
||||
#define HAVE_DIRECT_H 0
|
||||
#define HAVE_DIRENT_H 1
|
||||
#define HAVE_DLFCN_H 1
|
||||
#define HAVE_DXGIDEBUG_H 0
|
||||
#define HAVE_DXVA_H 0
|
||||
#define HAVE_ES2_GL_H 0
|
||||
#define HAVE_GSM_H 0
|
||||
#define HAVE_IO_H 0
|
||||
#define HAVE_MACH_MACH_TIME_H 1
|
||||
#define HAVE_MACHINE_IOCTL_BT848_H 0
|
||||
#define HAVE_MACHINE_IOCTL_METEOR_H 0
|
||||
#define HAVE_OPENCV2_CORE_CORE_C_H 0
|
||||
#define HAVE_OPENJPEG_2_3_OPENJPEG_H 0
|
||||
#define HAVE_OPENJPEG_2_2_OPENJPEG_H 0
|
||||
#define HAVE_OPENJPEG_2_1_OPENJPEG_H 0
|
||||
#define HAVE_OPENJPEG_2_0_OPENJPEG_H 0
|
||||
#define HAVE_OPENJPEG_1_5_OPENJPEG_H 0
|
||||
#define HAVE_OPENGL_GL3_H 0
|
||||
#define HAVE_POLL_H 1
|
||||
#define HAVE_SOUNDCARD_H 0
|
||||
#define HAVE_STDATOMIC_H 1
|
||||
#define HAVE_SYS_MMAN_H 1
|
||||
#define HAVE_SYS_PARAM_H 1
|
||||
#define HAVE_SYS_RESOURCE_H 1
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
#define HAVE_SYS_SOUNDCARD_H 0
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#define HAVE_SYS_UN_H 1
|
||||
#define HAVE_SYS_VIDEOIO_H 0
|
||||
#define HAVE_TERMIOS_H 1
|
||||
#define HAVE_UDPLITE_H 0
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_VALGRIND_VALGRIND_H 0
|
||||
#define HAVE_WINDOWS_H 0
|
||||
#define HAVE_WINSOCK2_H 0
|
||||
#define HAVE_INTRINSICS_NEON 0
|
||||
#define HAVE_ATANF 1
|
||||
#define HAVE_ATAN2F 1
|
||||
#define HAVE_CBRT 1
|
||||
#define HAVE_CBRTF 1
|
||||
#define HAVE_COPYSIGN 1
|
||||
#define HAVE_COSF 1
|
||||
#define HAVE_ERF 1
|
||||
#define HAVE_EXP2 1
|
||||
#define HAVE_EXP2F 1
|
||||
#define HAVE_EXPF 1
|
||||
#define HAVE_HYPOT 1
|
||||
#define HAVE_ISFINITE 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_LDEXPF 1
|
||||
#define HAVE_LLRINT 1
|
||||
#define HAVE_LLRINTF 1
|
||||
#define HAVE_LOG2 1
|
||||
#define HAVE_LOG2F 1
|
||||
#define HAVE_LOG10F 1
|
||||
#define HAVE_LRINT 1
|
||||
#define HAVE_LRINTF 1
|
||||
#define HAVE_POWF 1
|
||||
#define HAVE_RINT 1
|
||||
#define HAVE_ROUND 1
|
||||
#define HAVE_ROUNDF 1
|
||||
#define HAVE_SINF 1
|
||||
#define HAVE_TRUNC 1
|
||||
#define HAVE_TRUNCF 1
|
||||
#define HAVE_ACCESS 1
|
||||
#define HAVE_ALIGNED_MALLOC 0
|
||||
#define HAVE_CLOCK_GETTIME 1
|
||||
#define HAVE_CLOSESOCKET 0
|
||||
#define HAVE_COMMANDLINETOARGVW 0
|
||||
#define HAVE_COTASKMEMFREE 0
|
||||
#define HAVE_CRYPTGENRANDOM 0
|
||||
#define HAVE_FCNTL 1
|
||||
#define HAVE_FLT_LIM 1
|
||||
#define HAVE_FORK 1
|
||||
#define HAVE_GETADDRINFO 1
|
||||
#define HAVE_GETHRTIME 0
|
||||
#define HAVE_GETOPT 1
|
||||
#define HAVE_GETPROCESSAFFINITYMASK 0
|
||||
#define HAVE_GETPROCESSMEMORYINFO 0
|
||||
#define HAVE_GETPROCESSTIMES 0
|
||||
#define HAVE_GETRUSAGE 1
|
||||
#define HAVE_GETSYSTEMTIMEASFILETIME 0
|
||||
#define HAVE_GETTIMEOFDAY 1
|
||||
#define HAVE_GLOB 1
|
||||
#define HAVE_GLXGETPROCADDRESS 0
|
||||
#define HAVE_GMTIME_R 1
|
||||
#define HAVE_INET_ATON 1
|
||||
#define HAVE_ISATTY 1
|
||||
#define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
|
||||
#define HAVE_KBHIT 0
|
||||
#define HAVE_LOADLIBRARY 0
|
||||
#define HAVE_LSTAT 1
|
||||
#define HAVE_LZO1X_999_COMPRESS 0
|
||||
#define HAVE_MACH_ABSOLUTE_TIME 1
|
||||
#define HAVE_MAPVIEWOFFILE 0
|
||||
#define HAVE_MKSTEMP 1
|
||||
#define HAVE_MMAP 1
|
||||
#define HAVE_MPROTECT 1
|
||||
#define HAVE_NANOSLEEP 1
|
||||
#define HAVE_PEEKNAMEDPIPE 0
|
||||
#define HAVE_PTHREAD_CANCEL 1
|
||||
#define HAVE_SCHED_GETAFFINITY 0
|
||||
#define HAVE_SETCONSOLETEXTATTRIBUTE 0
|
||||
#define HAVE_SETCONSOLECTRLHANDLER 0
|
||||
#define HAVE_SETMODE 0
|
||||
#define HAVE_SETRLIMIT 1
|
||||
#define HAVE_SLEEP 0
|
||||
#define HAVE_STRERROR_R 1
|
||||
#define HAVE_SYSCONF 1
|
||||
#define HAVE_SYSCTL 1
|
||||
#define HAVE_USLEEP 1
|
||||
#define HAVE_UTGETOSTYPEFROMSTRING 0
|
||||
#define HAVE_VIRTUALALLOC 0
|
||||
#define HAVE_WGLGETPROCADDRESS 0
|
||||
#define HAVE_PTHREADS 1
|
||||
#define HAVE_OS2THREADS 0
|
||||
#define HAVE_W32THREADS 0
|
||||
#define HAVE_AS_DN_DIRECTIVE 0
|
||||
#define HAVE_AS_FPU_DIRECTIVE 0
|
||||
#define HAVE_AS_FUNC 0
|
||||
#define HAVE_AS_OBJECT_ARCH 0
|
||||
#define HAVE_ASM_MOD_Q 0
|
||||
#define HAVE_ATTRIBUTE_MAY_ALIAS 1
|
||||
#define HAVE_ATTRIBUTE_PACKED 1
|
||||
#define HAVE_BLOCKS_EXTENSION 1
|
||||
#define HAVE_EBP_AVAILABLE 1
|
||||
#define HAVE_EBX_AVAILABLE 1
|
||||
#define HAVE_GNU_AS 0
|
||||
#define HAVE_GNU_WINDRES 0
|
||||
#define HAVE_IBM_ASM 0
|
||||
#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1
|
||||
#define HAVE_INLINE_ASM_LABELS 1
|
||||
#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
|
||||
#define HAVE_PRAGMA_DEPRECATED 1
|
||||
#define HAVE_RSYNC_CONTIMEOUT 0
|
||||
#define HAVE_SYMVER_ASM_LABEL 1
|
||||
#define HAVE_SYMVER_GNU_ASM 0
|
||||
#define HAVE_VFP_ARGS 0
|
||||
#define HAVE_XFORM_ASM 0
|
||||
#define HAVE_XMM_CLOBBERS 1
|
||||
#define HAVE_CONDITION_VARIABLE_PTR 0
|
||||
#define HAVE_KCMVIDEOCODECTYPE_HEVC 0
|
||||
#define HAVE_SOCKLEN_T 1
|
||||
#define HAVE_STRUCT_ADDRINFO 1
|
||||
#define HAVE_STRUCT_GROUP_SOURCE_REQ 1
|
||||
#define HAVE_STRUCT_IP_MREQ_SOURCE 1
|
||||
#define HAVE_STRUCT_IPV6_MREQ 1
|
||||
#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1
|
||||
#define HAVE_STRUCT_POLLFD 1
|
||||
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
|
||||
#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
|
||||
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||
#define HAVE_STRUCT_SOCKADDR_SA_LEN 1
|
||||
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||
#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0
|
||||
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
|
||||
#define HAVE_ATOMICS_NATIVE 1
|
||||
#define HAVE_DOS_PATHS 0
|
||||
#define HAVE_LIBC_MSVCRT 0
|
||||
#define HAVE_MAKEINFO 1
|
||||
#define HAVE_MAKEINFO_HTML 0
|
||||
#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
|
||||
#define HAVE_PERL 1
|
||||
#define HAVE_POD2MAN 1
|
||||
#define HAVE_SECTION_DATA_REL_RO 0
|
||||
#define HAVE_TEXI2HTML 0
|
||||
#define HAVE_THREADS 1
|
||||
#define HAVE_UWP 0
|
||||
#define HAVE_VAAPI_DRM 0
|
||||
#define HAVE_VAAPI_X11 0
|
||||
#define HAVE_VDPAU_X11 0
|
||||
#define HAVE_WINRT 0
|
||||
#define CONFIG_DOC 0
|
||||
#define CONFIG_HTMLPAGES 0
|
||||
#define CONFIG_MANPAGES 1
|
||||
#define CONFIG_PODPAGES 1
|
||||
#define CONFIG_TXTPAGES 1
|
||||
#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
|
||||
#define CONFIG_AVIO_READING_EXAMPLE 1
|
||||
#define CONFIG_DECODE_AUDIO_EXAMPLE 1
|
||||
#define CONFIG_DECODE_VIDEO_EXAMPLE 1
|
||||
#define CONFIG_DEMUXING_DECODING_EXAMPLE 0
|
||||
#define CONFIG_ENCODE_AUDIO_EXAMPLE 1
|
||||
#define CONFIG_ENCODE_VIDEO_EXAMPLE 1
|
||||
#define CONFIG_EXTRACT_MVS_EXAMPLE 0
|
||||
#define CONFIG_FILTER_AUDIO_EXAMPLE 0
|
||||
#define CONFIG_FILTERING_AUDIO_EXAMPLE 0
|
||||
#define CONFIG_FILTERING_VIDEO_EXAMPLE 0
|
||||
#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0
|
||||
#define CONFIG_HW_DECODE_EXAMPLE 0
|
||||
#define CONFIG_METADATA_EXAMPLE 0
|
||||
#define CONFIG_MUXING_EXAMPLE 0
|
||||
#define CONFIG_QSVDEC_EXAMPLE 0
|
||||
#define CONFIG_REMUXING_EXAMPLE 0
|
||||
#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
|
||||
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
|
||||
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
|
||||
#define CONFIG_TRANSCODING_EXAMPLE 0
|
||||
#define CONFIG_ALSA 0
|
||||
#define CONFIG_APPKIT 1
|
||||
#define CONFIG_AVFOUNDATION 1
|
||||
#define CONFIG_BZLIB 1
|
||||
#define CONFIG_COREIMAGE 1
|
||||
#define CONFIG_ICONV 0
|
||||
#define CONFIG_JACK 0
|
||||
#define CONFIG_LIBXCB 0
|
||||
#define CONFIG_LIBXCB_SHM 0
|
||||
#define CONFIG_LIBXCB_SHAPE 0
|
||||
#define CONFIG_LIBXCB_XFIXES 0
|
||||
#define CONFIG_LZMA 0
|
||||
#define CONFIG_SCHANNEL 0
|
||||
#define CONFIG_SDL2 0
|
||||
#define CONFIG_SECURETRANSPORT 0
|
||||
#define CONFIG_SNDIO 0
|
||||
#define CONFIG_XLIB 1
|
||||
#define CONFIG_ZLIB 1
|
||||
#define CONFIG_AVISYNTH 0
|
||||
#define CONFIG_FREI0R 0
|
||||
#define CONFIG_LIBCDIO 0
|
||||
#define CONFIG_LIBRUBBERBAND 0
|
||||
#define CONFIG_LIBVIDSTAB 0
|
||||
#define CONFIG_LIBX264 0
|
||||
#define CONFIG_LIBX265 0
|
||||
#define CONFIG_LIBXAVS 0
|
||||
#define CONFIG_LIBXVID 0
|
||||
#define CONFIG_DECKLINK 0
|
||||
#define CONFIG_LIBNDI_NEWTEK 0
|
||||
#define CONFIG_LIBFDK_AAC 0
|
||||
#define CONFIG_OPENSSL 0
|
||||
#define CONFIG_GMP 0
|
||||
#define CONFIG_LIBOPENCORE_AMRNB 0
|
||||
#define CONFIG_LIBOPENCORE_AMRWB 0
|
||||
#define CONFIG_LIBVO_AMRWBENC 0
|
||||
#define CONFIG_RKMPP 0
|
||||
#define CONFIG_LIBSMBCLIENT 0
|
||||
#define CONFIG_CHROMAPRINT 0
|
||||
#define CONFIG_GCRYPT 0
|
||||
#define CONFIG_GNUTLS 0
|
||||
#define CONFIG_JNI 0
|
||||
#define CONFIG_LADSPA 0
|
||||
#define CONFIG_LIBASS 0
|
||||
#define CONFIG_LIBBLURAY 0
|
||||
#define CONFIG_LIBBS2B 0
|
||||
#define CONFIG_LIBCACA 0
|
||||
#define CONFIG_LIBCELT 0
|
||||
#define CONFIG_LIBDC1394 0
|
||||
#define CONFIG_LIBDRM 0
|
||||
#define CONFIG_LIBFLITE 0
|
||||
#define CONFIG_LIBFONTCONFIG 0
|
||||
#define CONFIG_LIBFREETYPE 0
|
||||
#define CONFIG_LIBFRIBIDI 0
|
||||
#define CONFIG_LIBGME 0
|
||||
#define CONFIG_LIBGSM 0
|
||||
#define CONFIG_LIBIEC61883 0
|
||||
#define CONFIG_LIBILBC 0
|
||||
#define CONFIG_LIBKVAZAAR 0
|
||||
#define CONFIG_LIBMODPLUG 0
|
||||
#define CONFIG_LIBMP3LAME 0
|
||||
#define CONFIG_LIBMYSOFA 0
|
||||
#define CONFIG_LIBOPENCV 0
|
||||
#define CONFIG_LIBOPENH264 0
|
||||
#define CONFIG_LIBOPENJPEG 0
|
||||
#define CONFIG_LIBOPENMPT 0
|
||||
#define CONFIG_LIBOPUS 0
|
||||
#define CONFIG_LIBPULSE 0
|
||||
#define CONFIG_LIBRSVG 0
|
||||
#define CONFIG_LIBRTMP 0
|
||||
#define CONFIG_LIBSHINE 0
|
||||
#define CONFIG_LIBSMBCLIENT 0
|
||||
#define CONFIG_LIBSNAPPY 0
|
||||
#define CONFIG_LIBSOXR 0
|
||||
#define CONFIG_LIBSPEEX 0
|
||||
#define CONFIG_LIBSSH 0
|
||||
#define CONFIG_LIBTESSERACT 0
|
||||
#define CONFIG_LIBTHEORA 0
|
||||
#define CONFIG_LIBTWOLAME 0
|
||||
#define CONFIG_LIBV4L2 0
|
||||
#define CONFIG_LIBVMAF 0
|
||||
#define CONFIG_LIBVORBIS 0
|
||||
#define CONFIG_LIBVPX 0
|
||||
#define CONFIG_LIBWAVPACK 0
|
||||
#define CONFIG_LIBWEBP 0
|
||||
#define CONFIG_LIBXML2 0
|
||||
#define CONFIG_LIBZIMG 0
|
||||
#define CONFIG_LIBZMQ 0
|
||||
#define CONFIG_LIBZVBI 0
|
||||
#define CONFIG_MEDIACODEC 0
|
||||
#define CONFIG_OPENAL 0
|
||||
#define CONFIG_OPENCL 0
|
||||
#define CONFIG_OPENGL 0
|
||||
#define CONFIG_AUDIOTOOLBOX 1
|
||||
#define CONFIG_CRYSTALHD 0
|
||||
#define CONFIG_CUDA 0
|
||||
#define CONFIG_CUVID 0
|
||||
#define CONFIG_D3D11VA 0
|
||||
#define CONFIG_DXVA2 0
|
||||
#define CONFIG_NVENC 0
|
||||
#define CONFIG_VAAPI 0
|
||||
#define CONFIG_VDA 0
|
||||
#define CONFIG_VDPAU 0
|
||||
#define CONFIG_VIDEOTOOLBOX 0
|
||||
#define CONFIG_V4L2_M2M 0
|
||||
#define CONFIG_XVMC 0
|
||||
#define CONFIG_CUDA_SDK 0
|
||||
#define CONFIG_LIBNPP 0
|
||||
#define CONFIG_LIBMFX 0
|
||||
#define CONFIG_MMAL 0
|
||||
#define CONFIG_OMX 0
|
||||
#define CONFIG_FTRAPV 0
|
||||
#define CONFIG_GRAY 0
|
||||
#define CONFIG_HARDCODED_TABLES 0
|
||||
#define CONFIG_OMX_RPI 0
|
||||
#define CONFIG_RUNTIME_CPUDETECT 1
|
||||
#define CONFIG_SAFE_BITSTREAM_READER 1
|
||||
#define CONFIG_SHARED 1
|
||||
#define CONFIG_SMALL 0
|
||||
#define CONFIG_STATIC 0
|
||||
#define CONFIG_SWSCALE_ALPHA 1
|
||||
#define CONFIG_GPL 0
|
||||
#define CONFIG_NONFREE 0
|
||||
#define CONFIG_VERSION3 0
|
||||
#define CONFIG_AVCODEC 1
|
||||
#define CONFIG_AVDEVICE 0
|
||||
#define CONFIG_AVFILTER 0
|
||||
#define CONFIG_AVFORMAT 0
|
||||
#define CONFIG_AVRESAMPLE 0
|
||||
#define CONFIG_AVUTIL 1
|
||||
#define CONFIG_POSTPROC 0
|
||||
#define CONFIG_SWRESAMPLE 0
|
||||
#define CONFIG_SWSCALE 0
|
||||
#define CONFIG_FFPLAY 0
|
||||
#define CONFIG_FFPROBE 0
|
||||
#define CONFIG_FFSERVER 0
|
||||
#define CONFIG_FFMPEG 0
|
||||
#define CONFIG_DCT 0
|
||||
#define CONFIG_DWT 0
|
||||
#define CONFIG_ERROR_RESILIENCE 0
|
||||
#define CONFIG_FAAN 1
|
||||
#define CONFIG_FAST_UNALIGNED 1
|
||||
#define CONFIG_FFT 0
|
||||
#define CONFIG_LSP 0
|
||||
#define CONFIG_LZO 0
|
||||
#define CONFIG_MDCT 0
|
||||
#define CONFIG_PIXELUTILS 0
|
||||
#define CONFIG_NETWORK 0
|
||||
#define CONFIG_RDFT 0
|
||||
#define CONFIG_AUTODETECT 0
|
||||
#define CONFIG_FONTCONFIG 0
|
||||
#define CONFIG_LINUX_PERF 0
|
||||
#define CONFIG_MEMORY_POISONING 0
|
||||
#define CONFIG_NEON_CLOBBER_TEST 0
|
||||
#define CONFIG_OSSFUZZ 0
|
||||
#define CONFIG_PIC 1
|
||||
#define CONFIG_THUMB 0
|
||||
#define CONFIG_VALGRIND_BACKTRACE 0
|
||||
#define CONFIG_XMM_CLOBBER_TEST 0
|
||||
#define CONFIG_BSFS 1
|
||||
#define CONFIG_DECODERS 1
|
||||
#define CONFIG_ENCODERS 0
|
||||
#define CONFIG_HWACCELS 0
|
||||
#define CONFIG_PARSERS 1
|
||||
#define CONFIG_INDEVS 0
|
||||
#define CONFIG_OUTDEVS 0
|
||||
#define CONFIG_FILTERS 0
|
||||
#define CONFIG_DEMUXERS 0
|
||||
#define CONFIG_MUXERS 0
|
||||
#define CONFIG_PROTOCOLS 0
|
||||
#define CONFIG_AANDCTTABLES 0
|
||||
#define CONFIG_AC3DSP 0
|
||||
#define CONFIG_AUDIO_FRAME_QUEUE 0
|
||||
#define CONFIG_AUDIODSP 0
|
||||
#define CONFIG_BLOCKDSP 0
|
||||
#define CONFIG_BSWAPDSP 0
|
||||
#define CONFIG_CABAC 0
|
||||
#define CONFIG_DIRAC_PARSE 0
|
||||
#define CONFIG_DVPROFILE 0
|
||||
#define CONFIG_EXIF 0
|
||||
#define CONFIG_FAANDCT 0
|
||||
#define CONFIG_FAANIDCT 0
|
||||
#define CONFIG_FDCTDSP 0
|
||||
#define CONFIG_FLACDSP 1
|
||||
#define CONFIG_FMTCONVERT 0
|
||||
#define CONFIG_FRAME_THREAD_ENCODER 0
|
||||
#define CONFIG_G722DSP 0
|
||||
#define CONFIG_GOLOMB 0
|
||||
#define CONFIG_GPLV3 0
|
||||
#define CONFIG_H263DSP 0
|
||||
#define CONFIG_H264CHROMA 0
|
||||
#define CONFIG_H264DSP 0
|
||||
#define CONFIG_H264PARSE 0
|
||||
#define CONFIG_H264PRED 1
|
||||
#define CONFIG_H264QPEL 0
|
||||
#define CONFIG_HEVCPARSE 0
|
||||
#define CONFIG_HPELDSP 0
|
||||
#define CONFIG_HUFFMAN 0
|
||||
#define CONFIG_HUFFYUVDSP 0
|
||||
#define CONFIG_HUFFYUVENCDSP 0
|
||||
#define CONFIG_IDCTDSP 0
|
||||
#define CONFIG_IIRFILTER 0
|
||||
#define CONFIG_MDCT15 0
|
||||
#define CONFIG_INTRAX8 0
|
||||
#define CONFIG_ISO_MEDIA 0
|
||||
#define CONFIG_IVIDSP 0
|
||||
#define CONFIG_JPEGTABLES 0
|
||||
#define CONFIG_LGPLV3 0
|
||||
#define CONFIG_LIBX262 0
|
||||
#define CONFIG_LLAUDDSP 0
|
||||
#define CONFIG_LLVIDDSP 0
|
||||
#define CONFIG_LLVIDENCDSP 0
|
||||
#define CONFIG_LPC 0
|
||||
#define CONFIG_LZF 0
|
||||
#define CONFIG_ME_CMP 0
|
||||
#define CONFIG_MPEG_ER 0
|
||||
#define CONFIG_MPEGAUDIO 0
|
||||
#define CONFIG_MPEGAUDIODSP 0
|
||||
#define CONFIG_MPEGAUDIOHEADER 0
|
||||
#define CONFIG_MPEGVIDEO 0
|
||||
#define CONFIG_MPEGVIDEOENC 0
|
||||
#define CONFIG_MSS34DSP 0
|
||||
#define CONFIG_PIXBLOCKDSP 0
|
||||
#define CONFIG_QPELDSP 0
|
||||
#define CONFIG_QSV 0
|
||||
#define CONFIG_QSVDEC 0
|
||||
#define CONFIG_QSVENC 0
|
||||
#define CONFIG_RANGECODER 0
|
||||
#define CONFIG_RIFFDEC 0
|
||||
#define CONFIG_RIFFENC 0
|
||||
#define CONFIG_RTPDEC 0
|
||||
#define CONFIG_RTPENC_CHAIN 0
|
||||
#define CONFIG_RV34DSP 0
|
||||
#define CONFIG_SINEWIN 0
|
||||
#define CONFIG_SNAPPY 0
|
||||
#define CONFIG_SRTP 0
|
||||
#define CONFIG_STARTCODE 0
|
||||
#define CONFIG_TEXTUREDSP 0
|
||||
#define CONFIG_TEXTUREDSPENC 0
|
||||
#define CONFIG_TPELDSP 0
|
||||
#define CONFIG_VAAPI_1 0
|
||||
#define CONFIG_VAAPI_ENCODE 0
|
||||
#define CONFIG_VC1DSP 0
|
||||
#define CONFIG_VIDEODSP 1
|
||||
#define CONFIG_VP3DSP 0
|
||||
#define CONFIG_VP56DSP 0
|
||||
#define CONFIG_VP8DSP 1
|
||||
#define CONFIG_WMA_FREQS 0
|
||||
#define CONFIG_WMV2DSP 0
|
||||
#define CONFIG_NULL_BSF 1
|
||||
#define CONFIG_VP8_DECODER 1
|
||||
#define CONFIG_VP9_DECODER 1
|
||||
#define CONFIG_FLAC_DECODER 1
|
||||
#define CONFIG_FLAC_PARSER 0
|
||||
#define CONFIG_VP8_PARSER 1
|
||||
#define CONFIG_VP9_PARSER 1
|
||||
#endif /* FFMPEG_CONFIG_H */
|
||||
|
|
@ -1,249 +0,0 @@
|
|||
%include "config_common.asm"
|
||||
%define HAVE_ARMV5TE 0
|
||||
%define HAVE_ARMV6 0
|
||||
%define HAVE_ARMV6T2 0
|
||||
%define HAVE_ARMV8 0
|
||||
%define HAVE_NEON 0
|
||||
%define HAVE_VFP 0
|
||||
%define HAVE_VFPV3 0
|
||||
%define HAVE_ALTIVEC 0
|
||||
%define HAVE_DCBZL 1
|
||||
%define HAVE_LDBRX 1
|
||||
%define HAVE_PPC4XX 0
|
||||
%define HAVE_AMD3DNOW 1
|
||||
%define HAVE_AMD3DNOWEXT 1
|
||||
%define HAVE_AVX 1
|
||||
%define HAVE_AVX2 1
|
||||
%define HAVE_FMA3 1
|
||||
%define HAVE_FMA4 1
|
||||
%define HAVE_MMX 1
|
||||
%define HAVE_MMXEXT 1
|
||||
%define HAVE_SSE 1
|
||||
%define HAVE_SSE2 1
|
||||
%define HAVE_SSE3 1
|
||||
%define HAVE_SSE4 1
|
||||
%define HAVE_SSE42 1
|
||||
%define HAVE_SSSE3 1
|
||||
%define HAVE_XOP 1
|
||||
%define HAVE_CPUNOP 1
|
||||
%define HAVE_I686 1
|
||||
%define HAVE_LOONGSON 1
|
||||
%define HAVE_VIS 1
|
||||
%define HAVE_ARMV5TE_EXTERNAL 0
|
||||
%define HAVE_ARMV6_EXTERNAL 0
|
||||
%define HAVE_ARMV6T2_EXTERNAL 0
|
||||
%define HAVE_ARMV8_EXTERNAL 0
|
||||
%define HAVE_NEON_EXTERNAL 0
|
||||
%define HAVE_VFP_EXTERNAL 0
|
||||
%define HAVE_VFPV3_EXTERNAL 0
|
||||
%define HAVE_ALTIVEC_EXTERNAL 0
|
||||
%define HAVE_DCBZL_EXTERNAL 0
|
||||
%define HAVE_LDBRX_EXTERNAL 0
|
||||
%define HAVE_PPC4XX_EXTERNAL 0
|
||||
%define HAVE_AMD3DNOW_EXTERNAL 1
|
||||
%define HAVE_AMD3DNOWEXT_EXTERNAL 1
|
||||
%define HAVE_AVX_EXTERNAL 1
|
||||
%define HAVE_AVX2_EXTERNAL 1
|
||||
%define HAVE_FMA3_EXTERNAL 1
|
||||
%define HAVE_FMA4_EXTERNAL 1
|
||||
%define HAVE_MMX_EXTERNAL 1
|
||||
%define HAVE_MMXEXT_EXTERNAL 1
|
||||
%define HAVE_SSE_EXTERNAL 1
|
||||
%define HAVE_SSE2_EXTERNAL 1
|
||||
%define HAVE_SSE3_EXTERNAL 1
|
||||
%define HAVE_SSE4_EXTERNAL 1
|
||||
%define HAVE_SSE42_EXTERNAL 1
|
||||
%define HAVE_SSSE3_EXTERNAL 1
|
||||
%define HAVE_XOP_EXTERNAL 1
|
||||
%define HAVE_CPUNOP_EXTERNAL 0
|
||||
%define HAVE_I686_EXTERNAL 0
|
||||
%define HAVE_LOONGSON_EXTERNAL 0
|
||||
%define HAVE_VIS_EXTERNAL 0
|
||||
%define HAVE_ARMV5TE_INLINE 0
|
||||
%define HAVE_ARMV6_INLINE 0
|
||||
%define HAVE_ARMV6T2_INLINE 0
|
||||
%define HAVE_ARMV8_INLINE 0
|
||||
%define HAVE_NEON_INLINE 0
|
||||
%define HAVE_VFP_INLINE 0
|
||||
%define HAVE_VFPV3_INLINE 0
|
||||
%define HAVE_ALTIVEC_INLINE 0
|
||||
%define HAVE_DCBZL_INLINE 0
|
||||
%define HAVE_LDBRX_INLINE 0
|
||||
%define HAVE_PPC4XX_INLINE 0
|
||||
%define HAVE_AMD3DNOW_INLINE 1
|
||||
%define HAVE_AMD3DNOWEXT_INLINE 1
|
||||
%define HAVE_AVX_INLINE 1
|
||||
%define HAVE_AVX2_INLINE 1
|
||||
%define HAVE_FMA3_INLINE 1
|
||||
%define HAVE_FMA4_INLINE 1
|
||||
%define HAVE_MMX_INLINE 1
|
||||
%define HAVE_MMXEXT_INLINE 1
|
||||
%define HAVE_SSE_INLINE 1
|
||||
%define HAVE_SSE2_INLINE 1
|
||||
%define HAVE_SSE3_INLINE 1
|
||||
%define HAVE_SSE4_INLINE 1
|
||||
%define HAVE_SSE42_INLINE 1
|
||||
%define HAVE_SSSE3_INLINE 1
|
||||
%define HAVE_XOP_INLINE 1
|
||||
%define HAVE_CPUNOP_INLINE 0
|
||||
%define HAVE_I686_INLINE 0
|
||||
%define HAVE_LOONGSON_INLINE 0
|
||||
%define HAVE_VIS_INLINE 0
|
||||
%define HAVE_ALIGNED_STACK 1
|
||||
%define HAVE_FAST_64BIT 0
|
||||
%define HAVE_FAST_CLZ 0
|
||||
%define HAVE_FAST_CMOV 0
|
||||
%define HAVE_LOCAL_ALIGNED_8 1
|
||||
%define HAVE_LOCAL_ALIGNED_16 1
|
||||
%define HAVE_SIMD_ALIGN_16 1
|
||||
%define HAVE_ATOMICS_GCC 1
|
||||
%define HAVE_ATOMICS_SUNCC 0
|
||||
%define HAVE_ATOMICS_WIN32 0
|
||||
%define HAVE_ATOMIC_CAS_PTR 0
|
||||
%define HAVE_MACHINE_RW_BARRIER 0
|
||||
%define HAVE_MEMORYBARRIER 0
|
||||
%define HAVE_MM_EMPTY 1
|
||||
%define HAVE_RDTSC 0
|
||||
%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
|
||||
%define HAVE_INLINE_ASM 1
|
||||
%define HAVE_SYMVER 0
|
||||
%define HAVE_YASM 1
|
||||
%define HAVE_BIGENDIAN 0
|
||||
%define HAVE_FAST_UNALIGNED 1
|
||||
%define HAVE_ALSA_ASOUNDLIB_H 0
|
||||
%define HAVE_ALTIVEC_H 0
|
||||
%define HAVE_ARPA_INET_H 0
|
||||
%define HAVE_CDIO_PARANOIA_H 0
|
||||
%define HAVE_CDIO_PARANOIA_PARANOIA_H 0
|
||||
%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
|
||||
%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
|
||||
%define HAVE_DEV_IC_BT8XX_H 0
|
||||
%define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
|
||||
%define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
|
||||
%define HAVE_DIRECT_H 0
|
||||
%define HAVE_DLFCN_H 1
|
||||
%define HAVE_DXVA_H 0
|
||||
%define HAVE_GSM_H 0
|
||||
%define HAVE_IO_H 0
|
||||
%define HAVE_MACH_MACH_TIME_H 1
|
||||
%define HAVE_MACHINE_IOCTL_BT848_H 0
|
||||
%define HAVE_MACHINE_IOCTL_METEOR_H 0
|
||||
%define HAVE_POLL_H 1
|
||||
%define HAVE_SNDIO_H 0
|
||||
%define HAVE_SOUNDCARD_H 0
|
||||
%define HAVE_SYS_MMAN_H 1
|
||||
%define HAVE_SYS_PARAM_H 1
|
||||
%define HAVE_SYS_RESOURCE_H 1
|
||||
%define HAVE_SYS_SELECT_H 1
|
||||
%define HAVE_SYS_SOUNDCARD_H 0
|
||||
%define HAVE_SYS_TIME_H 1
|
||||
%define HAVE_SYS_UN_H 1
|
||||
%define HAVE_SYS_VIDEOIO_H 0
|
||||
%define HAVE_UNISTD_H 1
|
||||
%define HAVE_WINDOWS_H 0
|
||||
%define HAVE_WINSOCK2_H 0
|
||||
%define HAVE_INTRINSICS_NEON 0
|
||||
%define HAVE_ATANF 1
|
||||
%define HAVE_ATAN2F 1
|
||||
%define HAVE_CBRTF 1
|
||||
%define HAVE_COSF 1
|
||||
%define HAVE_EXP2 1
|
||||
%define HAVE_EXP2F 1
|
||||
%define HAVE_EXPF 1
|
||||
%define HAVE_ISINF 1
|
||||
%define HAVE_ISNAN 1
|
||||
%define HAVE_LDEXPF 1
|
||||
%define HAVE_LLRINT 1
|
||||
%define HAVE_LLRINTF 1
|
||||
%define HAVE_LOG2 1
|
||||
%define HAVE_LOG2F 1
|
||||
%define HAVE_LOG10F 1
|
||||
%define HAVE_LRINT 1
|
||||
%define HAVE_LRINTF 1
|
||||
%define HAVE_POWF 1
|
||||
%define HAVE_RINT 1
|
||||
%define HAVE_ROUND 1
|
||||
%define HAVE_ROUNDF 1
|
||||
%define HAVE_SINF 1
|
||||
%define HAVE_TRUNC 1
|
||||
%define HAVE_TRUNCF 1
|
||||
%define HAVE_ALIGNED_MALLOC 0
|
||||
%define HAVE_CLOSESOCKET 0
|
||||
%define HAVE_COMMANDLINETOARGVW 0
|
||||
%define HAVE_COTASKMEMFREE 0
|
||||
%define HAVE_CRYPTGENRANDOM 0
|
||||
%define HAVE_DLOPEN 1
|
||||
%define HAVE_FCNTL 1
|
||||
%define HAVE_FLT_LIM 1
|
||||
%define HAVE_FORK 1
|
||||
%define HAVE_GETADDRINFO 0
|
||||
%define HAVE_GETHRTIME 0
|
||||
%define HAVE_GETOPT 1
|
||||
%define HAVE_GETPROCESSAFFINITYMASK 0
|
||||
%define HAVE_GETPROCESSMEMORYINFO 0
|
||||
%define HAVE_GETPROCESSTIMES 0
|
||||
%define HAVE_GETRUSAGE 1
|
||||
%define HAVE_GETSERVBYPORT 0
|
||||
%define HAVE_GETSYSTEMTIMEASFILETIME 0
|
||||
%define HAVE_GETTIMEOFDAY 1
|
||||
%define HAVE_INET_ATON 0
|
||||
%define HAVE_ISATTY 1
|
||||
%define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
|
||||
%define HAVE_MACH_ABSOLUTE_TIME 1
|
||||
%define HAVE_MAPVIEWOFFILE 0
|
||||
%define HAVE_MKSTEMP 1
|
||||
%define HAVE_MMAP 1
|
||||
%define HAVE_MPROTECT 1
|
||||
%define HAVE_NANOSLEEP 1
|
||||
%define HAVE_SCHED_GETAFFINITY 0
|
||||
%define HAVE_SETCONSOLETEXTATTRIBUTE 0
|
||||
%define HAVE_SETMODE 0
|
||||
%define HAVE_SETRLIMIT 1
|
||||
%define HAVE_SLEEP 0
|
||||
%define HAVE_STRERROR_R 1
|
||||
%define HAVE_STRPTIME 1
|
||||
%define HAVE_SYSCONF 1
|
||||
%define HAVE_SYSCTL 1
|
||||
%define HAVE_USLEEP 1
|
||||
%define HAVE_VIRTUALALLOC 0
|
||||
%define HAVE_PTHREADS 0
|
||||
%define HAVE_W32THREADS 0
|
||||
%define HAVE_AS_DN_DIRECTIVE 0
|
||||
%define HAVE_AS_FUNC 0
|
||||
%define HAVE_AS_OBJECT_ARCH 0
|
||||
%define HAVE_ASM_MOD_Q 0
|
||||
%define HAVE_ATTRIBUTE_MAY_ALIAS 1
|
||||
%define HAVE_ATTRIBUTE_PACKED 1
|
||||
%define HAVE_EBP_AVAILABLE 1
|
||||
%define HAVE_EBX_AVAILABLE 1
|
||||
%define HAVE_GNU_AS 0
|
||||
%define HAVE_IBM_ASM 0
|
||||
%define HAVE_INLINE_ASM_LABELS 1
|
||||
%define HAVE_PRAGMA_DEPRECATED 1
|
||||
%define HAVE_SYMVER_ASM_LABEL 0
|
||||
%define HAVE_SYMVER_GNU_ASM 0
|
||||
%define HAVE_VFP_ARGS 0
|
||||
%define HAVE_XFORM_ASM 0
|
||||
%define HAVE_XMM_CLOBBERS 1
|
||||
%define HAVE_SOCKLEN_T 0
|
||||
%define HAVE_STRUCT_ADDRINFO 0
|
||||
%define HAVE_STRUCT_GROUP_SOURCE_REQ 0
|
||||
%define HAVE_STRUCT_IP_MREQ_SOURCE 0
|
||||
%define HAVE_STRUCT_IPV6_MREQ 0
|
||||
%define HAVE_STRUCT_POLLFD 0
|
||||
%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
|
||||
%define HAVE_STRUCT_SOCKADDR_IN6 0
|
||||
%define HAVE_STRUCT_SOCKADDR_SA_LEN 0
|
||||
%define HAVE_STRUCT_SOCKADDR_STORAGE 0
|
||||
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
|
||||
%define HAVE_ATOMICS_NATIVE 1
|
||||
%define HAVE_DOS_PATHS 0
|
||||
%define HAVE_DXVA2_LIB 0
|
||||
%define HAVE_LIBC_MSVCRT 0
|
||||
%define HAVE_LIBDC1394_1 0
|
||||
%define HAVE_LIBDC1394_2 0
|
||||
%define HAVE_SDL 0
|
||||
%define HAVE_THREADS 0
|
||||
%define HAVE_VDPAU_X11 0
|
||||
%define HAVE_XLIB 0
|
||||
|
||||
|
|
@ -1,259 +0,0 @@
|
|||
/* Automatically generated by configure - do not modify! */
|
||||
#ifndef LIBAV_CONFIG_H
|
||||
#define LIBAV_CONFIG_H
|
||||
#define LIBAV_CONFIGURATION "--disable-programs --disable-everything"
|
||||
#define LIBAV_LICENSE "LGPL version 2.1 or later"
|
||||
#define AVCONV_DATADIR "/usr/local/share/avconv"
|
||||
#define CC_IDENT "Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)"
|
||||
#define restrict restrict
|
||||
#define EXTERN_PREFIX ""
|
||||
#define EXTERN_ASM
|
||||
#define SLIBSUF ".dylib"
|
||||
#define HAVE_ARMV5TE 0
|
||||
#define HAVE_ARMV6 0
|
||||
#define HAVE_ARMV6T2 0
|
||||
#define HAVE_ARMV8 0
|
||||
#define HAVE_NEON 0
|
||||
#define HAVE_VFP 0
|
||||
#define HAVE_VFPV3 0
|
||||
#define HAVE_ALTIVEC 0
|
||||
#define HAVE_DCBZL 1
|
||||
#define HAVE_LDBRX 1
|
||||
#define HAVE_PPC4XX 0
|
||||
#define HAVE_AMD3DNOW 1
|
||||
#define HAVE_AMD3DNOWEXT 1
|
||||
#define HAVE_AVX 1
|
||||
#define HAVE_AVX2 1
|
||||
#define HAVE_FMA3 1
|
||||
#define HAVE_FMA4 1
|
||||
#define HAVE_MMX 1
|
||||
#define HAVE_MMXEXT 1
|
||||
#define HAVE_SSE 1
|
||||
#define HAVE_SSE2 1
|
||||
#define HAVE_SSE3 1
|
||||
#define HAVE_SSE4 1
|
||||
#define HAVE_SSE42 1
|
||||
#define HAVE_SSSE3 1
|
||||
#define HAVE_XOP 1
|
||||
#define HAVE_CPUNOP 1
|
||||
#define HAVE_I686 1
|
||||
#define HAVE_LOONGSON 1
|
||||
#define HAVE_VIS 1
|
||||
#define HAVE_ARMV5TE_EXTERNAL 0
|
||||
#define HAVE_ARMV6_EXTERNAL 0
|
||||
#define HAVE_ARMV6T2_EXTERNAL 0
|
||||
#define HAVE_ARMV8_EXTERNAL 0
|
||||
#define HAVE_NEON_EXTERNAL 0
|
||||
#define HAVE_VFP_EXTERNAL 0
|
||||
#define HAVE_VFPV3_EXTERNAL 0
|
||||
#define HAVE_ALTIVEC_EXTERNAL 0
|
||||
#define HAVE_DCBZL_EXTERNAL 0
|
||||
#define HAVE_LDBRX_EXTERNAL 0
|
||||
#define HAVE_PPC4XX_EXTERNAL 0
|
||||
#define HAVE_AMD3DNOW_EXTERNAL 1
|
||||
#define HAVE_AMD3DNOWEXT_EXTERNAL 1
|
||||
#define HAVE_AVX_EXTERNAL 1
|
||||
#define HAVE_AVX2_EXTERNAL 1
|
||||
#define HAVE_FMA3_EXTERNAL 1
|
||||
#define HAVE_FMA4_EXTERNAL 1
|
||||
#define HAVE_MMX_EXTERNAL 1
|
||||
#define HAVE_MMXEXT_EXTERNAL 1
|
||||
#define HAVE_SSE_EXTERNAL 1
|
||||
#define HAVE_SSE2_EXTERNAL 1
|
||||
#define HAVE_SSE3_EXTERNAL 1
|
||||
#define HAVE_SSE4_EXTERNAL 1
|
||||
#define HAVE_SSE42_EXTERNAL 1
|
||||
#define HAVE_SSSE3_EXTERNAL 1
|
||||
#define HAVE_XOP_EXTERNAL 1
|
||||
#define HAVE_CPUNOP_EXTERNAL 0
|
||||
#define HAVE_I686_EXTERNAL 0
|
||||
#define HAVE_LOONGSON_EXTERNAL 0
|
||||
#define HAVE_VIS_EXTERNAL 0
|
||||
#define HAVE_ARMV5TE_INLINE 0
|
||||
#define HAVE_ARMV6_INLINE 0
|
||||
#define HAVE_ARMV6T2_INLINE 0
|
||||
#define HAVE_ARMV8_INLINE 0
|
||||
#define HAVE_NEON_INLINE 0
|
||||
#define HAVE_VFP_INLINE 0
|
||||
#define HAVE_VFPV3_INLINE 0
|
||||
#define HAVE_ALTIVEC_INLINE 0
|
||||
#define HAVE_DCBZL_INLINE 0
|
||||
#define HAVE_LDBRX_INLINE 0
|
||||
#define HAVE_PPC4XX_INLINE 0
|
||||
#define HAVE_AMD3DNOW_INLINE 1
|
||||
#define HAVE_AMD3DNOWEXT_INLINE 1
|
||||
#define HAVE_AVX_INLINE 1
|
||||
#define HAVE_AVX2_INLINE 1
|
||||
#define HAVE_FMA3_INLINE 1
|
||||
#define HAVE_FMA4_INLINE 1
|
||||
#define HAVE_MMX_INLINE 1
|
||||
#define HAVE_MMXEXT_INLINE 1
|
||||
#define HAVE_SSE_INLINE 1
|
||||
#define HAVE_SSE2_INLINE 1
|
||||
#define HAVE_SSE3_INLINE 1
|
||||
#define HAVE_SSE4_INLINE 1
|
||||
#define HAVE_SSE42_INLINE 1
|
||||
#define HAVE_SSSE3_INLINE 1
|
||||
#define HAVE_XOP_INLINE 1
|
||||
#define HAVE_CPUNOP_INLINE 0
|
||||
#define HAVE_I686_INLINE 0
|
||||
#define HAVE_LOONGSON_INLINE 0
|
||||
#define HAVE_VIS_INLINE 0
|
||||
#define HAVE_ALIGNED_STACK 1
|
||||
#define HAVE_FAST_64BIT 0
|
||||
#define HAVE_FAST_CLZ 0
|
||||
#define HAVE_FAST_CMOV 0
|
||||
#define HAVE_LOCAL_ALIGNED_8 1
|
||||
#define HAVE_LOCAL_ALIGNED_16 1
|
||||
#define HAVE_SIMD_ALIGN_16 1
|
||||
#define HAVE_ATOMICS_GCC 1
|
||||
#define HAVE_ATOMICS_SUNCC 0
|
||||
#define HAVE_ATOMICS_WIN32 0
|
||||
#define HAVE_ATOMIC_CAS_PTR 0
|
||||
#define HAVE_MACHINE_RW_BARRIER 0
|
||||
#define HAVE_MEMORYBARRIER 0
|
||||
#define HAVE_MM_EMPTY 1
|
||||
#define HAVE_RDTSC 0
|
||||
#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
|
||||
#define HAVE_INLINE_ASM 1
|
||||
#define HAVE_SYMVER 0
|
||||
#define HAVE_YASM 1
|
||||
#define HAVE_BIGENDIAN 0
|
||||
#define HAVE_FAST_UNALIGNED 1
|
||||
#define HAVE_ALSA_ASOUNDLIB_H 0
|
||||
#define HAVE_ALTIVEC_H 0
|
||||
#define HAVE_ARPA_INET_H 0
|
||||
#define HAVE_CDIO_PARANOIA_H 0
|
||||
#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
|
||||
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
|
||||
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
|
||||
#define HAVE_DEV_IC_BT8XX_H 0
|
||||
#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
|
||||
#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
|
||||
#define HAVE_DIRECT_H 0
|
||||
#define HAVE_DLFCN_H 1
|
||||
#define HAVE_DXVA_H 0
|
||||
#define HAVE_GSM_H 0
|
||||
#define HAVE_IO_H 0
|
||||
#define HAVE_MACH_MACH_TIME_H 1
|
||||
#define HAVE_MACHINE_IOCTL_BT848_H 0
|
||||
#define HAVE_MACHINE_IOCTL_METEOR_H 0
|
||||
#define HAVE_POLL_H 1
|
||||
#define HAVE_SNDIO_H 0
|
||||
#define HAVE_SOUNDCARD_H 0
|
||||
#define HAVE_SYS_MMAN_H 1
|
||||
#define HAVE_SYS_PARAM_H 1
|
||||
#define HAVE_SYS_RESOURCE_H 1
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
#define HAVE_SYS_SOUNDCARD_H 0
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#define HAVE_SYS_UN_H 1
|
||||
#define HAVE_SYS_VIDEOIO_H 0
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_WINDOWS_H 0
|
||||
#define HAVE_WINSOCK2_H 0
|
||||
#define HAVE_INTRINSICS_NEON 0
|
||||
#define HAVE_ATANF 1
|
||||
#define HAVE_ATAN2F 1
|
||||
#define HAVE_CBRTF 1
|
||||
#define HAVE_COSF 1
|
||||
#define HAVE_EXP2 1
|
||||
#define HAVE_EXP2F 1
|
||||
#define HAVE_EXPF 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_LDEXPF 1
|
||||
#define HAVE_LLRINT 1
|
||||
#define HAVE_LLRINTF 1
|
||||
#define HAVE_LOG2 1
|
||||
#define HAVE_LOG2F 1
|
||||
#define HAVE_LOG10F 1
|
||||
#define HAVE_LRINT 1
|
||||
#define HAVE_LRINTF 1
|
||||
#define HAVE_POWF 1
|
||||
#define HAVE_RINT 1
|
||||
#define HAVE_ROUND 1
|
||||
#define HAVE_ROUNDF 1
|
||||
#define HAVE_SINF 1
|
||||
#define HAVE_TRUNC 1
|
||||
#define HAVE_TRUNCF 1
|
||||
#define HAVE_ALIGNED_MALLOC 0
|
||||
#define HAVE_CLOSESOCKET 0
|
||||
#define HAVE_COMMANDLINETOARGVW 0
|
||||
#define HAVE_COTASKMEMFREE 0
|
||||
#define HAVE_CRYPTGENRANDOM 0
|
||||
#define HAVE_DLOPEN 1
|
||||
#define HAVE_FCNTL 1
|
||||
#define HAVE_FLT_LIM 1
|
||||
#define HAVE_FORK 1
|
||||
#define HAVE_GETADDRINFO 0
|
||||
#define HAVE_GETHRTIME 0
|
||||
#define HAVE_GETOPT 1
|
||||
#define HAVE_GETPROCESSAFFINITYMASK 0
|
||||
#define HAVE_GETPROCESSMEMORYINFO 0
|
||||
#define HAVE_GETPROCESSTIMES 0
|
||||
#define HAVE_GETRUSAGE 1
|
||||
#define HAVE_GETSERVBYPORT 0
|
||||
#define HAVE_GETSYSTEMTIMEASFILETIME 0
|
||||
#define HAVE_GETTIMEOFDAY 1
|
||||
#define HAVE_INET_ATON 0
|
||||
#define HAVE_ISATTY 1
|
||||
#define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
|
||||
#define HAVE_MACH_ABSOLUTE_TIME 1
|
||||
#define HAVE_MAPVIEWOFFILE 0
|
||||
#define HAVE_MKSTEMP 1
|
||||
#define HAVE_MMAP 1
|
||||
#define HAVE_MPROTECT 1
|
||||
#define HAVE_NANOSLEEP 1
|
||||
#define HAVE_SCHED_GETAFFINITY 0
|
||||
#define HAVE_SETCONSOLETEXTATTRIBUTE 0
|
||||
#define HAVE_SETMODE 0
|
||||
#define HAVE_SETRLIMIT 1
|
||||
#define HAVE_SLEEP 0
|
||||
#define HAVE_STRERROR_R 1
|
||||
#define HAVE_STRPTIME 1
|
||||
#define HAVE_SYSCONF 1
|
||||
#define HAVE_SYSCTL 1
|
||||
#define HAVE_USLEEP 1
|
||||
#define HAVE_VIRTUALALLOC 0
|
||||
#define HAVE_PTHREADS 0
|
||||
#define HAVE_W32THREADS 0
|
||||
#define HAVE_AS_DN_DIRECTIVE 0
|
||||
#define HAVE_AS_FUNC 0
|
||||
#define HAVE_AS_OBJECT_ARCH 0
|
||||
#define HAVE_ASM_MOD_Q 0
|
||||
#define HAVE_ATTRIBUTE_MAY_ALIAS 1
|
||||
#define HAVE_ATTRIBUTE_PACKED 1
|
||||
#define HAVE_EBP_AVAILABLE 1
|
||||
#define HAVE_EBX_AVAILABLE 1
|
||||
#define HAVE_GNU_AS 0
|
||||
#define HAVE_IBM_ASM 0
|
||||
#define HAVE_INLINE_ASM_LABELS 1
|
||||
#define HAVE_PRAGMA_DEPRECATED 1
|
||||
#define HAVE_SYMVER_ASM_LABEL 0
|
||||
#define HAVE_SYMVER_GNU_ASM 0
|
||||
#define HAVE_VFP_ARGS 0
|
||||
#define HAVE_XFORM_ASM 0
|
||||
#define HAVE_XMM_CLOBBERS 1
|
||||
#define HAVE_SOCKLEN_T 0
|
||||
#define HAVE_STRUCT_ADDRINFO 0
|
||||
#define HAVE_STRUCT_GROUP_SOURCE_REQ 0
|
||||
#define HAVE_STRUCT_IP_MREQ_SOURCE 0
|
||||
#define HAVE_STRUCT_IPV6_MREQ 0
|
||||
#define HAVE_STRUCT_POLLFD 0
|
||||
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
|
||||
#define HAVE_STRUCT_SOCKADDR_IN6 0
|
||||
#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
|
||||
#define HAVE_STRUCT_SOCKADDR_STORAGE 0
|
||||
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
|
||||
#define HAVE_ATOMICS_NATIVE 1
|
||||
#define HAVE_DOS_PATHS 0
|
||||
#define HAVE_DXVA2_LIB 0
|
||||
#define HAVE_LIBC_MSVCRT 0
|
||||
#define HAVE_LIBDC1394_1 0
|
||||
#define HAVE_LIBDC1394_2 0
|
||||
#define HAVE_SDL 0
|
||||
#define HAVE_THREADS 0
|
||||
#define HAVE_VDPAU_X11 0
|
||||
#define HAVE_XLIB 0
|
||||
#endif /* LIBAV_CONFIG_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue