merge mozilla-inbound to mozilla-central. r=merge a=merge

This commit is contained in:
Sebastian Hengst 2017-11-07 12:43:06 +02:00
Родитель f2944960ec 832cd8d996
Коммит f5e52adeea
113 изменённых файлов: 4719 добавлений и 4611 удалений

Просмотреть файл

@ -358,10 +358,17 @@ const CustomizableWidgets = [
_showTabs(paginationInfo) {
this._showTabsPromise = this._showTabsPromise.then(() => {
return this.__showTabs(paginationInfo);
}, e => {
Cu.reportError(e);
});
},
// Return a new promise to update the tab list.
__showTabs(paginationInfo) {
if (!this._tabsList) {
// Closed between the previous `this._showTabsPromise`
// resolving and now.
return undefined;
}
let doc = this._tabsList.ownerDocument;
return SyncedTabs.getTabClients().then(clients => {
// The view may have been hidden while the promise was resolving.

Просмотреть файл

@ -468,10 +468,8 @@ nsBrowserContentHandler.prototype = {
} else {
info += " --preferences Open Preferences dialog.\n";
}
if (AppConstants.platform == "win" || AppConstants.MOZ_WIDGET_GTK) {
info += " --screenshot [<path>] Save screenshot to <path> or in working directory.\n";
info += " --window-size width[,height] Width and optionally height of screenshot.\n";
}
info += " --screenshot [<path>] Save screenshot to <path> or in working directory.\n";
info += " --window-size width[,height] Width and optionally height of screenshot.\n";
info += " --search <term> Search <term> with your default search engine.\n";
return info;
},

Просмотреть файл

@ -34,7 +34,11 @@ const BUILT_IN_SECTIONS = {
title: {id: "header_recommended_by", values: {provider: options.provider_name}},
disclaimer: {
text: {id: options.disclaimer_text || "section_disclaimer_topstories"},
link: {href: options.disclaimer_link, id: options.disclaimer_linktext || "section_disclaimer_topstories_linktext"},
link: {
// The href fallback is temporary so users in existing Shield studies get this configuration as well
href: options.disclaimer_link || "https://getpocket.cdn.mozilla.net/firefox/new_tab_learn_more",
id: options.disclaimer_linktext || "section_disclaimer_topstories_linktext"
},
button: {id: options.disclaimer_buttontext || "section_disclaimer_topstories_buttontext"}
},
maxRows: 1,

Просмотреть файл

@ -1524,7 +1524,11 @@ class CreditCards extends AutofillRecords {
}
_normalizeFields(creditCard) {
// Normalize name
this._normalizeCCName(creditCard);
this._normalizeCCExpirationDate(creditCard);
}
_normalizeCCName(creditCard) {
if (creditCard["cc-given-name"] || creditCard["cc-additional-name"] || creditCard["cc-family-name"]) {
if (!creditCard["cc-name"]) {
creditCard["cc-name"] = FormAutofillNameUtils.joinNameParts({
@ -1538,8 +1542,9 @@ class CreditCards extends AutofillRecords {
delete creditCard["cc-additional-name"];
delete creditCard["cc-family-name"];
}
}
// Validate expiry date
_normalizeCCExpirationDate(creditCard) {
if (creditCard["cc-exp-month"]) {
let expMonth = parseInt(creditCard["cc-exp-month"], 10);
if (isNaN(expMonth) || expMonth < 1 || expMonth > 12) {
@ -1548,6 +1553,7 @@ class CreditCards extends AutofillRecords {
creditCard["cc-exp-month"] = expMonth;
}
}
if (creditCard["cc-exp-year"]) {
let expYear = parseInt(creditCard["cc-exp-year"], 10);
if (isNaN(expYear) || expYear < 0) {
@ -1559,6 +1565,65 @@ class CreditCards extends AutofillRecords {
creditCard["cc-exp-year"] = expYear;
}
}
if (creditCard["cc-exp"] && (!creditCard["cc-exp-month"] || !creditCard["cc-exp-year"])) {
let rules = [
{
regex: "(\\d{4})[-/](\\d{1,2})",
yearIndex: 1,
monthIndex: 2,
},
{
regex: "(\\d{1,2})[-/](\\d{4})",
yearIndex: 2,
monthIndex: 1,
},
{
regex: "(\\d{1,2})[-/](\\d{1,2})",
},
{
regex: "(\\d{2})(\\d{2})",
},
];
for (let rule of rules) {
let result = new RegExp(`(?:^|\\D)${rule.regex}(?!\\d)`).exec(creditCard["cc-exp"]);
if (!result) {
continue;
}
let expYear, expMonth;
if (!rule.yearIndex || !rule.monthIndex) {
expMonth = parseInt(result[1], 10);
if (expMonth > 12) {
expYear = parseInt(result[1], 10);
expMonth = parseInt(result[2], 10);
} else {
expYear = parseInt(result[2], 10);
}
} else {
expYear = parseInt(result[rule.yearIndex], 10);
expMonth = parseInt(result[rule.monthIndex], 10);
}
if (expMonth < 1 || expMonth > 12) {
continue;
}
if (expYear < 100) {
expYear += 2000;
} else if (expYear < 2000) {
continue;
}
creditCard["cc-exp-month"] = expMonth;
creditCard["cc-exp-year"] = expYear;
break;
}
}
delete creditCard["cc-exp"];
}
}

Просмотреть файл

@ -527,7 +527,6 @@ const CREDIT_CARD_NORMALIZE_TESTCASES = [
{
description: "No normalizable field",
creditCard: {
"cc-number": "1234123412341234", // cc-number won't be verified
},
expectedResult: {
},
@ -540,7 +539,6 @@ const CREDIT_CARD_NORMALIZE_TESTCASES = [
"cc-name": "Timothy John Berners-Lee",
"cc-given-name": "John",
"cc-family-name": "Doe",
"cc-number": "1234123412341234", // cc-number won't be verified
},
expectedResult: {
"cc-name": "Timothy John Berners-Lee",
@ -551,12 +549,209 @@ const CREDIT_CARD_NORMALIZE_TESTCASES = [
creditCard: {
"cc-given-name": "John",
"cc-family-name": "Doe",
"cc-number": "1234123412341234", // cc-number won't be verified
},
expectedResult: {
"cc-name": "John Doe",
},
},
// Expiration Date
{
description: "Has \"cc-exp\" formatted \"yyyy-mm\"",
creditCard: {
"cc-exp": "2022-12",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yyyy/mm\"",
creditCard: {
"cc-exp": "2022/12",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yyyy-m\"",
creditCard: {
"cc-exp": "2022-3",
},
expectedResult: {
"cc-exp-month": 3,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yyyy/m\"",
creditCard: {
"cc-exp": "2022/3",
},
expectedResult: {
"cc-exp-month": 3,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"mm-yyyy\"",
creditCard: {
"cc-exp": "12-2022",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"mm/yyyy\"",
creditCard: {
"cc-exp": "12/2022",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"m-yyyy\"",
creditCard: {
"cc-exp": "3-2022",
},
expectedResult: {
"cc-exp-month": 3,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"m/yyyy\"",
creditCard: {
"cc-exp": "3/2022",
},
expectedResult: {
"cc-exp-month": 3,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"mm-yy\"",
creditCard: {
"cc-exp": "12-22",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"mm/yy\"",
creditCard: {
"cc-exp": "12/22",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yy-mm\"",
creditCard: {
"cc-exp": "22-12",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yy/mm\"",
creditCard: {
"cc-exp": "22/12",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"mmyy\"",
creditCard: {
"cc-exp": "1222",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" formatted \"yymm\"",
creditCard: {
"cc-exp": "2212",
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has \"cc-exp\" with spaces",
creditCard: {
"cc-exp": " 2033-11 ",
},
expectedResult: {
"cc-exp-month": 11,
"cc-exp-year": 2033,
},
},
{
description: "Has invalid \"cc-exp\"",
creditCard: {
"cc-exp": "99-9999",
},
expectedResult: {
"cc-exp-month": undefined,
"cc-exp-year": undefined,
},
},
{
description: "Has both \"cc-exp-*\" and \"cc-exp\"",
creditCard: {
"cc-exp": "2022-12",
"cc-exp-month": 3,
"cc-exp-year": 2030,
},
expectedResult: {
"cc-exp-month": 3,
"cc-exp-year": 2030,
},
},
{
description: "Has only \"cc-exp-year\" and \"cc-exp\"",
creditCard: {
"cc-exp": "2022-12",
"cc-exp-year": 2030,
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
{
description: "Has only \"cc-exp-month\" and \"cc-exp\"",
creditCard: {
"cc-exp": "2022-12",
"cc-exp-month": 3,
},
expectedResult: {
"cc-exp-month": 12,
"cc-exp-year": 2022,
},
},
// Card Number
{
description: "Number should be encrypted and masked",
creditCard: {

Просмотреть файл

@ -323,9 +323,9 @@ def prune_final_dir_for_clang_tidy(final_dir):
if __name__ == "__main__":
# The directories end up in the debug info, so the easy way of getting
# a reproducible build is to run it in a know absolute directory.
# We use a directory in /builds/slave because the mozilla infrastructure
# cleans it up automatically.
base_dir = "/builds/slave/moz-toolchain"
# We use a directory that is registered as a volume in the Docker image.
base_dir = "/builds/worker/workspace/moz-toolchain"
if is_windows():
# TODO: Because Windows taskcluster builds are run with distinct
# user IDs for each job, we can't store things in some globally

Просмотреть файл

@ -33,10 +33,12 @@ support-files =
[browser_menu_item_02.js]
[browser_mouse_resize.js]
[browser_navigation.js]
skip-if = true # Bug 1413765
[browser_network_throttling.js]
[browser_page_state.js]
[browser_permission_doorhanger.js]
tags = geolocation
skip-if = true # Bug 1413765
[browser_resize_cmd.js]
[browser_screenshot_button.js]
[browser_tab_close.js]

Просмотреть файл

@ -178,10 +178,10 @@ function testBasicOperation() {
]
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t, { class: 'compositable' },
subtest.frames, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected);
@ -253,15 +253,15 @@ function testKeyframesWithGeometricProperties() {
}
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t, { class: 'compositable' },
subtest.frames, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
// First, a transform animation is running on compositor.
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected.withoutGeometric);
}).then(function() {
}).then(() => {
// Add a 'width' property.
var keyframes = animation.effect.getKeyframes();
@ -270,13 +270,13 @@ function testKeyframesWithGeometricProperties() {
animation.effect.setKeyframes(keyframes);
return waitForFrame();
}).then(function() {
}).then(() => {
// Now the transform animation is not running on compositor because of
// the 'width' property.
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected.withGeometric);
}).then(function() {
}).then(() => {
// Remove the 'width' property.
var keyframes = animation.effect.getKeyframes();
@ -285,7 +285,7 @@ function testKeyframesWithGeometricProperties() {
animation.effect.setKeyframes(keyframes);
return waitForFrame();
}).then(function() {
}).then(() => {
// Finally, the transform animation is running on compositor.
assert_animation_property_state_equals(
animation.effect.getProperties(),
@ -306,7 +306,7 @@ function testSetOfGeometricProperties() {
];
geometricProperties.forEach(property => {
promise_test(function(t) {
promise_test(t => {
const keyframes = {
[propertyToIDL(property)]: [ '100px', '200px' ],
transform: [ 'translate(0px)', 'translate(100px)' ]
@ -314,7 +314,7 @@ function testSetOfGeometricProperties() {
var animation = addDivAndAnimate(t, { class: 'compositable' },
keyframes, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[
@ -403,22 +403,22 @@ function testStyleChanges() {
]
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t, { class: 'compositable' },
subtest.frames, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_all_properties_running_on_compositor(
animation.effect.getProperties(),
subtest.expected);
animation.effect.target.style = subtest.style;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected);
animation.effect.target.style = '';
return waitForFrame();
}).then(function() {
}).then(() => {
assert_all_properties_running_on_compositor(
animation.effect.getProperties(),
subtest.expected);
@ -446,26 +446,26 @@ function testIdChanges() {
]
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
if (subtest.createelement) {
addDiv(t, { style: subtest.createelement });
}
var animation = addDivAndAnimate(t, { class: 'compositable' },
subtest.frames, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_all_properties_running_on_compositor(
animation.effect.getProperties(),
subtest.expected);
animation.effect.target.id = subtest.id;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected);
animation.effect.target.id = '';
return waitForFrame();
}).then(function() {
}).then(() => {
assert_all_properties_running_on_compositor(
animation.effect.getProperties(),
subtest.expected);
@ -535,16 +535,16 @@ function testMultipleAnimations() {
],
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { class: 'compositable' });
var animations = subtest.animations.map(function(anim) {
var animations = subtest.animations.map(anim => {
var animation = div.animate(anim.frames, 100 * MS_PER_SEC);
// Bind expected values to animation object.
animation.expected = anim.expected;
return animation;
});
return waitForAllAnimations(animations).then(function() {
return waitForPaints().then(() => {
animations.forEach(anim => {
assert_all_properties_running_on_compositor(
anim.effect.getProperties(),
@ -552,7 +552,7 @@ function testMultipleAnimations() {
});
div.style = subtest.style;
return waitForFrame();
}).then(function() {
}).then(() => {
animations.forEach(anim => {
assert_animation_property_state_equals(
anim.effect.getProperties(),
@ -560,7 +560,7 @@ function testMultipleAnimations() {
});
div.style = '';
return waitForFrame();
}).then(function() {
}).then(() => {
animations.forEach(anim => {
assert_all_properties_running_on_compositor(
anim.effect.getProperties(),
@ -673,23 +673,23 @@ function testMultipleAnimationsWithGeometricKeyframes() {
]
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { class: 'compositable' });
var animations = subtest.animations.map(function(anim) {
var animations = subtest.animations.map(anim => {
var animation = div.animate(anim.frames, 100 * MS_PER_SEC);
// Bind expected values to animation object.
animation.expected = anim.expected;
return animation;
});
return waitForAllAnimations(animations).then(function() {
return waitForPaints().then(() => {
// First, all animations are running on compositor.
animations.forEach(anim => {
assert_animation_property_state_equals(
anim.effect.getProperties(),
anim.expected.withoutGeometric);
});
}).then(function() {
}).then(() => {
// Add a 'width' property to animations[1].
var keyframes = animations[1].effect.getKeyframes();
@ -698,7 +698,7 @@ function testMultipleAnimationsWithGeometricKeyframes() {
animations[1].effect.setKeyframes(keyframes);
return waitForFrame();
}).then(function() {
}).then(() => {
// Now the transform animation is not running on compositor because of
// the 'width' property.
animations.forEach(anim => {
@ -706,7 +706,7 @@ function testMultipleAnimationsWithGeometricKeyframes() {
anim.effect.getProperties(),
anim.expected.withGeometric);
});
}).then(function() {
}).then(() => {
// Remove the 'width' property from animations[1].
var keyframes = animations[1].effect.getKeyframes();
@ -715,7 +715,7 @@ function testMultipleAnimationsWithGeometricKeyframes() {
animations[1].effect.setKeyframes(keyframes);
return waitForFrame();
}).then(function() {
}).then(() => {
// Finally, all animations are running on compositor.
animations.forEach(anim => {
assert_animation_property_state_equals(
@ -793,9 +793,9 @@ function testMultipleAnimationsWithGeometricAnimations() {
],
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { class: 'compositable' });
var animations = subtest.animations.map(function(anim) {
var animations = subtest.animations.map(anim => {
var animation = div.animate(anim.frames, 100 * MS_PER_SEC);
// Bind expected values to animation object.
@ -805,18 +805,18 @@ function testMultipleAnimationsWithGeometricAnimations() {
var widthAnimation;
return waitForAllAnimations(animations).then(function() {
return waitForPaints().then(() => {
animations.forEach(anim => {
assert_all_properties_running_on_compositor(
anim.effect.getProperties(),
anim.expected);
});
}).then(function() {
}).then(() => {
// Append 'width' animation on the same element.
widthAnimation = div.animate({ width: ['100px', '200px'] },
100 * MS_PER_SEC);
return waitForFrame();
}).then(function() {
}).then(() => {
// Now transform animations are not running on compositor because of
// the 'width' animation.
animations.forEach(anim => {
@ -827,7 +827,7 @@ function testMultipleAnimationsWithGeometricAnimations() {
// Remove the 'width' animation.
widthAnimation.cancel();
return waitForFrame();
}).then(function() {
}).then(() => {
// Now all animations are running on compositor.
animations.forEach(anim => {
assert_all_properties_running_on_compositor(
@ -875,10 +875,10 @@ function testSmallElements() {
]
},
].forEach(subtest => {
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, subtest.style);
var animation = div.animate(subtest.frames, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
subtest.expected);
@ -888,7 +888,7 @@ function testSmallElements() {
}
function testSynchronizedAnimations() {
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -898,7 +898,7 @@ function testSynchronizedAnimations() {
const animB = elemB.animate({ marginLeft: [ '0px', '100px' ] },
100 * MS_PER_SEC);
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animA.effect.getProperties(),
@ -910,7 +910,7 @@ function testSynchronizedAnimations() {
}, 'Animations created within the same tick are synchronized'
+ ' (compositor animation created first)');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -920,7 +920,7 @@ function testSynchronizedAnimations() {
'translate(100px)' ] },
100 * MS_PER_SEC);
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animB.effect.getProperties(),
@ -932,7 +932,7 @@ function testSynchronizedAnimations() {
}, 'Animations created within the same tick are synchronized'
+ ' (compositor animation created second)');
promise_test(function(t) {
promise_test(t => {
const attrs = { class: 'compositable',
style: 'transition: all 100s' };
const elemA = addDiv(t, attrs);
@ -980,7 +980,7 @@ function testSynchronizedAnimations() {
});
}, 'Transitions created before and after a tick are synchronized');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -991,7 +991,7 @@ function testSynchronizedAnimations() {
const animB = elemB.animate({ marginLeft: [ '0px', '100px' ] },
100 * MS_PER_SEC);
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animA.effect.getProperties(),
@ -1007,7 +1007,7 @@ function testSynchronizedAnimations() {
+ ' compositor when transform animations are synchronized with geometric'
+ ' animations');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1015,7 +1015,7 @@ function testSynchronizedAnimations() {
100 * MS_PER_SEC);
let animB;
return waitForFrame()
return waitForPaints()
.then(() => {
animB = elemB.animate({ transform: [ 'translate(0px)',
'translate(100px)' ] },
@ -1030,7 +1030,7 @@ function testSynchronizedAnimations() {
}, 'Transform animations are NOT synchronized with geometric animations'
+ ' started in the previous frame');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1039,7 +1039,7 @@ function testSynchronizedAnimations() {
100 * MS_PER_SEC);
let animB;
return waitForFrame()
return waitForPaints()
.then(() => {
animB = elemB.animate({ marginLeft: [ '0px', '100px' ] },
100 * MS_PER_SEC);
@ -1053,7 +1053,7 @@ function testSynchronizedAnimations() {
}, 'Transform animations are NOT synchronized with geometric animations'
+ ' started in the next frame');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1064,7 +1064,7 @@ function testSynchronizedAnimations() {
100 * MS_PER_SEC);
animB.pause();
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animA.effect.getProperties(),
@ -1072,7 +1072,7 @@ function testSynchronizedAnimations() {
});
}, 'Paused animations are not synchronized');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1085,7 +1085,7 @@ function testSynchronizedAnimations() {
// Seek one of the animations so that their start times will differ
animA.currentTime = 5000;
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_not_equals(animA.startTime, animB.startTime,
'Animations should have different start times');
@ -1099,7 +1099,7 @@ function testSynchronizedAnimations() {
}, 'Animations are synchronized based on when they are started'
+ ' and NOT their start time');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1109,7 +1109,7 @@ function testSynchronizedAnimations() {
const animB = elemB.animate({ marginLeft: [ '0px', '100px' ] },
100 * MS_PER_SEC);
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animA.effect.getProperties(),
@ -1127,7 +1127,7 @@ function testSynchronizedAnimations() {
});
}, 'An initially synchronized animation may be unsynchronized if restarted');
promise_test(function(t) {
promise_test(t => {
const elemA = addDiv(t, { class: 'compositable' });
const elemB = addDiv(t, { class: 'compositable' });
@ -1140,7 +1140,7 @@ function testSynchronizedAnimations() {
// Clear target effect
animB.effect.target = null;
return Promise.all([animA.ready, animB.ready])
return waitForPaints()
.then(() => {
assert_animation_property_state_equals(
animA.effect.getProperties(),
@ -1167,19 +1167,19 @@ function start() {
testSmallElements();
testSynchronizedAnimations();
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{ class: 'compositable' },
{ transform: [ 'translate(0px)',
'translate(100px)'] },
100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[ { property: 'transform', runningOnCompositor: true } ]);
animation.effect.target.style = 'width: 5200px; height: 5200px';
return waitForFrame();
}).then(function() {
}).then(() => {
// viewport depends on test environment.
var expectedWarning = new RegExp(
"Animation cannot be run on the compositor because the area of the frame " +
@ -1194,7 +1194,7 @@ function start() {
} ]);
animation.effect.target.style = 'width: 100px; height: 100px';
return waitForFrame();
}).then(function() {
}).then(() => {
// FIXME: Bug 1253164: the animation should get back on compositor.
assert_animation_property_state_equals(
animation.effect.getProperties(),
@ -1202,19 +1202,19 @@ function start() {
});
}, 'transform on too big element - area');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{ class: 'compositable' },
{ transform: [ 'translate(0px)',
'translate(100px)'] },
100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[ { property: 'transform', runningOnCompositor: true } ]);
animation.effect.target.style = 'width: 5200px; height: 1px';
return waitForFrame();
}).then(function() {
}).then(() => {
// viewport depends on test environment.
var expectedWarning = new RegExp(
"Animation cannot be run on the compositor because the frame size " +
@ -1230,7 +1230,7 @@ function start() {
} ]);
animation.effect.target.style = 'width: 100px; height: 100px';
return waitForFrame();
}).then(function() {
}).then(() => {
// FIXME: Bug 1253164: the animation should get back on compositor.
assert_animation_property_state_equals(
animation.effect.getProperties(),
@ -1238,7 +1238,7 @@ function start() {
});
}, 'transform on too big element - dimensions');
promise_test(function(t) {
promise_test(t => {
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '100');
svg.setAttribute('height', '100');
@ -1248,19 +1248,19 @@ function start() {
rect.setAttribute('fill', 'red');
svg.appendChild(rect);
document.body.appendChild(svg);
t.add_cleanup(function() {
t.add_cleanup(() => {
svg.remove();
});
var animation = svg.animate(
{ transform: ['translate(0px)', 'translate(100px)'] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[ { property: 'transform', runningOnCompositor: true } ]);
svg.setAttribute('transform', 'translate(10, 20)');
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[ {
@ -1270,19 +1270,19 @@ function start() {
} ]);
svg.removeAttribute('transform');
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_property_state_equals(
animation.effect.getProperties(),
[ { property: 'transform', runningOnCompositor: true } ]);
});
}, 'transform of nsIFrame with SVG transform');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { class: 'compositable',
style: 'animation: fade 100s' });
var cssAnimation = div.getAnimations()[0];
var scriptAnimation = div.animate({ opacity: [ 1, 0 ] }, 100 * MS_PER_SEC);
return scriptAnimation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_property_state_equals(
cssAnimation.effect.getProperties(),
[ { property: 'opacity', runningOnCompositor: true } ]);

Просмотреть файл

@ -62,13 +62,13 @@ function assert_animation_is_not_running_on_compositor(animation, desc) {
desc + ' at ' + animation.currentTime + 'ms');
}
promise_test(function(t) {
promise_test(t => {
// FIXME: When we implement Element.animate, use that here instead of CSS
// so that we remove any dependency on the CSS mapping.
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' during playback');
@ -76,29 +76,29 @@ promise_test(function(t) {
div.style.animationPlayState = 'paused';
return animation.ready;
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' when paused');
});
}, '');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: background 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' for animation of "background"');
});
}, 'isRunningOnCompositor is false for animation of "background"');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: background_and_translate 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' when the animation has two properties, where one can run'
@ -107,50 +107,50 @@ promise_test(function(t) {
}, 'isRunningOnCompositor is true if the animation has at least one ' +
'property can run on compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
animation.pause();
return animation.ready;
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' when animation.pause() is called');
});
}, 'isRunningOnCompositor is false when the animation.pause() is called');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
animation.finish();
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' immediately after animation.finish() is called');
// Check that we don't set the flag back again on the next tick.
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' on the next tick after animation.finish() is called');
});
}, 'isRunningOnCompositor is false when the animation.finish() is called');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
animation.currentTime = 100 * MS_PER_SEC;
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' immediately after manually seeking the animation to the end');
// Check that we don't set the flag back again on the next tick.
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' on the next tick after manually seeking the animation to the end');
@ -158,18 +158,18 @@ promise_test(function(t) {
}, 'isRunningOnCompositor is false when manually seeking the animation to ' +
'the end');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
animation.cancel();
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' immediately after animation.cancel() is called');
// Check that we don't set the flag back again on the next tick.
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' on the next tick after animation.cancel() is called');
@ -178,14 +178,14 @@ promise_test(function(t) {
// This is to test that we don't simply clobber the flag when ticking
// animations and then set it again during painting.
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return new Promise(function(resolve) {
window.requestAnimationFrame(function() {
t.step(function() {
return waitForPaints().then(() => {
return new Promise(resolve => {
window.requestAnimationFrame(() => {
t.step(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' in requestAnimationFrame callback');
@ -197,23 +197,23 @@ promise_test(function(t) {
});
}, 'isRunningOnCompositor is true in requestAnimationFrame callback');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: anim 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return new Promise(function(resolve) {
var observer = new MutationObserver(function(records) {
return waitForPaints().then(() => {
return new Promise(resolve => {
var observer = new MutationObserver(records => {
var changedAnimation;
records.forEach(function(record) {
records.forEach(record => {
changedAnimation =
record.changedAnimations.find(function(changedAnim) {
record.changedAnimations.find(changedAnim => {
return changedAnim == animation;
});
});
t.step(function() {
t.step(() => {
assert_true(!!changedAnimation, 'The animation should be recorded '
+ 'as one of the changedAnimations');
@ -225,7 +225,7 @@ promise_test(function(t) {
resolve();
});
observer.observe(div, { animations: true, subtree: false });
t.add_cleanup(function() {
t.add_cleanup(() => {
observer.disconnect();
});
div.style.animationDuration = "200s";
@ -235,18 +235,18 @@ promise_test(function(t) {
// This is to test that we don't temporarily clear the flag when forcing
// an unthrottled sample.
promise_test(function(t) {
promise_test(t => {
// Needs scrollbars to cause overflow.
return SpecialPowers.pushPrefEnv({ set: [["ui.showHideScrollbars", 1]] })
.then(function() {
.then(() => {
var div = addDiv(t, { style: 'animation: rotate 100s' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return new Promise(function(resolve) {
return waitForPaints().then(() => {
return new Promise(resolve => {
var timeAtStart = window.performance.now();
function handleFrame() {
t.step(function() {
t.step(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' in requestAnimationFrame callback');
@ -268,7 +268,7 @@ promise_test(function(t) {
}, 'isRunningOnCompositor remains true in requestAnimationFrameCallback for ' +
'overflow animation');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'transition: opacity 100s; opacity: 1' });
getComputedStyle(div).opacity;
@ -276,20 +276,20 @@ promise_test(function(t) {
div.style.opacity = 0;
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Transition reports that it is running on the compositor'
+ ' during playback for opacity transition');
});
}, 'isRunningOnCompositor for transitions');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'animation: rotate-and-opacity 100s; ' +
'backface-visibility: hidden; ' +
'transform: none !important;' });
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'If an animation has a property that can run on the compositor and a '
+ 'property that cannot (due to Gecko limitations) but where the latter'
@ -299,12 +299,12 @@ promise_test(function(t) {
}, 'isRunningOnCompositor is true when a property that would otherwise block ' +
'running on the compositor is overridden in the CSS cascade');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{},
{ opacity: [ 0, 1 ] }, 200 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
@ -318,12 +318,12 @@ promise_test(function(t) {
}, 'animation is immediately removed from compositor' +
'when timing.duration is made shorter than the current time');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{},
{ opacity: [ 0, 1 ] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
@ -335,7 +335,7 @@ promise_test(function(t) {
animation.effect.timing.duration = 1000 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' when restarted');
@ -343,12 +343,12 @@ promise_test(function(t) {
}, 'animation is added to compositor' +
' when timing.duration is made longer than the current time');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{},
{ opacity: [ 0, 1 ] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
@ -360,7 +360,7 @@ promise_test(function(t) {
animation.currentTime = 110 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' when currentTime is during endDelay');
@ -368,18 +368,18 @@ promise_test(function(t) {
}, 'animation is removed from compositor' +
' when current time is made longer than the duration even during endDelay');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{},
{ opacity: [ 0, 1 ] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
animation.effect.timing.endDelay = -200 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' when endTime is negative value');
@ -387,24 +387,24 @@ promise_test(function(t) {
}, 'animation is removed from compositor' +
' when endTime is negative value');
promise_test(function(t) {
promise_test(t => {
var animation = addDivAndAnimate(t,
{},
{ opacity: [ 0, 1 ] }, 200 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
animation.effect.timing.endDelay = -100 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor'
+ ' when endTime is positive and endDelay is negative');
animation.currentTime = 110 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation reports that it is NOT running on the compositor'
+ ' when currentTime is after endTime');
@ -412,7 +412,7 @@ promise_test(function(t) {
}, 'animation is NOT running on compositor' +
' when endTime is positive and endDelay is negative');
promise_test(function(t) {
promise_test(t => {
var effect = new KeyframeEffect(null,
{ opacity: [ 0, 1 ] },
100 * MS_PER_SEC);
@ -421,25 +421,25 @@ promise_test(function(t) {
var div = addDiv(t);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation with null target reports that it is not running ' +
'on the compositor');
animation.effect.target = div;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor ' +
'after setting a valid target');
});
}, 'animation is added to the compositor when setting a valid target');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var animation = div.animate({ opacity: [ 0, 1 ] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation reports that it is running on the compositor');
@ -450,21 +450,21 @@ promise_test(function(t) {
});
}, 'animation is removed from the compositor when setting null target');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var animation = div.animate({ opacity: [ 0, 1 ] },
{ duration: 100 * MS_PER_SEC,
delay: 100 * MS_PER_SEC,
fill: 'backwards' });
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation with fill:backwards in delay phase reports ' +
'that it is running on the compositor');
animation.currentTime = 100 * MS_PER_SEC;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Animation with fill:backwards in delay phase reports ' +
'that it is running on the compositor after delay phase');
@ -472,7 +472,7 @@ promise_test(function(t) {
}, 'animation with fill:backwards in delay phase is running on the ' +
' main-thread while it is in delay phase');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var animation = div.animate([{ opacity: 1, offset: 0 },
{ opacity: 1, offset: 0.99 },
@ -480,14 +480,14 @@ promise_test(function(t) {
var another = addDiv(t);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animation on a 100% opacity keyframe reports ' +
'that it is running on the compositor from the begining');
animation.effect.target = another;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animation on a 100% opacity keyframe keeps ' +
'running on the compositor after changing the target ' +
@ -496,11 +496,11 @@ promise_test(function(t) {
}, '100% opacity animations with keeps running on the ' +
'compositor after changing the target element');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var animation = div.animate({ color: ['red', 'black'] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Color animation reports that it is not running on the ' +
'compositor');
@ -509,7 +509,7 @@ promise_test(function(t) {
{ opacity: 1, offset: 0.99 },
{ opacity: 0, offset: 1 }]);
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'100% opacity animation set by using setKeyframes reports ' +
'that it is running on the compositor');
@ -517,7 +517,7 @@ promise_test(function(t) {
}, '100% opacity animation set up by converting an existing animation with ' +
'cannot be run on the compositor, is running on the compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var animation = div.animate({ color: ['red', 'black'] }, 100 * MS_PER_SEC);
var effect = new KeyframeEffect(div,
@ -526,14 +526,14 @@ promise_test(function(t) {
{ opacity: 0, offset: 1 }],
100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Color animation reports that it is not running on the ' +
'compositor');
animation.effect = effect;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'100% opacity animation set up by changing effects reports ' +
'that it is running on the compositor');
@ -542,19 +542,19 @@ promise_test(function(t) {
'animation which cannot be run on the compositor, is running on the ' +
'compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: "opacity: 1 ! important" });
var animation = div.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Opacity animation on an element which has 100% opacity style with ' +
'!important flag reports that it is not running on the compositor');
// Clear important flag from the opacity style on the target element.
div.style.setProperty("opacity", "1", "");
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animation reports that it is running on the compositor after '
+ 'clearing the !important flag');
@ -562,12 +562,12 @@ promise_test(function(t) {
}, 'Clearing *important* opacity style on the target element sends the ' +
'animation to the compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var lowerAnimation = div.animate({ opacity: [1, 0] }, 100 * MS_PER_SEC);
var higherAnimation = div.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
return Promise.all([lowerAnimation.ready, higherAnimation.ready]).then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(higherAnimation,
'A higher-priority opacity animation on an element ' +
'reports that it is running on the compositor');
@ -577,7 +577,7 @@ promise_test(function(t) {
});
}, 'Opacity animations on the same element run on the compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'transition: opacity 100s; opacity: 1' });
getComputedStyle(div).opacity;
@ -588,7 +588,7 @@ promise_test(function(t) {
var transition = div.getAnimations()[0];
var animation = div.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
return Promise.all([transition.ready, animation.ready]).then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'An opacity animation on an element reports that' +
'that it is running on the compositor');
@ -599,26 +599,26 @@ promise_test(function(t) {
}, 'Both of transition and script animation on the same element run on the ' +
'compositor');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var importantOpacityElement = addDiv(t, { style: "opacity: 1 ! important" });
var animation = div.animate({ opacity: [1, 0] }, 100 * MS_PER_SEC);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animation on an element reports ' +
'that it is running on the compositor');
animation.effect.target = null;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation is no longer running on the compositor after ' +
'removing from the element');
animation.effect.target = importantOpacityElement;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Animation is NOT running on the compositor even after ' +
'being applied to a different element which has an ' +
@ -628,14 +628,14 @@ promise_test(function(t) {
'applied to an element which has an important declaration and ' +
'having previously been temporarily associated with no target element');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var another = addDiv(t);
var lowerAnimation = div.animate({ opacity: [1, 0] }, 100 * MS_PER_SEC);
var higherAnimation = another.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
return Promise.all([lowerAnimation.ready, higherAnimation.ready]).then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(lowerAnimation,
'An opacity animation on an element reports that ' +
'it is running on the compositor');
@ -645,13 +645,13 @@ promise_test(function(t) {
lowerAnimation.effect.target = null;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(lowerAnimation,
'Animation is no longer running on the compositor after ' +
'being removed from the element');
lowerAnimation.effect.target = another;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(lowerAnimation,
'A lower-priority animation begins running ' +
'on the compositor after being applied to an element ' +
@ -665,14 +665,14 @@ promise_test(function(t) {
'to an element which has a higher-priority animation and after ' +
'being temporarily associated with no target element');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t);
var another = addDiv(t);
var lowerAnimation = div.animate({ opacity: [1, 0] }, 100 * MS_PER_SEC);
var higherAnimation = another.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
return Promise.all([lowerAnimation.ready, higherAnimation.ready]).then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(lowerAnimation,
'An opacity animation on an element reports that ' +
'it is running on the compositor');
@ -682,13 +682,13 @@ promise_test(function(t) {
higherAnimation.effect.target = null;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_not_running_on_compositor(higherAnimation,
'Animation is no longer running on the compositor after ' +
'being removed from the element');
higherAnimation.effect.target = div;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(lowerAnimation,
'Animation continues running on the compositor after ' +
'a higher-priority animation applied to the same element');
@ -704,7 +704,7 @@ promise_test(function(t) {
var delayPhaseTests = [
{
desc: 'script animation of opacity',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t).animate(
{ opacity: [0, 1] },
{ delay: 100 * MS_PER_SEC, duration: 100 * MS_PER_SEC });
@ -712,7 +712,7 @@ var delayPhaseTests = [
},
{
desc: 'script animation of transform',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t).animate(
{ transform: ['translateX(0px)', 'translateX(100px)'] },
{ delay: 100 * MS_PER_SEC, duration: 100 * MS_PER_SEC });
@ -720,21 +720,21 @@ var delayPhaseTests = [
},
{
desc: 'CSS animation of opacity',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t, { style: 'animation: opacity 100s 100s' })
.getAnimations()[0];
},
},
{
desc: 'CSS animation of transform',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t, { style: 'animation: anim 100s 100s' })
.getAnimations()[0];
},
},
{
desc: 'CSS transition of opacity',
setupAnimation: function(t) {
setupAnimation: t => {
var div = addDiv(t, { style: 'transition: opacity 100s 100s' });
getComputedStyle(div).opacity;
@ -744,7 +744,7 @@ var delayPhaseTests = [
},
{
desc: 'CSS transition of transform',
setupAnimation: function(t) {
setupAnimation: t => {
var div = addDiv(t, { style: 'transition: transform 100s 100s' });
getComputedStyle(div).transform;
@ -754,11 +754,11 @@ var delayPhaseTests = [
},
];
delayPhaseTests.forEach(function(test) {
promise_test(function(t) {
delayPhaseTests.forEach(test => {
promise_test(t => {
var animation = test.setupAnimation(t);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
test.desc + ' reports that it is running on the '
+ 'compositor even though it is in the delay phase');
@ -773,7 +773,7 @@ delayPhaseTests.forEach(function(test) {
var delayPhaseWithTransformStyleTests = [
{
desc: 'script animation of transform with transform style',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t, { style: 'transform: translateX(10px)' }).animate(
{ transform: ['translateX(0px)', 'translateX(100px)'] },
{ delay: 100 * MS_PER_SEC, duration: 100 * MS_PER_SEC });
@ -781,7 +781,7 @@ var delayPhaseWithTransformStyleTests = [
},
{
desc: 'CSS animation of transform with transform style',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t, { style: 'animation: anim 100s 100s;' +
'transform: translateX(10px)' })
.getAnimations()[0];
@ -789,7 +789,7 @@ var delayPhaseWithTransformStyleTests = [
},
{
desc: 'CSS transition of transform with transform style',
setupAnimation: function(t) {
setupAnimation: t => {
var div = addDiv(t, { style: 'transition: transform 100s 100s;' +
'transform: translateX(10px)'});
getComputedStyle(div).transform;
@ -800,19 +800,19 @@ var delayPhaseWithTransformStyleTests = [
},
];
delayPhaseWithTransformStyleTests.forEach(function(test) {
promise_test(function(t) {
delayPhaseWithTransformStyleTests.forEach(test => {
promise_test(t => {
var animation = test.setupAnimation(t);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
test.desc + ' reports that it is running on the '
+ 'compositor even though it is in the delay phase');
}).then(function() {
}).then(() => {
// Remove the initial transform style during delay phase.
animation.effect.target.style.transform = 'none';
return animation.ready;
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
test.desc + ' reports that it keeps running on the '
+ 'compositor after removing the initial transform style');
@ -824,14 +824,14 @@ delayPhaseWithTransformStyleTests.forEach(function(test) {
var startsWithNoneTests = [
{
desc: 'script animation of transform starts with transform:none segment',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t).animate(
{ transform: ['none', 'none', 'translateX(100px)'] }, 100 * MS_PER_SEC);
},
},
{
desc: 'CSS animation of transform starts with transform:none segment',
setupAnimation: function(t) {
setupAnimation: t => {
return addDiv(t,
{ style: 'animation: transform-starts-with-none 100s 100s' })
.getAnimations()[0];
@ -839,11 +839,11 @@ var startsWithNoneTests = [
},
];
startsWithNoneTests.forEach(function(test) {
promise_test(function(t) {
startsWithNoneTests.forEach(test => {
promise_test(t => {
var animation = test.setupAnimation(t);
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
test.desc + ' reports that it is running on the '
+ 'compositor even though it is in transform:none segment');
@ -852,21 +852,21 @@ startsWithNoneTests.forEach(function(test) {
'it is in transform:none segment');
});
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'opacity: 1 ! important' });
var animation = div.animate(
{ opacity: [0, 1] },
{ delay: 100 * MS_PER_SEC, duration: 100 * MS_PER_SEC });
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Opacity animation on an element which has opacity:1 important style'
+ 'reports that it is not running on the compositor');
// Clear the opacity style on the target element.
div.style.setProperty("opacity", "1", "");
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animations reports that it is running on the compositor after '
+ 'clearing the opacity style on the element');
@ -874,7 +874,7 @@ promise_test(function(t) {
}, 'Clearing *important* opacity style on the target element sends the ' +
'animation to the compositor even if the animation is in the delay phase');
promise_test(function(t) {
promise_test(t => {
var opaqueDiv = addDiv(t, { style: 'opacity: 1 ! important' });
var anotherDiv = addDiv(t);
@ -882,14 +882,14 @@ promise_test(function(t) {
{ opacity: [0, 1] },
{ delay: 100 * MS_PER_SEC, duration: 100 * MS_PER_SEC });
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Opacity animation on an element which has opacity:1 important style'
+ 'reports that it is not running on the compositor');
// Changing target element to another element which has no opacity style.
animation.effect.target = anotherDiv;
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animations reports that it is running on the compositor after '
+ 'changing the target element to another elemenent having no '
@ -898,21 +898,21 @@ promise_test(function(t) {
}, 'Changing target element of opacity animation sends the animation to the ' +
'the compositor even if the animation is in the delay phase');
promise_test(function(t) {
promise_test(t => {
var animation =
addDivAndAnimate(t,
{},
{ width: ['100px', '200px'] },
{ duration: 100 * MS_PER_SEC, delay: 100 * MS_PER_SEC });
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(animation,
'Width animation reports that it is not running on the compositor '
+ 'in the delay phase');
// Changing to property runnable on the compositor.
animation.effect.setKeyframes({ opacity: [0, 1] });
return waitForFrame();
}).then(function() {
}).then(() => {
assert_animation_is_running_on_compositor(animation,
'Opacity animation reports that it is running on the compositor '
+ 'after changing the property from width property in the delay phase');
@ -920,7 +920,7 @@ promise_test(function(t) {
}, 'Dynamic change to a property runnable on the compositor ' +
'in the delay phase');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'transition: opacity 100s; ' +
'opacity: 0 !important' });
getComputedStyle(div).opacity;
@ -930,14 +930,14 @@ promise_test(function(t) {
var animation = div.getAnimations()[0];
return animation.ready.then(function() {
return waitForPaints().then(() => {
assert_animation_is_running_on_compositor(animation,
'Transition reports that it is running on the compositor even if the ' +
'property is overridden by an !important rule');
});
}, 'Transitions override important rules');
promise_test(function(t) {
promise_test(t => {
var div = addDiv(t, { style: 'transition: opacity 100s; ' +
'opacity: 0 !important' });
getComputedStyle(div).opacity;
@ -949,7 +949,7 @@ promise_test(function(t) {
var [transition, animation] = div.getAnimations();
return Promise.all([transition.ready, animation.ready]).then(function() {
return waitForPaints().then(() => {
assert_animation_is_not_running_on_compositor(transition,
'Transition suppressed by an animation which is overridden by an ' +
'!important rule reports that it is NOT running on the compositor');

Просмотреть файл

@ -38,9 +38,6 @@ events (${expectedEvents.map(event => event.type).join(', ')})`);
function setupAnimation(t, animationStyle, receiveEvents) {
const div = addDiv(t, { style: "animation: " + animationStyle });
const watcher = new EventWatcher(t, div, [ 'animationstart',
'animationiteration',
'animationend' ]);
['start', 'iteration', 'end'].forEach(name => {
div['onanimation' + name] = evt => {
@ -50,12 +47,16 @@ function setupAnimation(t, animationStyle, receiveEvents) {
};
});
const watcher = new EventWatcher(t, div, [ 'animationstart',
'animationiteration',
'animationend' ]);
const animation = div.getAnimations()[0];
return [animation, watcher, div];
}
promise_test(function(t) {
promise_test(t => {
let events = [];
const [animation1, watcher1, div1] =
setupAnimation(t, 'anim 100s 2 paused', events);
@ -63,7 +64,7 @@ promise_test(function(t) {
setupAnimation(t, 'anim 100s 2 paused', events);
return Promise.all([ watcher1.wait_for('animationstart'),
watcher2.wait_for('animationstart') ]).then(function() {
watcher2.wait_for('animationstart') ]).then(() => {
checkEvents(events, ['animationstart', div1, 0],
['animationstart', div2, 0]);
@ -73,7 +74,7 @@ promise_test(function(t) {
animation2.currentTime = 100 * MS_PER_SEC;
return Promise.all([ watcher1.wait_for('animationiteration'),
watcher2.wait_for('animationiteration') ]);
}).then(function() {
}).then(() => {
checkEvents(events, ['animationiteration', div1, 100],
['animationiteration', div2, 100]);
@ -84,20 +85,20 @@ promise_test(function(t) {
return Promise.all([ watcher1.wait_for('animationend'),
watcher2.wait_for('animationend') ]);
}).then(function() {
}).then(() => {
checkEvents(events, ['animationend', div1, 200],
['animationend', div2, 200]);
});
}, 'Test same events are ordered by elements.');
promise_test(function(t) {
promise_test(t => {
let events = [];
const [animation1, watcher1, div1] =
setupAnimation(t, 'anim 200s 400s', events);
const [animation2, watcher2, div2] =
setupAnimation(t, 'anim 300s 2', events);
return watcher2.wait_for('animationstart').then(function(evt) {
return watcher2.wait_for('animationstart').then(evt => {
animation1.currentTime = 400 * MS_PER_SEC;
animation2.currentTime = 400 * MS_PER_SEC;
@ -105,13 +106,13 @@ promise_test(function(t) {
return Promise.all([ watcher1.wait_for('animationstart'),
watcher2.wait_for('animationiteration') ]);
}).then(function() {
}).then(() => {
checkEvents(events, ['animationiteration', div2, 300],
['animationstart', div1, 0]);
});
}, 'Test start and iteration events are ordered by time.');
promise_test(function(t) {
promise_test(t => {
let events = [];
const [animation1, watcher1, div1] =
setupAnimation(t, 'anim 150s', events);
@ -119,7 +120,7 @@ promise_test(function(t) {
setupAnimation(t, 'anim 100s 2', events);
return Promise.all([ watcher1.wait_for('animationstart'),
watcher2.wait_for('animationstart') ]).then(function() {
watcher2.wait_for('animationstart') ]).then(() => {
animation1.currentTime = 150 * MS_PER_SEC;
animation2.currentTime = 150 * MS_PER_SEC;
@ -127,13 +128,13 @@ promise_test(function(t) {
return Promise.all([ watcher1.wait_for('animationend'),
watcher2.wait_for('animationiteration') ]);
}).then(function() {
}).then(() => {
checkEvents(events, ['animationiteration', div2, 100],
['animationend', div1, 150]);
});
}, 'Test iteration and end events are ordered by time.');
promise_test(function(t) {
promise_test(t => {
let events = [];
const [animation1, watcher1, div1] =
setupAnimation(t, 'anim 100s 100s', events);
@ -146,7 +147,7 @@ promise_test(function(t) {
return Promise.all([ watcher1.wait_for([ 'animationstart',
'animationend' ]),
watcher2.wait_for([ 'animationstart',
'animationend' ]) ]).then(function() {
'animationend' ]) ]).then(() => {
checkEvents(events, ['animationstart', div2, 0],
['animationstart', div1, 0],
['animationend', div1, 100],

Просмотреть файл

@ -367,3 +367,13 @@ function getDistance(target, prop, v1, v2) {
return SpecialPowers.DOMWindowUtils
.computeAnimationDistance(target, prop, v1, v2);
}
/*
* A promise wrapper for waiting MozAfterPaint.
*/
function waitForPaints() {
// FIXME: Bug 1415065. Instead waiting for two requestAnimationFrames, we
// should wait for MozAfterPaint once after MozAfterPaint is fired properly
// (bug 1341294).
return waitForAnimationFrames(2);
}

Просмотреть файл

@ -11,6 +11,8 @@
#include "nsIContent.h"
#include "mozilla/Maybe.h"
class nsRange;
namespace mozilla {
// This class will maintain a reference to the child immediately
@ -43,6 +45,10 @@ class RangeBoundaryBase
template<typename T, typename U>
friend class RangeBoundaryBase;
// nsRange needs to use InvalidOffset() which requires mRef initialized
// before it's called.
friend class ::nsRange;
friend void ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback&,
RangeBoundary&, const char*,
uint32_t);
@ -67,22 +73,28 @@ public:
, mRef(nullptr)
, mOffset(mozilla::Some(aOffset))
{
if (mParent && mParent->IsContainerNode()) {
// Find a reference node
if (aOffset == static_cast<int32_t>(aContainer->GetChildCount())) {
mRef = aContainer->GetLastChild();
} else if (aOffset != 0) {
mRef = mParent->GetChildAt(aOffset - 1);
}
NS_WARNING_ASSERTION(mRef || aOffset == 0,
"Constructing RangeBoundary with invalid value");
if (!mParent) {
mOffset.reset();
}
NS_WARNING_ASSERTION(!mRef || mRef->GetParentNode() == mParent,
"Constructing RangeBoundary with invalid value");
}
protected:
RangeBoundaryBase(nsINode* aContainer, nsIContent* aRef, int32_t aOffset)
: mParent(aContainer)
, mRef(aRef)
, mOffset(mozilla::Some(aOffset))
{
MOZ_RELEASE_ASSERT(aContainer,
"This constructor shouldn't be used when pointing nowhere");
if (!mRef) {
MOZ_ASSERT(mOffset.value() == 0);
return;
}
MOZ_ASSERT(mOffset.value() > 0);
MOZ_ASSERT(mParent->GetChildAt(mOffset.value() - 1) == mRef);
}
public:
RangeBoundaryBase()
: mParent(nullptr)
, mRef(nullptr)
@ -101,6 +113,7 @@ public:
nsIContent*
Ref() const
{
EnsureRef();
return mRef;
}
@ -116,6 +129,7 @@ public:
if (!mParent || !mParent->IsContainerNode()) {
return nullptr;
}
EnsureRef();
if (!mRef) {
MOZ_ASSERT(Offset() == 0, "invalid RangeBoundary");
return mParent->GetFirstChild();
@ -124,63 +138,161 @@ public:
return mRef->GetNextSibling();
}
/**
* GetNextSiblingOfChildOffset() returns next sibling of a child at offset.
* If this refers after the last child or the container cannot have children,
* this returns nullptr with warning.
*/
nsIContent*
GetNextSiblingOfChildAtOffset() const
{
if (NS_WARN_IF(!mParent) || NS_WARN_IF(!mParent->IsContainerNode())) {
return nullptr;
}
EnsureRef();
if (NS_WARN_IF(!mRef->GetNextSibling())) {
// Already referring the end of the container.
return nullptr;
}
return mRef->GetNextSibling()->GetNextSibling();
}
/**
* GetPreviousSiblingOfChildAtOffset() returns previous sibling of a child
* at offset. If this refers the first child or the container cannot have
* children, this returns nullptr with warning.
*/
nsIContent*
GetPreviousSiblingOfChildAtOffset() const
{
if (NS_WARN_IF(!mParent) || NS_WARN_IF(!mParent->IsContainerNode())) {
return nullptr;
}
EnsureRef();
if (NS_WARN_IF(!mRef)) {
// Already referring the start of the container.
return nullptr;
}
return mRef;
}
uint32_t
Offset() const
{
if (mOffset.isSome()) {
return mOffset.value();
}
if (!mParent) {
MOZ_ASSERT(!mRef);
return 0;
}
MOZ_ASSERT(mParent->IsContainerNode(),
"If the container cannot have children, mOffset.isSome() should be true");
MOZ_ASSERT(mRef);
MOZ_ASSERT(mRef->GetParentNode() == mParent);
mOffset = mozilla::Some(mParent->IndexOf(mRef) + 1);
return mOffset.value();
}
void
InvalidateOffset()
{
MOZ_ASSERT(mParent);
MOZ_ASSERT(mParent->IsContainerNode(), "Range is positioned on a text node!");
if (!mRef) {
MOZ_ASSERT(mOffset.isSome() && mOffset.value() == 0,
"Invalidating offset of invalid RangeBoundary?");
return;
if (!mRef->GetPreviousSibling()) {
mOffset = mozilla::Some(1);
return mOffset.value();
}
mOffset.reset();
if (!mRef->GetNextSibling()) {
mOffset = mozilla::Some(mParent->GetChildCount());
return mOffset.value();
}
// Use nsINode::IndexOf() as the last resort due to being expensive.
mOffset = mozilla::Some(mParent->IndexOf(mRef) + 1);
return mOffset.value();
}
void
Set(nsINode* aContainer, int32_t aOffset)
{
mParent = aContainer;
if (mParent && mParent->IsContainerNode()) {
// Find a reference node
if (aOffset == static_cast<int32_t>(aContainer->GetChildCount())) {
mRef = aContainer->GetLastChild();
} else if (aOffset == 0) {
mRef = nullptr;
} else {
mRef = mParent->GetChildAt(aOffset - 1);
MOZ_ASSERT(mRef);
}
mRef = nullptr;
mOffset = mozilla::Some(aOffset);
}
NS_WARNING_ASSERTION(mRef || aOffset == 0,
"Setting RangeBoundary to invalid value");
} else {
mRef = nullptr;
/**
* AdvanceOffset() tries to reference next sibling of mRef if its container
* can have children or increments offset if the container is a text node or
* something.
* If the container can have children and there is no next sibling, this
* outputs warning and does nothing. So, callers need to check if there is
* next sibling which you need to refer.
*/
void
AdvanceOffset()
{
if (NS_WARN_IF(!mParent)) {
return;
}
EnsureRef();
if (!mRef) {
if (!mParent->IsContainerNode()) {
// In text node or something, just increment the offset.
MOZ_ASSERT(mOffset.isSome());
if (NS_WARN_IF(mOffset.value() == mParent->Length())) {
// Already referring the end of the node.
return;
}
mOffset = mozilla::Some(mOffset.value() + 1);
return;
}
mRef = mParent->GetFirstChild();
if (NS_WARN_IF(!mRef)) {
// No children in the container.
mOffset = mozilla::Some(0);
} else {
mOffset = mozilla::Some(1);
}
return;
}
mOffset = mozilla::Some(aOffset);
nsIContent* nextSibling = mRef->GetNextSibling();
if (NS_WARN_IF(!nextSibling)) {
// Already referring the end of the container.
return;
}
mRef = nextSibling;
if (mOffset.isSome()) {
mOffset = mozilla::Some(mOffset.value() + 1);
}
}
NS_WARNING_ASSERTION(!mRef || mRef->GetParentNode() == mParent,
"Setting RangeBoundary to invalid value");
/**
* RewindOffset() tries to reference next sibling of mRef if its container
* can have children or decrements offset if the container is a text node or
* something.
* If the container can have children and there is no next previous, this
* outputs warning and does nothing. So, callers need to check if there is
* previous sibling which you need to refer.
*/
void
RewindOffset()
{
if (NS_WARN_IF(!mParent)) {
return;
}
EnsureRef();
if (!mRef) {
if (NS_WARN_IF(mParent->IsContainerNode())) {
// Already referring the start of the container
mOffset = mozilla::Some(0);
return;
}
// In text node or something, just decrement the offset.
MOZ_ASSERT(mOffset.isSome());
if (NS_WARN_IF(mOffset.value() == 0)) {
// Already referring the start of the node.
return;
}
mOffset = mozilla::Some(mOffset.value() - 1);
return;
}
mRef = mRef->GetPreviousSibling();
if (mOffset.isSome()) {
mOffset = mozilla::Some(mOffset.value() - 1);
}
}
void
@ -208,10 +320,13 @@ public:
return false;
}
if (Ref()) {
return Ref()->GetParentNode() == Container();
if (mRef && mRef->GetParentNode() != mParent) {
return false;
}
return Offset() <= Container()->Length();
if (mOffset.isSome() && mOffset.value() > mParent->Length()) {
return false;
}
return true;
}
bool
@ -265,9 +380,50 @@ public:
return !(*this == aOther);
}
protected:
/**
* InvalidOffset() is error prone method, unfortunately. If somebody
* needs to call this method, it needs to call EnsureRef() before changing
* the position of the referencing point.
*/
void
InvalidateOffset()
{
MOZ_ASSERT(mParent);
MOZ_ASSERT(mParent->IsContainerNode(),
"Range is positioned on a text node!");
MOZ_ASSERT(mRef || (mOffset.isSome() && mOffset.value() == 0),
"mRef should be computed before a call of InvalidateOffset()");
if (!mRef) {
return;
}
mOffset.reset();
}
void
EnsureRef() const
{
if (mRef) {
return;
}
if (!mParent) {
MOZ_ASSERT(!mOffset.isSome());
return;
}
MOZ_ASSERT(mOffset.isSome());
MOZ_ASSERT(mOffset.value() <= mParent->Length());
if (!mParent->IsContainerNode() ||
mOffset.value() == 0) {
return;
}
mRef = mParent->GetChildAt(mOffset.value() - 1);
MOZ_ASSERT(mRef);
}
private:
ParentType mParent;
RefType mRef;
mutable RefType mRef;
mutable mozilla::Maybe<uint32_t> mOffset;
};

Просмотреть файл

@ -10641,13 +10641,21 @@ void nsGlobalWindow::SetIsBackground(bool aIsBackground)
if (aIsBackground) {
// Notify gamepadManager we are at the background window,
// we need to stop vibrate.
if (inner) {
// Stop the vr telemery time spent when it switches to
// the background window.
if (inner && changed) {
inner->StopGamepadHaptics();
// true is for asking to set the delta time to
// the telemetry.
inner->ResetVRTelemetry(true);
}
return;
}
if (inner) {
// When switching to be as a top tab, restart the telemetry.
// false is for only resetting the timestamp.
inner->ResetVRTelemetry(false);
inner->SyncGamepadState();
}
}
@ -10723,6 +10731,14 @@ nsGlobalWindow::DisableVRUpdates()
}
}
void
nsGlobalWindow::ResetVRTelemetry(bool aUpdate)
{
if (mVREventObserver) {
mVREventObserver->UpdateSpentTimeIn2DTelemetry(aUpdate);
}
}
void
nsGlobalWindow::SetChromeEventHandler(EventTarget* aChromeEventHandler)
{

Просмотреть файл

@ -773,6 +773,10 @@ public:
// Enable/disable updates for VR
void EnableVRUpdates();
void DisableVRUpdates();
// Reset telemetry data when switching windows.
// aUpdate, true for accumulating the result to the histogram.
// false for only resetting the timestamp.
void ResetVRTelemetry(bool aUpdate);
// Update the VR displays for this window
bool UpdateVRDisplays(nsTArray<RefPtr<mozilla::dom::VRDisplay>>& aDisplays);

Просмотреть файл

@ -1020,6 +1020,14 @@ nsRange::DoSetRange(const RawRangeBoundary& aStart,
// sure to not use it here to determine our "old" current ancestor.
mStart = aStart;
mEnd = aEnd;
// If RangeBoundary is initialized with a container node and offset in it,
// its mRef may not have been initialized yet. However, nsRange will need to
// adjust the offset when the node position is changed. In such case,
// RangeBoundary::mRef needs to be initialized for recomputing offset later.
mStart.EnsureRef();
mEnd.EnsureRef();
mIsPositioned = !!mStart.Container();
if (checkCommonAncestor) {
nsINode* oldCommonAncestor = mRegisteredCommonAncestor;

Просмотреть файл

@ -18,7 +18,6 @@
#include "base/basictypes.h"
#include "nsIDOMHTMLMediaElement.h"
#include "nsIDOMHTMLSourceElement.h"
#include "TimeRanges.h"
#include "nsGenericHTMLElement.h"
#include "nsAttrValueInlines.h"

Просмотреть файл

@ -35,21 +35,10 @@ HTMLSourceElement::~HTMLSourceElement()
NS_IMPL_CYCLE_COLLECTION_INHERITED(HTMLSourceElement, nsGenericHTMLElement,
mSrcMediaSource)
NS_IMPL_ADDREF_INHERITED(HTMLSourceElement, nsGenericHTMLElement)
NS_IMPL_RELEASE_INHERITED(HTMLSourceElement, nsGenericHTMLElement)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(HTMLSourceElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLSourceElement)
NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement)
NS_IMPL_ISUPPORTS_CYCLE_COLLECTION_INHERITED_0(HTMLSourceElement, nsGenericHTMLElement)
NS_IMPL_ELEMENT_CLONE(HTMLSourceElement)
NS_IMPL_URI_ATTR(HTMLSourceElement, Src, src)
NS_IMPL_STRING_ATTR(HTMLSourceElement, Type, type)
NS_IMPL_STRING_ATTR(HTMLSourceElement, Srcset, srcset)
NS_IMPL_STRING_ATTR(HTMLSourceElement, Sizes, sizes)
NS_IMPL_STRING_ATTR(HTMLSourceElement, Media, media)
bool
HTMLSourceElement::MatchesCurrentMedia()
{

Просмотреть файл

@ -8,7 +8,6 @@
#define mozilla_dom_HTMLSourceElement_h
#include "mozilla/Attributes.h"
#include "nsIDOMHTMLSourceElement.h"
#include "nsGenericHTMLElement.h"
#include "mozilla/dom/HTMLMediaElement.h"
@ -19,8 +18,7 @@ namespace dom {
class MediaList;
class HTMLSourceElement final : public nsGenericHTMLElement,
public nsIDOMHTMLSourceElement
class HTMLSourceElement final : public nsGenericHTMLElement
{
public:
explicit HTMLSourceElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
@ -32,9 +30,6 @@ public:
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLSourceElement, source)
// nsIDOMHTMLSourceElement
NS_DECL_NSIDOMHTMLSOURCEELEMENT
virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult,
bool aPreallocateChildren) const override;

Просмотреть файл

@ -4,7 +4,6 @@
* 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 "nsIDOMHTMLSourceElement.h"
#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/HTMLVideoElementBinding.h"
#include "nsGenericHTMLElement.h"

Просмотреть файл

@ -20,7 +20,6 @@ XPIDL_SOURCES += [
'nsIDOMHTMLOptionsCollection.idl',
'nsIDOMHTMLScriptElement.idl',
'nsIDOMHTMLSelectElement.idl',
'nsIDOMHTMLSourceElement.idl',
'nsIDOMMozBrowserFrame.idl',
'nsIDOMTimeRanges.idl',
'nsIDOMValidityState.idl',

Просмотреть файл

@ -1,27 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et cindent: */
/* 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 "nsIDOMHTMLElement.idl"
/**
* The nsIDOMHTMLSourceElement interface is the interface to a HTML
* <source> element.
*
* For more information on this interface, please see
* http://www.whatwg.org/specs/web-apps/current-work/#source
*
* @status UNDER_DEVELOPMENT
*/
[uuid(1deb68f8-2ed6-4a41-b8c8-e0f86510f799)]
interface nsIDOMHTMLSourceElement : nsISupports
{
attribute DOMString src;
attribute DOMString type;
attribute DOMString srcset;
attribute DOMString sizes;
attribute DOMString media;
};

Просмотреть файл

@ -32,7 +32,7 @@ namespace mozilla {
// Update this version number to force re-running the benchmark. Such as when
// an improvement to FFVP9 or LIBVPX is deemed worthwhile.
const uint32_t VP9Benchmark::sBenchmarkVersionID = 2;
const uint32_t VP9Benchmark::sBenchmarkVersionID = 3;
const char* VP9Benchmark::sBenchmarkFpsPref = "media.benchmark.vp9.fps";
const char* VP9Benchmark::sBenchmarkFpsVersionCheck = "media.benchmark.vp9.versioncheck";

Просмотреть файл

@ -6,7 +6,7 @@
#include "mozilla/Logging.h"
#include "mozilla/StaticPtr.h"
#include "nsContentUtils.h"
#include "mozilla/Services.h"
#include "MediaDecoder.h"
#include "MediaShutdownManager.h"

Просмотреть файл

@ -410,10 +410,21 @@ MP4TrackDemuxer::Seek(const media::TimeUnit& aTime)
mIterator->Seek(seekTime.ToMicroseconds());
// Check what time we actually seeked to.
mQueuedSample = GetNextSample();
if (mQueuedSample) {
seekTime = mQueuedSample->mTime;
}
do {
RefPtr<MediaRawData> sample = GetNextSample();
if (!sample) {
return SeekPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_END_OF_STREAM,
__func__);
}
if (!sample->Size()) {
// This sample can't be decoded, continue searching.
continue;
}
if (sample->mKeyframe) {
mQueuedSample = sample;
seekTime = mQueuedSample->mTime;
}
} while (!mQueuedSample);
SetNextKeyFrameTime();

Просмотреть файл

@ -6,6 +6,8 @@
#include "AudioSink.h"
#include "AudioSinkWrapper.h"
#include "nsPrintfCString.h"
#include "VideoUtils.h"
namespace mozilla {
namespace media {

Просмотреть файл

@ -25,10 +25,11 @@ using namespace gfx;
VREventObserver::VREventObserver(nsGlobalWindow* aGlobalWindow)
: mWindow(aGlobalWindow)
, mIs2DView(true)
, mHasReset(false)
{
MOZ_ASSERT(aGlobalWindow && aGlobalWindow->IsInnerWindow());
mSpendTimeIn2DView = TimeStamp::Now();
UpdateSpentTimeIn2DTelemetry(false);
VRManagerChild* vmc = VRManagerChild::Get();
if (vmc) {
vmc->AddListener(this);
@ -46,13 +47,7 @@ VREventObserver::DisconnectFromOwner()
// In the event that nsGlobalWindow is deallocated, VREventObserver may
// still be AddRef'ed elsewhere. Ensure that we don't UAF by
// dereferencing mWindow.
if (mWindow && mIs2DView) {
// The WebVR content is closed, and we will collect the telemetry info
// for the users who view it in 2D view only.
Telemetry::Accumulate(Telemetry::WEBVR_USERS_VIEW_IN, 0);
Telemetry::AccumulateTimeDelta(Telemetry::WEBVR_TIME_SPENT_VIEWING_IN_2D,
mSpendTimeIn2DView);
}
UpdateSpentTimeIn2DTelemetry(true);
mWindow = nullptr;
// Unregister from VRManagerChild
@ -62,6 +57,26 @@ VREventObserver::DisconnectFromOwner()
}
}
void
VREventObserver::UpdateSpentTimeIn2DTelemetry(bool aUpdate)
{
// mHasReset for avoiding setting the telemetry continuously
// for the telemetry is already been set when it is at the background.
// then, it would be set again when the process is exit and calling
// VREventObserver::DisconnectFromOwner().
if (mWindow && mIs2DView && aUpdate && mHasReset) {
// The WebVR content is closed, and we will collect the telemetry info
// for the users who view it in 2D view only.
Telemetry::Accumulate(Telemetry::WEBVR_USERS_VIEW_IN, 0);
Telemetry::AccumulateTimeDelta(Telemetry::WEBVR_TIME_SPENT_VIEWING_IN_2D,
mSpendTimeIn2DView);
mHasReset = false;
} else if (!aUpdate) {
mSpendTimeIn2DView = TimeStamp::Now();
mHasReset = true;
}
}
void
VREventObserver::NotifyVRDisplayMounted(uint32_t aDisplayID)
{

Просмотреть файл

@ -30,6 +30,7 @@ public:
void NotifyVRDisplayPresentChange(uint32_t aDisplayID);
void DisconnectFromOwner();
void UpdateSpentTimeIn2DTelemetry(bool aUpdate);
private:
~VREventObserver();
@ -39,6 +40,7 @@ private:
// in the 2D view.
TimeStamp mSpendTimeIn2DView;
bool mIs2DView;
bool mHasReset;
};
} // namespace dom

Просмотреть файл

@ -31,7 +31,6 @@
#include "nsIDOMHTMLMediaElement.h"
#include "nsIDOMHTMLOptionElement.h"
#include "nsIDOMHTMLScriptElement.h"
#include "nsIDOMHTMLSourceElement.h"
#include "nsIDOMMozNamedAttrMap.h"
#include "nsIDOMNode.h"
#include "nsIDOMNodeFilter.h"
@ -494,8 +493,8 @@ ResourceReader::OnWalkDOMNode(nsIDOMNode* aNode)
if (nodeAsMedia) {
return OnWalkAttribute(aNode, "src");
}
nsCOMPtr<nsIDOMHTMLSourceElement> nodeAsSource = do_QueryInterface(aNode);
if (nodeAsSource) {
if (content->IsHTMLElement(nsGkAtoms::source)) {
return OnWalkAttribute(aNode, "src");
}
@ -1009,8 +1008,7 @@ PersistNodeFixup::FixupNode(nsIDOMNode *aNodeIn,
return rv;
}
nsCOMPtr<nsIDOMHTMLSourceElement> nodeAsSource = do_QueryInterface(aNodeIn);
if (nodeAsSource) {
if (content->IsHTMLElement(nsGkAtoms::source)) {
rv = GetNodeToFixup(aNodeIn, aNodeOut);
if (NS_SUCCEEDED(rv) && *aNodeOut) {
FixupAttribute(*aNodeOut, "src");

Просмотреть файл

@ -28,11 +28,13 @@
#include "TextEditUtils.h" // for TextEditUtils
#include "mozInlineSpellChecker.h" // for mozInlineSpellChecker
#include "mozilla/CheckedInt.h" // for CheckedInt
#include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint
#include "mozilla/EditorUtils.h" // for AutoRules, etc.
#include "mozilla/EditTransactionBase.h" // for EditTransactionBase
#include "mozilla/FlushType.h" // for FlushType::Frames
#include "mozilla/IMEStateManager.h" // for IMEStateManager
#include "mozilla/Preferences.h" // for Preferences
#include "mozilla/RangeBoundary.h" // for RawRangeBoundary, RangeBoundary
#include "mozilla/dom/Selection.h" // for Selection, etc.
#include "mozilla/Services.h" // for GetObserverService
#include "mozilla/TextComposition.h" // for TextComposition
@ -3764,22 +3766,17 @@ EditorBase::IsTextNode(nsIDOMNode* aNode)
return (nodeType == nsIDOMNode::TEXT_NODE);
}
/**
* GetNodeAtRangeOffsetPoint() returns the node at this position in a range,
* assuming that aParentOrNode is the node itself if it's a text node, or
* the node's parent otherwise.
*/
// static
nsIContent*
EditorBase::GetNodeAtRangeOffsetPoint(nsINode* aParentOrNode,
int32_t aOffset)
EditorBase::GetNodeAtRangeOffsetPoint(const RawRangeBoundary& aPoint)
{
if (NS_WARN_IF(!aParentOrNode)) {
if (NS_WARN_IF(!aPoint.IsSet())) {
return nullptr;
}
if (aParentOrNode->GetAsText()) {
return aParentOrNode->AsContent();
if (aPoint.Container()->GetAsText()) {
return aPoint.Container()->AsContent();
}
return aParentOrNode->GetChildAt(aOffset);
return aPoint.GetChildAtOffset();
}
/**
@ -4047,17 +4044,17 @@ EditorBase::JoinNodeDeep(nsIContent& aLeftNode,
nsCOMPtr<nsINode> parentNode = aRightNode.GetParentNode();
EditorDOMPoint ret;
while (leftNodeToJoin && rightNodeToJoin && parentNode &&
AreNodesSameType(leftNodeToJoin, rightNodeToJoin)) {
uint32_t length = leftNodeToJoin->Length();
ret.node = rightNodeToJoin;
ret.offset = length;
ret.Set(rightNodeToJoin, length);
// Do the join
nsresult rv = JoinNodes(*leftNodeToJoin, *rightNodeToJoin);
NS_ENSURE_SUCCESS(rv, EditorDOMPoint());
if (NS_WARN_IF(NS_FAILED(rv))) {
return EditorDOMPoint();
}
if (parentNode->GetAsText()) {
// We've joined all the way down to text nodes, we're done!
@ -4089,6 +4086,10 @@ EditorBase::JoinNodeDeep(nsIContent& aLeftNode,
}
}
if (NS_WARN_IF(!ret.IsSet())) {
return EditorDOMPoint();
}
return ret;
}

Просмотреть файл

@ -7,9 +7,11 @@
#define mozilla_EditorBase_h
#include "mozilla/Assertions.h" // for MOZ_ASSERT, etc.
#include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint
#include "mozilla/Maybe.h" // for Maybe
#include "mozilla/OwningNonNull.h" // for OwningNonNull
#include "mozilla/PresShell.h" // for PresShell
#include "mozilla/RangeBoundary.h" // for RawRangeBoundary, RangeBoundary
#include "mozilla/SelectionState.h" // for RangeUpdater, etc.
#include "mozilla/StyleSheet.h" // for StyleSheet
#include "mozilla/WeakPtr.h" // for WeakPtr
@ -123,7 +125,6 @@ class RemoveStyleSheetTransaction;
class SplitNodeTransaction;
class TextComposition;
class TextEditor;
struct EditorDOMPoint;
namespace dom {
class DataTransfer;
@ -886,8 +887,17 @@ public:
return aNode->NodeType() == nsIDOMNode::TEXT_NODE;
}
static nsIContent* GetNodeAtRangeOffsetPoint(nsINode* aParentOrNode,
int32_t aOffset);
/**
* GetNodeAtRangeOffsetPoint() returns the node at this position in a range,
* assuming that the container is the node itself if it's a text node, or
* the node's parent otherwise.
*/
static nsIContent* GetNodeAtRangeOffsetPoint(nsINode* aContainer,
int32_t aOffset)
{
return GetNodeAtRangeOffsetPoint(RawRangeBoundary(aContainer, aOffset));
}
static nsIContent* GetNodeAtRangeOffsetPoint(const RawRangeBoundary& aPoint);
static nsresult GetStartNodeAndOffset(Selection* aSelection,
nsIDOMNode** outStartNode,

Просмотреть файл

@ -0,0 +1,94 @@
/* -*- 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 mozilla_EditorDOMPoint_h
#define mozilla_EditorDOMPoint_h
#include "mozilla/Assertions.h"
#include "mozilla/Attributes.h"
#include "mozilla/RangeBoundary.h"
#include "nsCOMPtr.h"
#include "nsIContent.h"
#include "nsINode.h"
namespace mozilla {
template<typename ParentType, typename RefType>
class EditorDOMPointBase;
typedef EditorDOMPointBase<nsCOMPtr<nsINode>,
nsCOMPtr<nsIContent>> EditorDOMPoint;
typedef EditorDOMPointBase<nsINode*, nsIContent*> EditorRawDOMPoint;
template<typename ParentType, typename RefType>
class MOZ_STACK_CLASS EditorDOMPointBase final
: public RangeBoundaryBase<ParentType, RefType>
{
public:
EditorDOMPointBase()
: RangeBoundaryBase<ParentType, RefType>()
{
}
EditorDOMPointBase(nsINode* aConatiner,
int32_t aOffset)
: RangeBoundaryBase<ParentType, RefType>(aConatiner,
aOffset)
{
}
EditorDOMPointBase(nsIDOMNode* aDOMContainer,
int32_t aOffset)
: RangeBoundaryBase<ParentType, RefType>()
{
nsCOMPtr<nsINode> container = do_QueryInterface(aDOMContainer);
this->Set(container, aOffset);
}
/**
* Different from RangeBoundary, aReferenceChild should be a child node
* which you want to refer. So, set non-nullptr if offset is
* 0 - Length() - 1. Otherwise, set nullptr, i.e., if offset is same as
* Length().
*/
EditorDOMPointBase(nsINode* aContainer,
nsIContent* aPointedNode)
: RangeBoundaryBase<ParentType, RefType>(aContainer,
GetRef(aPointedNode))
{
}
EditorDOMPointBase(nsINode* aConatiner,
nsIContent* aPointedNode,
int32_t aOffset)
: RangeBoundaryBase<ParentType, RefType>(aConatiner,
GetRef(aPointedNode),
aOffset)
{
}
template<typename PT, typename RT>
explicit EditorDOMPointBase(const RangeBoundaryBase<PT, RT>& aOther)
: RangeBoundaryBase<ParentType, RefType>(aOther)
{
}
explicit EditorDOMPointBase(const RawRangeBoundary& aRawRangeBoundary)
: RangeBoundaryBase<ParentType, RefType>(aRawRangeBoundary)
{
}
private:
static nsIContent* GetRef(nsIContent* aPointedNode)
{
MOZ_ASSERT(aPointedNode);
return aPointedNode ? aPointedNode->GetPreviousSibling() : nullptr;
}
};
} // namespace mozilla
#endif // #ifndef mozilla_EditorDOMPoint_h

Просмотреть файл

@ -375,39 +375,6 @@ public:
}
};
/******************************************************************************
* general dom point utility struct
*****************************************************************************/
struct MOZ_STACK_CLASS EditorDOMPoint final
{
nsCOMPtr<nsINode> node;
int32_t offset;
EditorDOMPoint()
: node(nullptr)
, offset(-1)
{}
EditorDOMPoint(nsINode* aNode, int32_t aOffset)
: node(aNode)
, offset(aOffset)
{}
EditorDOMPoint(nsIDOMNode* aNode, int32_t aOffset)
: node(do_QueryInterface(aNode))
, offset(aOffset)
{}
void SetPoint(nsINode* aNode, int32_t aOffset)
{
node = aNode;
offset = aOffset;
}
void SetPoint(nsIDOMNode* aNode, int32_t aOffset)
{
node = do_QueryInterface(aNode);
offset = aOffset;
}
};
class EditorUtils final
{
public:

Просмотреть файл

@ -13,6 +13,7 @@
#include "WSRunObject.h"
#include "mozilla/Assertions.h"
#include "mozilla/CSSEditUtils.h"
#include "mozilla/EditorDOMPoint.h"
#include "mozilla/EditorUtils.h"
#include "mozilla/HTMLEditor.h"
#include "mozilla/MathAlgorithms.h"
@ -2304,9 +2305,11 @@ HTMLEditRules::WillDeleteSelection(Selection* aSelection,
if (startNode == stepbrother && startNode->GetAsText() &&
sibling->GetAsText()) {
EditorDOMPoint pt = JoinNodesSmart(*sibling, *startNode->AsContent());
NS_ENSURE_STATE(pt.node);
if (NS_WARN_IF(!pt.IsSet())) {
return NS_ERROR_FAILURE;
}
// Fix up selection
rv = aSelection->Collapse(pt.node, pt.offset);
rv = aSelection->Collapse(pt.Container(), pt.Offset());
NS_ENSURE_SUCCESS(rv, rv);
}
rv = InsertBRIfNeeded(aSelection);
@ -2374,8 +2377,10 @@ HTMLEditRules::WillDeleteSelection(Selection* aSelection,
// Put selection at edge of block and we are done.
NS_ENSURE_STATE(leafNode);
EditorDOMPoint newSel = GetGoodSelPointForNode(*leafNode, aAction);
NS_ENSURE_STATE(newSel.node);
aSelection->Collapse(newSel.node, newSel.offset);
if (NS_WARN_IF(!newSel.IsSet())) {
return NS_ERROR_FAILURE;
}
aSelection->Collapse(newSel.Container(), newSel.Offset());
return NS_OK;
}
@ -2563,9 +2568,11 @@ HTMLEditRules::WillDeleteSelection(Selection* aSelection,
NS_ENSURE_STATE(mHTMLEditor);
EditorDOMPoint pt =
mHTMLEditor->JoinNodeDeep(*leftParent, *rightParent);
NS_ENSURE_STATE(pt.node);
if (NS_WARN_IF(!pt.IsSet())) {
return NS_ERROR_FAILURE;
}
// Fix up selection
rv = aSelection->Collapse(pt.node, pt.offset);
rv = aSelection->Collapse(pt.Container(), pt.Offset());
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
@ -2772,19 +2779,23 @@ HTMLEditRules::GetGoodSelPointForNode(nsINode& aNode,
aAction == nsIEditor::ePreviousWord ||
aAction == nsIEditor::eToBeginningOfLine);
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
if (aNode.GetAsText() || mHTMLEditor->IsContainer(&aNode) ||
NS_WARN_IF(!aNode.GetParentNode())) {
return EditorDOMPoint(&aNode, isPreviousAction ? aNode.Length() : 0);
}
EditorDOMPoint ret;
ret.node = aNode.GetParentNode();
ret.offset = ret.node ? ret.node->IndexOf(&aNode) : -1;
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor) ||
NS_WARN_IF(!aNode.IsContent())) {
return EditorDOMPoint();
}
EditorDOMPoint ret(aNode.GetParentNode(), aNode.AsContent());
if ((!aNode.IsHTMLElement(nsGkAtoms::br) ||
mHTMLEditor->IsVisibleBRElement(&aNode)) && isPreviousAction) {
ret.offset++;
ret.AdvanceOffset();
}
return ret;
}
@ -3071,7 +3082,7 @@ HTMLEditRules::TryToJoinBlocks(nsIContent& aLeftNode,
rightBlock->NodeInfo()->NameAtom()) {
// Nodes are same type. merge them.
EditorDOMPoint pt = JoinNodesSmart(*leftBlock, *rightBlock);
if (pt.node && mergeLists) {
if (pt.IsSet() && mergeLists) {
RefPtr<Element> newBlock =
ConvertListType(rightBlock, existingList, nsGkAtoms::li);
}
@ -5164,7 +5175,7 @@ HTMLEditRules::CheckForEmptyBlock(nsINode* aStartNode,
htmlEditor->GetNextNode(blockParent, offset + 1, child, true);
if (nextNode) {
EditorDOMPoint pt = GetGoodSelPointForNode(*nextNode, aAction);
nsresult rv = aSelection->Collapse(pt.node, pt.offset);
nsresult rv = aSelection->Collapse(pt.Container(), pt.Offset());
NS_ENSURE_SUCCESS(rv, rv);
} else {
// Adjust selection to be right after it.
@ -5181,7 +5192,7 @@ HTMLEditRules::CheckForEmptyBlock(nsINode* aStartNode,
true);
if (priorNode) {
EditorDOMPoint pt = GetGoodSelPointForNode(*priorNode, aAction);
nsresult rv = aSelection->Collapse(pt.node, pt.offset);
nsresult rv = aSelection->Collapse(pt.Container(), pt.Offset());
NS_ENSURE_SUCCESS(rv, rv);
} else {
nsresult rv = aSelection->Collapse(blockParent, offset + 1);
@ -5853,22 +5864,27 @@ HTMLEditRules::PromoteRange(nsRange& aRange,
// This is tricky. The basic idea is to push out the range endpoints to
// truly enclose the blocks that we will affect.
EditorDOMPoint opStart =
GetPromotedPoint(kStart, *startNode, startOffset, aOperationType);
EditorDOMPoint opEnd =
GetPromotedPoint(kEnd, *endNode, endOffset, aOperationType);
// Make sure that the new range ends up to be in the editable section.
// XXX Looks like that this check wastes the time. Perhaps, we should
// implement a method which checks both two DOM points in the editor
// root.
EditorDOMPoint startPoint =
GetPromotedPoint(kStart, *startNode, startOffset, aOperationType);
if (!htmlEditor->IsDescendantOfEditorRoot(
EditorBase::GetNodeAtRangeOffsetPoint(opStart.node, opStart.offset)) ||
!htmlEditor->IsDescendantOfEditorRoot(
EditorBase::GetNodeAtRangeOffsetPoint(opEnd.node, opEnd.offset - 1))) {
EditorBase::GetNodeAtRangeOffsetPoint(startPoint.AsRaw()))) {
return;
}
EditorDOMPoint endPoint =
GetPromotedPoint(kEnd, *endNode, endOffset, aOperationType);
EditorRawDOMPoint lastRawPoint(endPoint.AsRaw());
lastRawPoint.RewindOffset();
if (!htmlEditor->IsDescendantOfEditorRoot(
EditorBase::GetNodeAtRangeOffsetPoint(lastRawPoint))) {
return;
}
DebugOnly<nsresult> rv =
aRange.SetStartAndEnd(opStart.node, opStart.offset,
opEnd.node, opEnd.offset);
aRange.SetStartAndEnd(startPoint.AsRaw(), endPoint.AsRaw());
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
@ -6400,14 +6416,16 @@ HTMLEditRules::GetHighestInlineParent(nsINode& aNode)
*/
nsresult
HTMLEditRules::GetNodesFromPoint(
EditorDOMPoint aPoint,
const EditorDOMPoint& aPoint,
EditAction aOperation,
nsTArray<OwningNonNull<nsINode>>& outArrayOfNodes,
TouchContent aTouchContent)
{
NS_ENSURE_STATE(aPoint.node);
RefPtr<nsRange> range = new nsRange(aPoint.node);
nsresult rv = range->SetStart(aPoint.node, aPoint.offset);
if (NS_WARN_IF(!aPoint.IsSet())) {
return NS_ERROR_INVALID_ARG;
}
RefPtr<nsRange> range = new nsRange(aPoint.Container());
DebugOnly<nsresult> rv = range->SetStart(aPoint.Container(), aPoint.Offset());
MOZ_ASSERT(NS_SUCCEEDED(rv));
// Expand the range to include adjacent inlines
@ -6420,9 +6438,12 @@ HTMLEditRules::GetNodesFromPoint(
arrayOfRanges.AppendElement(range);
// Use these ranges to contruct a list of nodes to act on
rv = GetNodesForOperation(arrayOfRanges, outArrayOfNodes, aOperation,
aTouchContent);
NS_ENSURE_SUCCESS(rv, rv);
nsresult rv2 =
GetNodesForOperation(arrayOfRanges, outArrayOfNodes, aOperation,
aTouchContent);
if (NS_WARN_IF(NS_FAILED(rv2))) {
return rv2;
}
return NS_OK;
}
@ -7325,16 +7346,22 @@ HTMLEditRules::JoinNodesSmart(nsIContent& aNodeLeft,
{
// Caller responsible for left and right node being the same type
nsCOMPtr<nsINode> parent = aNodeLeft.GetParentNode();
NS_ENSURE_TRUE(parent, EditorDOMPoint());
if (NS_WARN_IF(!parent)) {
return EditorDOMPoint();
}
int32_t parOffset = parent->IndexOf(&aNodeLeft);
nsCOMPtr<nsINode> rightParent = aNodeRight.GetParentNode();
// If they don't have the same parent, first move the right node to after the
// left one
if (parent != rightParent) {
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
nsresult rv = mHTMLEditor->MoveNode(&aNodeRight, parent, parOffset);
NS_ENSURE_SUCCESS(rv, EditorDOMPoint());
if (NS_WARN_IF(NS_FAILED(rv))) {
return EditorDOMPoint();
}
}
EditorDOMPoint ret(&aNodeRight, aNodeLeft.Length());
@ -7343,23 +7370,37 @@ HTMLEditRules::JoinNodesSmart(nsIContent& aNodeLeft,
if (HTMLEditUtils::IsList(&aNodeLeft) || aNodeLeft.GetAsText()) {
// For lists, merge shallow (wouldn't want to combine list items)
nsresult rv = mHTMLEditor->JoinNodes(aNodeLeft, aNodeRight);
NS_ENSURE_SUCCESS(rv, EditorDOMPoint());
if (NS_WARN_IF(NS_FAILED(rv))) {
return EditorDOMPoint();
}
return ret;
}
// Remember the last left child, and first right child
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
nsCOMPtr<nsIContent> lastLeft = mHTMLEditor->GetLastEditableChild(aNodeLeft);
NS_ENSURE_TRUE(lastLeft, EditorDOMPoint());
if (NS_WARN_IF(!lastLeft)) {
return EditorDOMPoint();
}
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
nsCOMPtr<nsIContent> firstRight = mHTMLEditor->GetFirstEditableChild(aNodeRight);
NS_ENSURE_TRUE(firstRight, EditorDOMPoint());
if (NS_WARN_IF(!firstRight)) {
return EditorDOMPoint();
}
// For list items, divs, etc., merge smart
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
nsresult rv = mHTMLEditor->JoinNodes(aNodeLeft, aNodeRight);
NS_ENSURE_SUCCESS(rv, EditorDOMPoint());
if (NS_WARN_IF(NS_FAILED(rv))) {
return EditorDOMPoint();
}
if (lastLeft && firstRight && mHTMLEditor &&
mHTMLEditor->AreNodesSameType(lastLeft, firstRight) &&
@ -7367,7 +7408,9 @@ HTMLEditRules::JoinNodesSmart(nsIContent& aNodeLeft,
(lastLeft->IsElement() && firstRight->IsElement() &&
mHTMLEditor->mCSSEditUtils->ElementsSameStyle(lastLeft->AsElement(),
firstRight->AsElement())))) {
NS_ENSURE_TRUE(mHTMLEditor, EditorDOMPoint());
if (NS_WARN_IF(!mHTMLEditor)) {
return EditorDOMPoint();
}
return JoinNodesSmart(*lastLeft, *firstRight);
}
return ret;
@ -7838,7 +7881,7 @@ HTMLEditRules::AdjustSelection(Selection* aSelection,
return NS_OK;
}
EditorDOMPoint pt = GetGoodSelPointForNode(*nearNode, aAction);
rv = aSelection->Collapse(pt.node, pt.offset);
rv = aSelection->Collapse(pt.Container(), pt.Offset());
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}

Просмотреть файл

@ -7,6 +7,7 @@
#define HTMLEditRules_h
#include "TypeInState.h"
#include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint
#include "mozilla/SelectionState.h"
#include "mozilla/TextEditRules.h"
#include "nsCOMPtr.h"
@ -32,7 +33,6 @@ class EditActionResult;
class HTMLEditor;
class RulesInfo;
class TextEditor;
struct EditorDOMPoint;
namespace dom {
class Element;
class Selection;
@ -189,8 +189,8 @@ protected:
*/
nsresult InsertBRIfNeededInternal(nsINode& aNode, bool aInsertMozBR);
mozilla::EditorDOMPoint GetGoodSelPointForNode(nsINode& aNode,
nsIEditor::EDirection aAction);
EditorDOMPoint GetGoodSelPointForNode(nsINode& aNode,
nsIEditor::EDirection aAction);
/**
* TryToJoinBlocks() tries to join two block elements. The right element is
@ -355,7 +355,7 @@ protected:
void GetChildNodesForOperation(
nsINode& aNode,
nsTArray<OwningNonNull<nsINode>>& outArrayOfNodes);
nsresult GetNodesFromPoint(EditorDOMPoint aPoint,
nsresult GetNodesFromPoint(const EditorDOMPoint& aPoint,
EditAction aOperation,
nsTArray<OwningNonNull<nsINode>>& outArrayOfNodes,
TouchContent aTouchContent);

Просмотреть файл

@ -9,6 +9,7 @@
#include "mozilla/Assertions.h"
#include "mozilla/Casting.h"
#include "mozilla/EditorDOMPoint.h"
#include "mozilla/EditorUtils.h"
#include "mozilla/HTMLEditor.h"
#include "mozilla/mozalloc.h"
@ -650,8 +651,7 @@ WSRunObject::GetWSNodes()
mLastNBSPOffset = pos;
}
}
start.node = textNode;
start.offset = pos;
start.Set(textNode, pos);
}
}
}
@ -661,8 +661,8 @@ WSRunObject::GetWSNodes()
nsCOMPtr<nsIContent> priorNode = GetPreviousWSNode(start, wsBoundingParent);
if (priorNode) {
if (IsBlockNode(priorNode)) {
mStartNode = start.node;
mStartOffset = start.offset;
mStartNode = start.Container();
mStartOffset = start.Offset();
mStartReason = WSType::otherBlock;
mStartReasonNode = priorNode;
} else if (priorNode->IsNodeOfType(nsINode::eTEXT) &&
@ -678,7 +678,7 @@ WSRunObject::GetWSNodes()
if (len < 1) {
// Zero length text node. Set start point to it
// so we can get past it!
start.SetPoint(priorNode, 0);
start.Set(priorNode, 0);
} else {
for (int32_t pos = len - 1; pos >= 0; pos--) {
// sanity bounds check the char position. bug 136165
@ -704,14 +704,14 @@ WSRunObject::GetWSNodes()
mLastNBSPOffset = pos;
}
}
start.SetPoint(textNode, pos);
start.Set(textNode, pos);
}
}
} else {
// it's a break or a special node, like <img>, that is not a block and not
// a break but still serves as a terminator to ws runs.
mStartNode = start.node;
mStartOffset = start.offset;
mStartNode = start.Container();
mStartOffset = start.Offset();
if (TextEditUtils::IsBreak(priorNode)) {
mStartReason = WSType::br;
} else {
@ -721,8 +721,8 @@ WSRunObject::GetWSNodes()
}
} else {
// no prior node means we exhausted wsBoundingParent
mStartNode = start.node;
mStartOffset = start.offset;
mStartNode = start.Container();
mStartOffset = start.Offset();
mStartReason = WSType::thisBlock;
mStartReasonNode = wsBoundingParent;
}
@ -759,7 +759,7 @@ WSRunObject::GetWSNodes()
mFirstNBSPOffset = pos;
}
}
end.SetPoint(textNode, pos + 1);
end.Set(textNode, pos + 1);
}
}
}
@ -770,8 +770,8 @@ WSRunObject::GetWSNodes()
if (nextNode) {
if (IsBlockNode(nextNode)) {
// we encountered a new block. therefore no more ws.
mEndNode = end.node;
mEndOffset = end.offset;
mEndNode = end.Container();
mEndOffset = end.Offset();
mEndReason = WSType::otherBlock;
mEndReasonNode = nextNode;
} else if (nextNode->IsNodeOfType(nsINode::eTEXT) &&
@ -787,7 +787,7 @@ WSRunObject::GetWSNodes()
if (len < 1) {
// Zero length text node. Set end point to it
// so we can get past it!
end.SetPoint(textNode, 0);
end.Set(textNode, 0);
} else {
for (uint32_t pos = 0; pos < len; pos++) {
// sanity bounds check the char position. bug 136165
@ -813,15 +813,15 @@ WSRunObject::GetWSNodes()
mFirstNBSPOffset = pos;
}
}
end.SetPoint(textNode, pos + 1);
end.Set(textNode, pos + 1);
}
}
} else {
// we encountered a break or a special node, like <img>,
// that is not a block and not a break but still
// serves as a terminator to ws runs.
mEndNode = end.node;
mEndOffset = end.offset;
mEndNode = end.Container();
mEndOffset = end.Offset();
if (TextEditUtils::IsBreak(nextNode)) {
mEndReason = WSType::br;
} else {
@ -831,8 +831,8 @@ WSRunObject::GetWSNodes()
}
} else {
// no next node means we exhausted wsBoundingParent
mEndNode = end.node;
mEndOffset = end.offset;
mEndNode = end.Container();
mEndOffset = end.Offset();
mEndReason = WSType::thisBlock;
mEndReasonNode = wsBoundingParent;
}
@ -1033,35 +1033,40 @@ WSRunObject::GetPreviousWSNodeInner(nsINode* aStartNode,
}
nsIContent*
WSRunObject::GetPreviousWSNode(EditorDOMPoint aPoint,
WSRunObject::GetPreviousWSNode(const EditorDOMPoint& aPoint,
nsINode* aBlockParent)
{
// Can't really recycle various getnext/prior routines because we
// have special needs here. Need to step into inline containers but
// not block containers.
MOZ_ASSERT(aPoint.node && aBlockParent);
MOZ_ASSERT(aPoint.IsSet() && aBlockParent);
if (aPoint.node->NodeType() == nsIDOMNode::TEXT_NODE) {
return GetPreviousWSNodeInner(aPoint.node, aBlockParent);
if (aPoint.Container()->NodeType() == nsIDOMNode::TEXT_NODE) {
return GetPreviousWSNodeInner(aPoint.Container(), aBlockParent);
}
if (!mHTMLEditor->IsContainer(aPoint.node)) {
return GetPreviousWSNodeInner(aPoint.node, aBlockParent);
if (!mHTMLEditor->IsContainer(aPoint.Container())) {
return GetPreviousWSNodeInner(aPoint.Container(), aBlockParent);
}
if (!aPoint.offset) {
if (aPoint.node == aBlockParent) {
if (!aPoint.Offset()) {
if (aPoint.Container() == aBlockParent) {
// We are at start of the block.
return nullptr;
}
// We are at start of non-block container
return GetPreviousWSNodeInner(aPoint.node, aBlockParent);
return GetPreviousWSNodeInner(aPoint.Container(), aBlockParent);
}
if (NS_WARN_IF(!aPoint.Container()->IsContent())) {
return nullptr;
}
nsCOMPtr<nsIContent> priorNode = aPoint.GetPreviousSiblingOfChildAtOffset();
if (NS_WARN_IF(!priorNode)) {
return nullptr;
}
nsCOMPtr<nsIContent> startContent = do_QueryInterface(aPoint.node);
NS_ENSURE_TRUE(startContent, nullptr);
nsCOMPtr<nsIContent> priorNode = startContent->GetChildAt(aPoint.offset - 1);
NS_ENSURE_TRUE(priorNode, nullptr);
// We have a prior node. If it's a block, return it.
if (IsBlockNode(priorNode)) {
return priorNode;
@ -1117,33 +1122,34 @@ WSRunObject::GetNextWSNodeInner(nsINode* aStartNode,
}
nsIContent*
WSRunObject::GetNextWSNode(EditorDOMPoint aPoint,
WSRunObject::GetNextWSNode(const EditorDOMPoint& aPoint,
nsINode* aBlockParent)
{
// Can't really recycle various getnext/prior routines because we have
// special needs here. Need to step into inline containers but not block
// containers.
MOZ_ASSERT(aPoint.node && aBlockParent);
MOZ_ASSERT(aPoint.IsSet() && aBlockParent);
if (aPoint.node->NodeType() == nsIDOMNode::TEXT_NODE) {
return GetNextWSNodeInner(aPoint.node, aBlockParent);
if (aPoint.Container()->NodeType() == nsIDOMNode::TEXT_NODE) {
return GetNextWSNodeInner(aPoint.Container(), aBlockParent);
}
if (!mHTMLEditor->IsContainer(aPoint.node)) {
return GetNextWSNodeInner(aPoint.node, aBlockParent);
if (!mHTMLEditor->IsContainer(aPoint.Container())) {
return GetNextWSNodeInner(aPoint.Container(), aBlockParent);
}
nsCOMPtr<nsIContent> startContent = do_QueryInterface(aPoint.node);
NS_ENSURE_TRUE(startContent, nullptr);
if (NS_WARN_IF(!aPoint.Container()->IsContent())) {
return nullptr;
}
nsCOMPtr<nsIContent> nextNode = startContent->GetChildAt(aPoint.offset);
nsCOMPtr<nsIContent> nextNode = aPoint.GetChildAtOffset();
if (!nextNode) {
if (aPoint.node == aBlockParent) {
if (aPoint.Container() == aBlockParent) {
// We are at end of the block.
return nullptr;
}
// We are at end of non-block container
return GetNextWSNodeInner(aPoint.node, aBlockParent);
return GetNextWSNodeInner(aPoint.Container(), aBlockParent);
}
// We have a next node. If it's a block, return it.

Просмотреть файл

@ -12,6 +12,7 @@
#include "nscore.h"
#include "mozilla/Attributes.h"
#include "mozilla/dom/Text.h"
#include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint
class nsIDOMNode;
@ -19,7 +20,6 @@ namespace mozilla {
class HTMLEditor;
class HTMLEditRules;
struct EditorDOMPoint;
// class WSRunObject represents the entire whitespace situation
// around a given point. It collects up a list of nodes that contain
@ -322,9 +322,11 @@ protected:
void MakeSingleWSRun(WSType aType);
nsIContent* GetPreviousWSNodeInner(nsINode* aStartNode,
nsINode* aBlockParent);
nsIContent* GetPreviousWSNode(EditorDOMPoint aPoint, nsINode* aBlockParent);
nsIContent* GetPreviousWSNode(const EditorDOMPoint& aPoint,
nsINode* aBlockParent);
nsIContent* GetNextWSNodeInner(nsINode* aStartNode, nsINode* aBlockParent);
nsIContent* GetNextWSNode(EditorDOMPoint aPoint, nsINode* aBlockParent);
nsIContent* GetNextWSNode(const EditorDOMPoint& aPoint,
nsINode* aBlockParent);
nsresult PrepareToDeleteRangePriv(WSRunObject* aEndObject);
nsresult PrepareToSplitAcrossBlocksPriv();
nsresult DeleteChars(nsINode* aStartNode, int32_t aStartOffset,

Просмотреть файл

@ -22,6 +22,7 @@ EXPORTS.mozilla += [
'CSSEditUtils.h',
'EditorBase.h',
'EditorController.h',
'EditorDOMPoint.h',
'EditorUtils.h',
'EditTransactionBase.h',
'HTMLEditor.h',

Просмотреть файл

@ -0,0 +1,24 @@
<style type="text/css">
#container {
height: 300px;
width: 300px;
}
#box {
height: 100px;
width: 100px;
background: red;
animation: 2s anim;
}
@keyframes anim {
from {
-moz-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10%, 10%, 0, 1);
}
to {
-moz-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40%, 40%, 0, 1);
}
}
</style>
<div id=container>
<div id=box></div>
</div>

Просмотреть файл

@ -1,2 +1,3 @@
load 1402183-1.html
skip-if(!(stylo||styloVsGecko)||Android) load 1407470-1.html
load 1405881-1.html

Просмотреть файл

@ -345,8 +345,12 @@ static void AddTransformFunctions(const nsCSSValueList* aList,
matrix._32 = 0;
matrix._33 = 1;
matrix._34 = 0;
matrix._41 = array->Item(5).GetFloatValue();
matrix._42 = array->Item(6).GetFloatValue();
matrix._41 = ProcessTranslatePart(array->Item(5), contextIfGecko,
aPresContext, conditions,
&aRefBox, &TransformReferenceBox::Width);
matrix._42 = ProcessTranslatePart(array->Item(6), contextIfGecko,
aPresContext, conditions,
&aRefBox, &TransformReferenceBox::Height);
matrix._43 = 0;
matrix._44 = 1;
aFunctions.AppendElement(TransformMatrix(matrix));
@ -367,9 +371,15 @@ static void AddTransformFunctions(const nsCSSValueList* aList,
matrix._32 = array->Item(10).GetFloatValue();
matrix._33 = array->Item(11).GetFloatValue();
matrix._34 = array->Item(12).GetFloatValue();
matrix._41 = array->Item(13).GetFloatValue();
matrix._42 = array->Item(14).GetFloatValue();
matrix._43 = array->Item(15).GetFloatValue();
matrix._41 = ProcessTranslatePart(array->Item(13), contextIfGecko,
aPresContext, conditions,
&aRefBox, &TransformReferenceBox::Width);
matrix._42 = ProcessTranslatePart(array->Item(14), contextIfGecko,
aPresContext, conditions,
&aRefBox, &TransformReferenceBox::Height);
matrix._43 = ProcessTranslatePart(array->Item(15), contextIfGecko,
aPresContext, conditions,
&aRefBox, nullptr);
matrix._44 = array->Item(16).GetFloatValue();
aFunctions.AppendElement(TransformMatrix(matrix));
break;

Просмотреть файл

@ -7,23 +7,23 @@ Currently, we only use the vp8 and vp9 portion of the library, and only on x86
based platforms. If this changes, configuration files will most likely
need to be updated.
AVX2 must be disabled on Linux due to the use of yasm 1.1 on the build bots.
AVX2 must be disabled on Linux 32 bits due to the use of yasm 1.1 on the build bots.
Once yasm is upgraded to 1.2 or later, AVX2 code could be re-enabled.
Add --disable-avx2 to configure on those platforms.
configuration files were generated as follow using the configure script:
./configure --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-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-yasm
./configure --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-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm
config*:
replace: /HAVE_(MALLOC_H|ARC4RANDOM|LOCALTIME_R|MEMALIGN|POSIX_MEMALIGN)/d
config_unix32.h:
add to configure command: --disable-asm --disable-yasm --cc='clang -m32'
add to configure command: --disable-asm --disable-x86asm --cc='clang -m32'
config_android.h:
./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --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-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --cross-prefix=~/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=~/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm
config_unix64.h/config_unix64.asm:
config_unix32.h/config_unix64.h/config_unix64.asm:
replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0
config_win32/64.h/asm:

Просмотреть файл

@ -63,8 +63,8 @@
%define HAVE_MIPSDSP 0
%define HAVE_MIPSDSPR2 0
%define HAVE_MSA 0
%define HAVE_LOONGSON2 1
%define HAVE_LOONGSON3 1
%define HAVE_LOONGSON2 0
%define HAVE_LOONGSON3 0
%define HAVE_MMI 0
%define HAVE_ARMV5TE_EXTERNAL 0
%define HAVE_ARMV6_EXTERNAL 0
@ -162,32 +162,33 @@
%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_ATOMIC_COMPARE_EXCHANGE 1
%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 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_YASM 1
%define HAVE_X86ASM 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 1
%define HAVE_ASM_TYPES_H 0
%define HAVE_CDIO_PARANOIA_H 0
%define HAVE_CDIO_PARANOIA_PARANOIA_H 0
%define HAVE_DISPATCH_DISPATCH_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
@ -196,7 +197,7 @@
%define HAVE_DIRECT_H 0
%define HAVE_DIRENT_H 1
%define HAVE_DLFCN_H 1
%define HAVE_D3D11_H 0
%define HAVE_DXGIDEBUG_H 0
%define HAVE_DXVA_H 0
%define HAVE_ES2_GL_H 0
%define HAVE_GSM_H 0
@ -205,12 +206,13 @@
%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_SNDIO_H 0
%define HAVE_SOUNDCARD_H 0
%define HAVE_STDATOMIC_H 1
%define HAVE_SYS_MMAN_H 1
@ -259,12 +261,11 @@
%define HAVE_TRUNCF 1
%define HAVE_ACCESS 1
%define HAVE_ALIGNED_MALLOC 0
%define HAVE_CLOCK_GETTIME 0
%define HAVE_CLOCK_GETTIME 1
%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
@ -305,18 +306,20 @@
%define HAVE_SYSCONF 1
%define HAVE_SYSCTL 1
%define HAVE_USLEEP 1
%define HAVE_UTGETOSTYPEFROMSTRING 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
@ -333,6 +336,7 @@
%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
@ -349,42 +353,38 @@
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
%define HAVE_ATOMICS_NATIVE 1
%define HAVE_DOS_PATHS 0
%define HAVE_DXVA2_LIB 0
%define HAVE_DXVA2API_COBJ 0
%define HAVE_LIBC_MSVCRT 0
%define HAVE_LIBDC1394_1 0
%define HAVE_LIBDC1394_2 0
%define HAVE_MAKEINFO 1
%define HAVE_MAKEINFO_HTML 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_SDL2 0
%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 HAVE_XLIB 0
%define CONFIG_BSFS 0
%define CONFIG_DECODERS 1
%define CONFIG_PARSERS 1
%define CONFIG_DOC 0
%define CONFIG_HTMLPAGES 1
%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_DECODING_ENCODING_EXAMPLE 0
%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
@ -393,27 +393,55 @@
%define CONFIG_SCALING_VIDEO_EXAMPLE 0
%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
%define CONFIG_TRANSCODING_EXAMPLE 0
%define CONFIG_AVISYNTH 0
%define CONFIG_BZLIB 0
%define CONFIG_CHROMAPRINT 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_DECKLINK 0
%define CONFIG_FREI0R 0
%define CONFIG_GCRYPT 0
%define CONFIG_GMP 0
%define CONFIG_GNUTLS 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_LIBCDIO 0
%define CONFIG_LIBCELT 0
%define CONFIG_LIBDC1394 0
%define CONFIG_LIBEBUR128 0
%define CONFIG_LIBFDK_AAC 0
%define CONFIG_LIBDRM 0
%define CONFIG_LIBFLITE 0
%define CONFIG_LIBFONTCONFIG 0
%define CONFIG_LIBFREETYPE 0
@ -425,18 +453,15 @@
%define CONFIG_LIBKVAZAAR 0
%define CONFIG_LIBMODPLUG 0
%define CONFIG_LIBMP3LAME 0
%define CONFIG_LIBNUT 0
%define CONFIG_LIBOPENCORE_AMRNB 0
%define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
%define CONFIG_LIBSCHROEDINGER 0
%define CONFIG_LIBSHINE 0
%define CONFIG_LIBSMBCLIENT 0
%define CONFIG_LIBSNAPPY 0
@ -447,52 +472,37 @@
%define CONFIG_LIBTHEORA 0
%define CONFIG_LIBTWOLAME 0
%define CONFIG_LIBV4L2 0
%define CONFIG_LIBVIDSTAB 0
%define CONFIG_LIBVO_AMRWBENC 0
%define CONFIG_LIBVMAF 0
%define CONFIG_LIBVORBIS 0
%define CONFIG_LIBVPX 0
%define CONFIG_LIBWAVPACK 0
%define CONFIG_LIBWEBP 0
%define CONFIG_LIBX264 0
%define CONFIG_LIBX265 0
%define CONFIG_LIBXAVS 0
%define CONFIG_LIBXCB 0
%define CONFIG_LIBXCB_SHM 0
%define CONFIG_LIBXCB_SHAPE 0
%define CONFIG_LIBXCB_XFIXES 0
%define CONFIG_LIBXVID 0
%define CONFIG_LIBXML2 0
%define CONFIG_LIBZIMG 0
%define CONFIG_LIBZMQ 0
%define CONFIG_LIBZVBI 0
%define CONFIG_LZMA 0
%define CONFIG_MEDIACODEC 0
%define CONFIG_NETCDF 0
%define CONFIG_OPENAL 0
%define CONFIG_OPENCL 0
%define CONFIG_OPENGL 0
%define CONFIG_OPENSSL 0
%define CONFIG_SCHANNEL 0
%define CONFIG_SDL 0
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_VIDEOTOOLBOX 0
%define CONFIG_X11GRAB 0
%define CONFIG_XLIB 0
%define CONFIG_ZLIB 0
%define CONFIG_AUDIOTOOLBOX 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_LIBMFX 0
%define CONFIG_LIBNPP 0
%define CONFIG_MMAL 0
%define CONFIG_NVENC 0
%define CONFIG_OMX 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
@ -531,16 +541,27 @@
%define CONFIG_PIXELUTILS 0
%define CONFIG_NETWORK 0
%define CONFIG_RDFT 0
%define CONFIG_AUTODETECT 0
%define CONFIG_FONTCONFIG 0
%define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
%define CONFIG_RAISE_MAJOR 0
%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
@ -556,21 +577,24 @@
%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 1
%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_IMDCT15 0
%define CONFIG_MDCT15 0
%define CONFIG_INTRAX8 0
%define CONFIG_ISO_MEDIA 0
%define CONFIG_IVIDSP 0
@ -579,12 +603,14 @@
%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
@ -606,13 +632,13 @@
%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_VT_BT2020 0
%define CONFIG_WMA_FREQS 0
%define CONFIG_WMV2DSP 0
%define CONFIG_NULL_BSF 1

Просмотреть файл

@ -1,12 +1,12 @@
/* 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-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm"
#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 2016
#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 7.0.2 (clang-700.1.81)"
#define CC_IDENT "Apple LLVM version 9.0.0 (clang-900.0.38)"
#define av_restrict restrict
#define EXTERN_PREFIX "_"
#define EXTERN_ASM _
@ -79,8 +79,8 @@
#define HAVE_MIPSDSP 0
#define HAVE_MIPSDSPR2 0
#define HAVE_MSA 0
#define HAVE_LOONGSON2 1
#define HAVE_LOONGSON3 1
#define HAVE_LOONGSON2 0
#define HAVE_LOONGSON3 0
#define HAVE_MMI 0
#define HAVE_ARMV5TE_EXTERNAL 0
#define HAVE_ARMV6_EXTERNAL 0
@ -178,33 +178,33 @@
#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_ATOMIC_COMPARE_EXCHANGE 1
#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 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_YASM 1
#define HAVE_X86ASM 1
#define HAVE_BIGENDIAN 0
#define HAVE_FAST_UNALIGNED 1
#define HAVE_INCOMPATIBLE_LIBAV_ABI 0
#define HAVE_ALSA_ASOUNDLIB_H 0
#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_DISPATCH_DISPATCH_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
@ -213,7 +213,7 @@
#define HAVE_DIRECT_H 0
#define HAVE_DIRENT_H 1
#define HAVE_DLFCN_H 1
#define HAVE_D3D11_H 0
#define HAVE_DXGIDEBUG_H 0
#define HAVE_DXVA_H 0
#define HAVE_ES2_GL_H 0
#define HAVE_GSM_H 0
@ -222,12 +222,13 @@
#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_SNDIO_H 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_STDATOMIC_H 1
#define HAVE_SYS_MMAN_H 1
@ -276,12 +277,11 @@
#define HAVE_TRUNCF 1
#define HAVE_ACCESS 1
#define HAVE_ALIGNED_MALLOC 0
#define HAVE_CLOCK_GETTIME 0
#define HAVE_CLOCK_GETTIME 1
#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
@ -320,19 +320,22 @@
#define HAVE_SLEEP 0
#define HAVE_STRERROR_R 1
#define HAVE_SYSCONF 1
#define HAVE_SYSCTL 1
#define HAVE_USLEEP 1
#define HAVE_UTGETOSTYPEFROMSTRING 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
@ -349,6 +352,7 @@
#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
@ -365,42 +369,38 @@
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
#define HAVE_ATOMICS_NATIVE 1
#define HAVE_DOS_PATHS 0
#define HAVE_DXVA2_LIB 0
#define HAVE_DXVA2API_COBJ 0
#define HAVE_LIBC_MSVCRT 0
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 0
#define HAVE_MAKEINFO 1
#define HAVE_MAKEINFO_HTML 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_SDL2 0
#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 HAVE_XLIB 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_PARSERS 1
#define CONFIG_DOC 0
#define CONFIG_HTMLPAGES 1
#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_DECODING_ENCODING_EXAMPLE 0
#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
@ -409,27 +409,55 @@
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
#define CONFIG_TRANSCODING_EXAMPLE 0
#define CONFIG_AVISYNTH 0
#define CONFIG_BZLIB 0
#define CONFIG_CHROMAPRINT 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_DECKLINK 0
#define CONFIG_FREI0R 0
#define CONFIG_GCRYPT 0
#define CONFIG_GMP 0
#define CONFIG_GNUTLS 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_LIBCDIO 0
#define CONFIG_LIBCELT 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBEBUR128 0
#define CONFIG_LIBFDK_AAC 0
#define CONFIG_LIBDRM 0
#define CONFIG_LIBFLITE 0
#define CONFIG_LIBFONTCONFIG 0
#define CONFIG_LIBFREETYPE 0
@ -441,18 +469,15 @@
#define CONFIG_LIBKVAZAAR 0
#define CONFIG_LIBMODPLUG 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSHINE 0
#define CONFIG_LIBSMBCLIENT 0
#define CONFIG_LIBSNAPPY 0
@ -463,52 +488,37 @@
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBTWOLAME 0
#define CONFIG_LIBV4L2 0
#define CONFIG_LIBVIDSTAB 0
#define CONFIG_LIBVO_AMRWBENC 0
#define CONFIG_LIBVMAF 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBWAVPACK 0
#define CONFIG_LIBWEBP 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBX265 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXCB 0
#define CONFIG_LIBXCB_SHM 0
#define CONFIG_LIBXCB_SHAPE 0
#define CONFIG_LIBXCB_XFIXES 0
#define CONFIG_LIBXVID 0
#define CONFIG_LIBXML2 0
#define CONFIG_LIBZIMG 0
#define CONFIG_LIBZMQ 0
#define CONFIG_LIBZVBI 0
#define CONFIG_LZMA 0
#define CONFIG_MEDIACODEC 0
#define CONFIG_NETCDF 0
#define CONFIG_OPENAL 0
#define CONFIG_OPENCL 0
#define CONFIG_OPENGL 0
#define CONFIG_OPENSSL 0
#define CONFIG_SCHANNEL 0
#define CONFIG_SDL 0
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_X11GRAB 0
#define CONFIG_XLIB 0
#define CONFIG_ZLIB 0
#define CONFIG_AUDIOTOOLBOX 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_LIBMFX 0
#define CONFIG_LIBNPP 0
#define CONFIG_MMAL 0
#define CONFIG_NVENC 0
#define CONFIG_OMX 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
@ -547,16 +557,27 @@
#define CONFIG_PIXELUTILS 0
#define CONFIG_NETWORK 0
#define CONFIG_RDFT 0
#define CONFIG_AUTODETECT 0
#define CONFIG_FONTCONFIG 0
#define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
#define CONFIG_RAISE_MAJOR 0
#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
@ -572,21 +593,24 @@
#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 1
#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_IMDCT15 0
#define CONFIG_MDCT15 0
#define CONFIG_INTRAX8 0
#define CONFIG_ISO_MEDIA 0
#define CONFIG_IVIDSP 0
@ -595,12 +619,14 @@
#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
@ -622,13 +648,13 @@
#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_VT_BT2020 0
#define CONFIG_WMA_FREQS 0
#define CONFIG_WMV2DSP 0
#define CONFIG_NULL_BSF 1

Просмотреть файл

@ -1,12 +1,12 @@
/* 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-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm --disable-asm --disable-yasm --cc='gcc -m32'"
#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-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-x86asm"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define CONFIG_THIS_YEAR 2016
#define CONFIG_THIS_YEAR 2017
#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
#define CC_IDENT "gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)"
#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406"
#define av_restrict restrict
#define EXTERN_PREFIX ""
#define EXTERN_ASM
@ -178,11 +178,11 @@
#define HAVE_LOCAL_ALIGNED_16 1
#define HAVE_LOCAL_ALIGNED_32 1
#define HAVE_SIMD_ALIGN_16 0
#define HAVE_SIMD_ALIGN_32 0
#define HAVE_ATOMICS_GCC 1
#define HAVE_ATOMICS_SUNCC 0
#define HAVE_ATOMICS_WIN32 0
#define HAVE_ATOMIC_CAS_PTR 0
#define HAVE_ATOMIC_COMPARE_EXCHANGE 0
#define HAVE_MACHINE_RW_BARRIER 0
#define HAVE_MEMORYBARRIER 0
#define HAVE_MM_EMPTY 0
@ -194,15 +194,16 @@
#define HAVE_CEXP 1
#define HAVE_INLINE_ASM 1
#define HAVE_SYMVER 1
#define HAVE_YASM 0
#define HAVE_X86ASM 0
#define HAVE_BIGENDIAN 0
#define HAVE_FAST_UNALIGNED 0
#define HAVE_ALSA_ASOUNDLIB_H 0
#define HAVE_ALTIVEC_H 0
#define HAVE_ARPA_INET_H 1
#define HAVE_ASM_TYPES_H 1
#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 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -212,7 +213,7 @@
#define HAVE_DIRECT_H 0
#define HAVE_DIRENT_H 1
#define HAVE_DLFCN_H 1
#define HAVE_D3D11_H 0
#define HAVE_DXGIDEBUG_H 0
#define HAVE_DXVA_H 0
#define HAVE_ES2_GL_H 0
#define HAVE_GSM_H 0
@ -221,12 +222,13 @@
#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_SNDIO_H 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_STDATOMIC_H 1
#define HAVE_SYS_MMAN_H 1
@ -280,7 +282,6 @@
#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
@ -319,6 +320,7 @@
#define HAVE_SLEEP 0
#define HAVE_STRERROR_R 1
#define HAVE_SYSCONF 1
#define HAVE_SYSCTL 0
#define HAVE_USLEEP 1
#define HAVE_UTGETOSTYPEFROMSTRING 0
#define HAVE_VIRTUALALLOC 0
@ -327,11 +329,13 @@
#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 0
#define HAVE_EBP_AVAILABLE 1
#define HAVE_EBX_AVAILABLE 1
#define HAVE_GNU_AS 0
@ -348,6 +352,7 @@
#define HAVE_XFORM_ASM 0
#define HAVE_XMM_CLOBBERS 0
#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
@ -364,28 +369,20 @@
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1
#define HAVE_ATOMICS_NATIVE 1
#define HAVE_DOS_PATHS 0
#define HAVE_DXVA2_LIB 0
#define HAVE_DXVA2API_COBJ 0
#define HAVE_LIBC_MSVCRT 0
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 0
#define HAVE_MAKEINFO 0
#define HAVE_MAKEINFO_HTML 0
#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
#define HAVE_PERL 1
#define HAVE_POD2MAN 1
#define HAVE_SDL2 0
#define HAVE_SECTION_DATA_REL_RO 1
#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 HAVE_XLIB 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_PARSERS 1
#define CONFIG_DOC 0
#define CONFIG_HTMLPAGES 0
#define CONFIG_MANPAGES 1
@ -393,13 +390,17 @@
#define CONFIG_TXTPAGES 0
#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
#define CONFIG_AVIO_READING_EXAMPLE 1
#define CONFIG_DECODING_ENCODING_EXAMPLE 0
#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
@ -408,27 +409,55 @@
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
#define CONFIG_TRANSCODING_EXAMPLE 0
#define CONFIG_AVISYNTH 0
#define CONFIG_ALSA 0
#define CONFIG_APPKIT 0
#define CONFIG_AVFOUNDATION 0
#define CONFIG_BZLIB 0
#define CONFIG_CHROMAPRINT 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_DECKLINK 0
#define CONFIG_FREI0R 0
#define CONFIG_GCRYPT 0
#define CONFIG_GMP 0
#define CONFIG_GNUTLS 0
#define CONFIG_COREIMAGE 0
#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 0
#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_LIBCDIO 0
#define CONFIG_LIBCELT 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBEBUR128 0
#define CONFIG_LIBFDK_AAC 0
#define CONFIG_LIBDRM 0
#define CONFIG_LIBFLITE 0
#define CONFIG_LIBFONTCONFIG 0
#define CONFIG_LIBFREETYPE 0
@ -440,18 +469,15 @@
#define CONFIG_LIBKVAZAAR 0
#define CONFIG_LIBMODPLUG 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSHINE 0
#define CONFIG_LIBSMBCLIENT 0
#define CONFIG_LIBSNAPPY 0
@ -462,51 +488,37 @@
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBTWOLAME 0
#define CONFIG_LIBV4L2 0
#define CONFIG_LIBVIDSTAB 0
#define CONFIG_LIBVO_AMRWBENC 0
#define CONFIG_LIBVMAF 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBWAVPACK 0
#define CONFIG_LIBWEBP 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBX265 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXCB 0
#define CONFIG_LIBXCB_SHM 0
#define CONFIG_LIBXCB_SHAPE 0
#define CONFIG_LIBXCB_XFIXES 0
#define CONFIG_LIBXVID 0
#define CONFIG_LIBXML2 0
#define CONFIG_LIBZIMG 0
#define CONFIG_LIBZMQ 0
#define CONFIG_LIBZVBI 0
#define CONFIG_LZMA 0
#define CONFIG_MEDIACODEC 0
#define CONFIG_NETCDF 0
#define CONFIG_OPENAL 0
#define CONFIG_OPENCL 0
#define CONFIG_OPENGL 0
#define CONFIG_OPENSSL 0
#define CONFIG_SCHANNEL 0
#define CONFIG_SDL 0
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_X11GRAB 0
#define CONFIG_XLIB 0
#define CONFIG_ZLIB 0
#define CONFIG_AUDIOTOOLBOX 0
#define CONFIG_CUDA 0
#define CONFIG_CUVID 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_CUDA 1
#define CONFIG_CUVID 1
#define CONFIG_D3D11VA 0
#define CONFIG_DXVA2 0
#define CONFIG_LIBMFX 0
#define CONFIG_LIBNPP 0
#define CONFIG_MMAL 0
#define CONFIG_NVENC 0
#define CONFIG_OMX 0
#define CONFIG_NVENC 1
#define CONFIG_VAAPI 0
#define CONFIG_VDA 0
#define CONFIG_VDPAU 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_V4L2_M2M 1
#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
@ -545,16 +557,27 @@
#define CONFIG_PIXELUTILS 0
#define CONFIG_NETWORK 0
#define CONFIG_RDFT 0
#define CONFIG_AUTODETECT 0
#define CONFIG_FONTCONFIG 0
#define CONFIG_MEMALIGN_HACK 0
#define CONFIG_LINUX_PERF 0
#define CONFIG_MEMORY_POISONING 0
#define CONFIG_NEON_CLOBBER_TEST 0
#define CONFIG_PIC 0
#define CONFIG_POD2MAN 1
#define CONFIG_RAISE_MAJOR 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
@ -570,21 +593,24 @@
#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 1
#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_IMDCT15 0
#define CONFIG_MDCT15 0
#define CONFIG_INTRAX8 0
#define CONFIG_ISO_MEDIA 0
#define CONFIG_IVIDSP 0
@ -593,12 +619,14 @@
#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
@ -620,13 +648,13 @@
#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_VT_BT2020 0
#define CONFIG_WMA_FREQS 0
#define CONFIG_WMV2DSP 0
#define CONFIG_NULL_BSF 1

Просмотреть файл

@ -63,8 +63,8 @@
%define HAVE_MIPSDSP 0
%define HAVE_MIPSDSPR2 0
%define HAVE_MSA 0
%define HAVE_LOONGSON2 1
%define HAVE_LOONGSON3 1
%define HAVE_LOONGSON2 0
%define HAVE_LOONGSON3 0
%define HAVE_MMI 0
%define HAVE_ARMV5TE_EXTERNAL 0
%define HAVE_ARMV6_EXTERNAL 0
@ -162,11 +162,11 @@
%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_ATOMIC_COMPARE_EXCHANGE 0
%define HAVE_MACHINE_RW_BARRIER 0
%define HAVE_MEMORYBARRIER 0
%define HAVE_MM_EMPTY 1
@ -178,15 +178,16 @@
%define HAVE_CEXP 1
%define HAVE_INLINE_ASM 1
%define HAVE_SYMVER 1
%define HAVE_YASM 1
%define HAVE_X86ASM 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 1
%define HAVE_ASM_TYPES_H 1
%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 0
%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -196,7 +197,7 @@
%define HAVE_DIRECT_H 0
%define HAVE_DIRENT_H 1
%define HAVE_DLFCN_H 1
%define HAVE_D3D11_H 0
%define HAVE_DXGIDEBUG_H 0
%define HAVE_DXVA_H 0
%define HAVE_ES2_GL_H 0
%define HAVE_GSM_H 0
@ -205,12 +206,13 @@
%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_SNDIO_H 0
%define HAVE_SOUNDCARD_H 0
%define HAVE_STDATOMIC_H 1
%define HAVE_SYS_MMAN_H 1
@ -264,7 +266,6 @@
%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
@ -312,11 +313,13 @@
%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 0
%define HAVE_EBP_AVAILABLE 1
%define HAVE_EBX_AVAILABLE 1
%define HAVE_GNU_AS 0
@ -333,6 +336,7 @@
%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
@ -349,28 +353,20 @@
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1
%define HAVE_ATOMICS_NATIVE 1
%define HAVE_DOS_PATHS 0
%define HAVE_DXVA2_LIB 0
%define HAVE_DXVA2API_COBJ 0
%define HAVE_LIBC_MSVCRT 0
%define HAVE_LIBDC1394_1 0
%define HAVE_LIBDC1394_2 0
%define HAVE_MAKEINFO 0
%define HAVE_MAKEINFO_HTML 0
%define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
%define HAVE_PERL 1
%define HAVE_POD2MAN 1
%define HAVE_SDL2 0
%define HAVE_SECTION_DATA_REL_RO 1
%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 HAVE_XLIB 0
%define CONFIG_BSFS 0
%define CONFIG_DECODERS 1
%define CONFIG_PARSERS 1
%define CONFIG_DOC 0
%define CONFIG_HTMLPAGES 0
%define CONFIG_MANPAGES 1
@ -378,13 +374,17 @@
%define CONFIG_TXTPAGES 0
%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
%define CONFIG_AVIO_READING_EXAMPLE 1
%define CONFIG_DECODING_ENCODING_EXAMPLE 0
%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
@ -393,27 +393,55 @@
%define CONFIG_SCALING_VIDEO_EXAMPLE 0
%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
%define CONFIG_TRANSCODING_EXAMPLE 0
%define CONFIG_AVISYNTH 0
%define CONFIG_ALSA 1
%define CONFIG_APPKIT 0
%define CONFIG_AVFOUNDATION 0
%define CONFIG_BZLIB 0
%define CONFIG_CHROMAPRINT 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_DECKLINK 0
%define CONFIG_FREI0R 0
%define CONFIG_GCRYPT 0
%define CONFIG_GMP 0
%define CONFIG_GNUTLS 0
%define CONFIG_COREIMAGE 0
%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 1
%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_LIBCDIO 0
%define CONFIG_LIBCELT 0
%define CONFIG_LIBDC1394 0
%define CONFIG_LIBEBUR128 0
%define CONFIG_LIBFDK_AAC 0
%define CONFIG_LIBDRM 0
%define CONFIG_LIBFLITE 0
%define CONFIG_LIBFONTCONFIG 0
%define CONFIG_LIBFREETYPE 0
@ -425,18 +453,15 @@
%define CONFIG_LIBKVAZAAR 0
%define CONFIG_LIBMODPLUG 0
%define CONFIG_LIBMP3LAME 0
%define CONFIG_LIBNUT 0
%define CONFIG_LIBOPENCORE_AMRNB 0
%define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
%define CONFIG_LIBSCHROEDINGER 0
%define CONFIG_LIBSHINE 0
%define CONFIG_LIBSMBCLIENT 0
%define CONFIG_LIBSNAPPY 0
@ -447,52 +472,37 @@
%define CONFIG_LIBTHEORA 0
%define CONFIG_LIBTWOLAME 0
%define CONFIG_LIBV4L2 0
%define CONFIG_LIBVIDSTAB 0
%define CONFIG_LIBVO_AMRWBENC 0
%define CONFIG_LIBVMAF 0
%define CONFIG_LIBVORBIS 0
%define CONFIG_LIBVPX 0
%define CONFIG_LIBWAVPACK 0
%define CONFIG_LIBWEBP 0
%define CONFIG_LIBX264 0
%define CONFIG_LIBX265 0
%define CONFIG_LIBXAVS 0
%define CONFIG_LIBXCB 0
%define CONFIG_LIBXCB_SHM 0
%define CONFIG_LIBXCB_SHAPE 0
%define CONFIG_LIBXCB_XFIXES 0
%define CONFIG_LIBXVID 0
%define CONFIG_LIBXML2 0
%define CONFIG_LIBZIMG 0
%define CONFIG_LIBZMQ 0
%define CONFIG_LIBZVBI 0
%define CONFIG_LZMA 0
%define CONFIG_MEDIACODEC 0
%define CONFIG_NETCDF 0
%define CONFIG_OPENAL 0
%define CONFIG_OPENCL 0
%define CONFIG_OPENGL 0
%define CONFIG_OPENSSL 0
%define CONFIG_SCHANNEL 0
%define CONFIG_SDL 0
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_VIDEOTOOLBOX 0
%define CONFIG_X11GRAB 0
%define CONFIG_XLIB 0
%define CONFIG_ZLIB 0
%define CONFIG_AUDIOTOOLBOX 0
%define CONFIG_CUDA 0
%define CONFIG_CUVID 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_CUDA 1
%define CONFIG_CUVID 1
%define CONFIG_D3D11VA 0
%define CONFIG_DXVA2 0
%define CONFIG_LIBMFX 0
%define CONFIG_LIBNPP 0
%define CONFIG_MMAL 0
%define CONFIG_NVENC 0
%define CONFIG_OMX 0
%define CONFIG_NVENC 1
%define CONFIG_VAAPI 0
%define CONFIG_VDA 0
%define CONFIG_VDPAU 0
%define CONFIG_VIDEOTOOLBOX 0
%define CONFIG_V4L2_M2M 1
%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
@ -531,16 +541,27 @@
%define CONFIG_PIXELUTILS 0
%define CONFIG_NETWORK 0
%define CONFIG_RDFT 0
%define CONFIG_AUTODETECT 0
%define CONFIG_FONTCONFIG 0
%define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
%define CONFIG_RAISE_MAJOR 0
%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
@ -556,21 +577,24 @@
%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 1
%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_IMDCT15 0
%define CONFIG_MDCT15 0
%define CONFIG_INTRAX8 0
%define CONFIG_ISO_MEDIA 0
%define CONFIG_IVIDSP 0
@ -579,12 +603,14 @@
%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
@ -606,13 +632,13 @@
%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_VT_BT2020 0
%define CONFIG_WMA_FREQS 0
%define CONFIG_WMV2DSP 0
%define CONFIG_NULL_BSF 1

Просмотреть файл

@ -1,12 +1,12 @@
/* 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-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm --disable-avx2"
#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-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define CONFIG_THIS_YEAR 2016
#define CONFIG_THIS_YEAR 2017
#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
#define CC_IDENT "gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)"
#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406"
#define av_restrict restrict
#define EXTERN_PREFIX ""
#define EXTERN_ASM
@ -79,8 +79,8 @@
#define HAVE_MIPSDSP 0
#define HAVE_MIPSDSPR2 0
#define HAVE_MSA 0
#define HAVE_LOONGSON2 1
#define HAVE_LOONGSON3 1
#define HAVE_LOONGSON2 0
#define HAVE_LOONGSON3 0
#define HAVE_MMI 0
#define HAVE_ARMV5TE_EXTERNAL 0
#define HAVE_ARMV6_EXTERNAL 0
@ -183,7 +183,6 @@
#define HAVE_ATOMICS_SUNCC 0
#define HAVE_ATOMICS_WIN32 0
#define HAVE_ATOMIC_CAS_PTR 0
#define HAVE_ATOMIC_COMPARE_EXCHANGE 0
#define HAVE_MACHINE_RW_BARRIER 0
#define HAVE_MEMORYBARRIER 0
#define HAVE_MM_EMPTY 1
@ -198,12 +197,13 @@
#define HAVE_X86ASM 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 1
#define HAVE_ASM_TYPES_H 1
#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 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -213,7 +213,7 @@
#define HAVE_DIRECT_H 0
#define HAVE_DIRENT_H 1
#define HAVE_DLFCN_H 1
#define HAVE_D3D11_H 0
#define HAVE_DXGIDEBUG_H 0
#define HAVE_DXVA_H 0
#define HAVE_ES2_GL_H 0
#define HAVE_GSM_H 0
@ -222,12 +222,13 @@
#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_SNDIO_H 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_STDATOMIC_H 1
#define HAVE_SYS_MMAN_H 1
@ -281,7 +282,6 @@
#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
@ -320,6 +320,7 @@
#define HAVE_SLEEP 0
#define HAVE_STRERROR_R 1
#define HAVE_SYSCONF 1
#define HAVE_SYSCTL 0
#define HAVE_USLEEP 1
#define HAVE_UTGETOSTYPEFROMSTRING 0
#define HAVE_VIRTUALALLOC 0
@ -328,11 +329,13 @@
#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 0
#define HAVE_EBP_AVAILABLE 1
#define HAVE_EBX_AVAILABLE 1
#define HAVE_GNU_AS 0
@ -349,6 +352,7 @@
#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
@ -365,28 +369,20 @@
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1
#define HAVE_ATOMICS_NATIVE 1
#define HAVE_DOS_PATHS 0
#define HAVE_DXVA2_LIB 0
#define HAVE_DXVA2API_COBJ 0
#define HAVE_LIBC_MSVCRT 0
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 0
#define HAVE_MAKEINFO 0
#define HAVE_MAKEINFO_HTML 0
#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
#define HAVE_PERL 1
#define HAVE_POD2MAN 1
#define HAVE_SDL2 0
#define HAVE_SECTION_DATA_REL_RO 1
#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 HAVE_XLIB 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_PARSERS 1
#define CONFIG_DOC 0
#define CONFIG_HTMLPAGES 0
#define CONFIG_MANPAGES 1
@ -394,13 +390,17 @@
#define CONFIG_TXTPAGES 0
#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
#define CONFIG_AVIO_READING_EXAMPLE 1
#define CONFIG_DECODING_ENCODING_EXAMPLE 0
#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
@ -409,27 +409,55 @@
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
#define CONFIG_TRANSCODING_EXAMPLE 0
#define CONFIG_AVISYNTH 0
#define CONFIG_ALSA 1
#define CONFIG_APPKIT 0
#define CONFIG_AVFOUNDATION 0
#define CONFIG_BZLIB 0
#define CONFIG_CHROMAPRINT 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_DECKLINK 0
#define CONFIG_FREI0R 0
#define CONFIG_GCRYPT 0
#define CONFIG_GMP 0
#define CONFIG_GNUTLS 0
#define CONFIG_COREIMAGE 0
#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 1
#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_LIBCDIO 0
#define CONFIG_LIBCELT 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBEBUR128 0
#define CONFIG_LIBFDK_AAC 0
#define CONFIG_LIBDRM 0
#define CONFIG_LIBFLITE 0
#define CONFIG_LIBFONTCONFIG 0
#define CONFIG_LIBFREETYPE 0
@ -441,18 +469,15 @@
#define CONFIG_LIBKVAZAAR 0
#define CONFIG_LIBMODPLUG 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSHINE 0
#define CONFIG_LIBSMBCLIENT 0
#define CONFIG_LIBSNAPPY 0
@ -463,52 +488,37 @@
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBTWOLAME 0
#define CONFIG_LIBV4L2 0
#define CONFIG_LIBVIDSTAB 0
#define CONFIG_LIBVO_AMRWBENC 0
#define CONFIG_LIBVMAF 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBWAVPACK 0
#define CONFIG_LIBWEBP 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBX265 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXCB 0
#define CONFIG_LIBXCB_SHM 0
#define CONFIG_LIBXCB_SHAPE 0
#define CONFIG_LIBXCB_XFIXES 0
#define CONFIG_LIBXVID 0
#define CONFIG_LIBXML2 0
#define CONFIG_LIBZIMG 0
#define CONFIG_LIBZMQ 0
#define CONFIG_LIBZVBI 0
#define CONFIG_LZMA 0
#define CONFIG_MEDIACODEC 0
#define CONFIG_NETCDF 0
#define CONFIG_OPENAL 0
#define CONFIG_OPENCL 0
#define CONFIG_OPENGL 0
#define CONFIG_OPENSSL 0
#define CONFIG_SCHANNEL 0
#define CONFIG_SDL 0
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_X11GRAB 0
#define CONFIG_XLIB 0
#define CONFIG_ZLIB 0
#define CONFIG_AUDIOTOOLBOX 0
#define CONFIG_CUDA 0
#define CONFIG_CUVID 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_CUDA 1
#define CONFIG_CUVID 1
#define CONFIG_D3D11VA 0
#define CONFIG_DXVA2 0
#define CONFIG_LIBMFX 0
#define CONFIG_LIBNPP 0
#define CONFIG_MMAL 0
#define CONFIG_NVENC 0
#define CONFIG_OMX 0
#define CONFIG_NVENC 1
#define CONFIG_VAAPI 0
#define CONFIG_VDA 0
#define CONFIG_VDPAU 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_V4L2_M2M 1
#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
@ -547,16 +557,27 @@
#define CONFIG_PIXELUTILS 0
#define CONFIG_NETWORK 0
#define CONFIG_RDFT 0
#define CONFIG_AUTODETECT 0
#define CONFIG_FONTCONFIG 0
#define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
#define CONFIG_RAISE_MAJOR 0
#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
@ -572,21 +593,24 @@
#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 1
#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_IMDCT15 0
#define CONFIG_MDCT15 0
#define CONFIG_INTRAX8 0
#define CONFIG_ISO_MEDIA 0
#define CONFIG_IVIDSP 0
@ -595,12 +619,14 @@
#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
@ -622,13 +648,13 @@
#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_VT_BT2020 0
#define CONFIG_WMA_FREQS 0
#define CONFIG_WMV2DSP 0
#define CONFIG_NULL_BSF 1

Просмотреть файл

@ -63,8 +63,8 @@
%define HAVE_MIPSDSP 0
%define HAVE_MIPSDSPR2 0
%define HAVE_MSA 0
%define HAVE_LOONGSON2 1
%define HAVE_LOONGSON3 1
%define HAVE_LOONGSON2 0
%define HAVE_LOONGSON3 0
%define HAVE_MMI 0
%define HAVE_ARMV5TE_EXTERNAL 0
%define HAVE_ARMV6_EXTERNAL 0
@ -156,37 +156,38 @@
%define HAVE_MMI_INLINE 0
%define HAVE_ALIGNED_STACK 0
%define HAVE_FAST_64BIT 0
%define HAVE_FAST_CLZ 0
%define HAVE_FAST_CLZ 1
%define HAVE_FAST_CMOV 0
%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 0
%define HAVE_ATOMICS_SUNCC 0
%define HAVE_ATOMICS_WIN32 1
%define HAVE_ATOMIC_CAS_PTR 0
%define HAVE_ATOMIC_COMPARE_EXCHANGE 0
%define HAVE_MACHINE_RW_BARRIER 0
%define HAVE_MEMORYBARRIER 1
%define HAVE_MM_EMPTY 1
%define HAVE_RDTSC 1
%define HAVE_SARESTART 0
%define HAVE_SEM_TIMEDWAIT 1
%define HAVE_SEM_TIMEDWAIT 0
%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0
%define HAVE_CABS 0
%define HAVE_CEXP 0
%define HAVE_INLINE_ASM 0
%define HAVE_SYMVER 0
%define HAVE_YASM 1
%define HAVE_X86ASM 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_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 1
%define HAVE_DISPATCH_DISPATCH_H 0
%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -196,7 +197,7 @@
%define HAVE_DIRECT_H 1
%define HAVE_DIRENT_H 0
%define HAVE_DLFCN_H 0
%define HAVE_D3D11_H 1
%define HAVE_DXGIDEBUG_H 1
%define HAVE_DXVA_H 1
%define HAVE_ES2_GL_H 0
%define HAVE_GSM_H 0
@ -205,12 +206,13 @@
%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 0
%define HAVE_SNDIO_H 0
%define HAVE_SOUNDCARD_H 0
%define HAVE_STDATOMIC_H 0
%define HAVE_SYS_MMAN_H 0
@ -264,7 +266,6 @@
%define HAVE_COMMANDLINETOARGVW 1
%define HAVE_COTASKMEMFREE 1
%define HAVE_CRYPTGENRANDOM 1
%define HAVE_DLOPEN 0
%define HAVE_FCNTL 0
%define HAVE_FLT_LIM 1
%define HAVE_FORK 0
@ -284,7 +285,7 @@
%define HAVE_ISATTY 1
%define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
%define HAVE_KBHIT 1
%define HAVE_LOADLIBRARY 0
%define HAVE_LOADLIBRARY 1
%define HAVE_LSTAT 0
%define HAVE_LZO1X_999_COMPRESS 0
%define HAVE_MACH_ABSOLUTE_TIME 0
@ -312,11 +313,13 @@
%define HAVE_OS2THREADS 0
%define HAVE_W32THREADS 1
%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 0
%define HAVE_ATTRIBUTE_PACKED 0
%define HAVE_BLOCKS_EXTENSION 0
%define HAVE_EBP_AVAILABLE 0
%define HAVE_EBX_AVAILABLE 0
%define HAVE_GNU_AS 0
@ -333,12 +336,13 @@
%define HAVE_XFORM_ASM 0
%define HAVE_XMM_CLOBBERS 0
%define HAVE_CONDITION_VARIABLE_PTR 1
%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_MSGHDR_MSG_FLAGS 0
%define HAVE_STRUCT_POLLFD 0
%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0
%define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
@ -349,28 +353,20 @@
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
%define HAVE_ATOMICS_NATIVE 1
%define HAVE_DOS_PATHS 1
%define HAVE_DXVA2_LIB 0
%define HAVE_DXVA2API_COBJ 1
%define HAVE_LIBC_MSVCRT 1
%define HAVE_LIBDC1394_1 0
%define HAVE_LIBDC1394_2 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_SDL2 0
%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 HAVE_XLIB 0
%define CONFIG_BSFS 0
%define CONFIG_DECODERS 1
%define CONFIG_PARSERS 1
%define CONFIG_DOC 0
%define CONFIG_HTMLPAGES 0
%define CONFIG_MANPAGES 1
@ -378,13 +374,17 @@
%define CONFIG_TXTPAGES 1
%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
%define CONFIG_AVIO_READING_EXAMPLE 1
%define CONFIG_DECODING_ENCODING_EXAMPLE 0
%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
@ -393,27 +393,55 @@
%define CONFIG_SCALING_VIDEO_EXAMPLE 0
%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
%define CONFIG_TRANSCODING_EXAMPLE 0
%define CONFIG_AVISYNTH 0
%define CONFIG_ALSA 0
%define CONFIG_APPKIT 0
%define CONFIG_AVFOUNDATION 0
%define CONFIG_BZLIB 0
%define CONFIG_CHROMAPRINT 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_DECKLINK 0
%define CONFIG_FREI0R 0
%define CONFIG_GCRYPT 0
%define CONFIG_GMP 0
%define CONFIG_GNUTLS 0
%define CONFIG_COREIMAGE 0
%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 1
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_SNDIO 0
%define CONFIG_XLIB 1
%define CONFIG_ZLIB 0
%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_LIBCDIO 0
%define CONFIG_LIBCELT 0
%define CONFIG_LIBDC1394 0
%define CONFIG_LIBEBUR128 0
%define CONFIG_LIBFDK_AAC 0
%define CONFIG_LIBDRM 0
%define CONFIG_LIBFLITE 0
%define CONFIG_LIBFONTCONFIG 0
%define CONFIG_LIBFREETYPE 0
@ -425,18 +453,15 @@
%define CONFIG_LIBKVAZAAR 0
%define CONFIG_LIBMODPLUG 0
%define CONFIG_LIBMP3LAME 0
%define CONFIG_LIBNUT 0
%define CONFIG_LIBOPENCORE_AMRNB 0
%define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
%define CONFIG_LIBSCHROEDINGER 0
%define CONFIG_LIBSHINE 0
%define CONFIG_LIBSMBCLIENT 0
%define CONFIG_LIBSNAPPY 0
@ -447,52 +472,37 @@
%define CONFIG_LIBTHEORA 0
%define CONFIG_LIBTWOLAME 0
%define CONFIG_LIBV4L2 0
%define CONFIG_LIBVIDSTAB 0
%define CONFIG_LIBVO_AMRWBENC 0
%define CONFIG_LIBVMAF 0
%define CONFIG_LIBVORBIS 0
%define CONFIG_LIBVPX 0
%define CONFIG_LIBWAVPACK 0
%define CONFIG_LIBWEBP 0
%define CONFIG_LIBX264 0
%define CONFIG_LIBX265 0
%define CONFIG_LIBXAVS 0
%define CONFIG_LIBXCB 0
%define CONFIG_LIBXCB_SHM 0
%define CONFIG_LIBXCB_SHAPE 0
%define CONFIG_LIBXCB_XFIXES 0
%define CONFIG_LIBXVID 0
%define CONFIG_LIBXML2 0
%define CONFIG_LIBZIMG 0
%define CONFIG_LIBZMQ 0
%define CONFIG_LIBZVBI 0
%define CONFIG_LZMA 0
%define CONFIG_MEDIACODEC 0
%define CONFIG_NETCDF 0
%define CONFIG_OPENAL 0
%define CONFIG_OPENCL 0
%define CONFIG_OPENGL 0
%define CONFIG_OPENSSL 0
%define CONFIG_SCHANNEL 1
%define CONFIG_SDL 0
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_VIDEOTOOLBOX 0
%define CONFIG_X11GRAB 0
%define CONFIG_XLIB 0
%define CONFIG_ZLIB 0
%define CONFIG_AUDIOTOOLBOX 0
%define CONFIG_CUDA 0
%define CONFIG_CUVID 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_CUDA 1
%define CONFIG_CUVID 1
%define CONFIG_D3D11VA 0
%define CONFIG_DXVA2 0
%define CONFIG_LIBMFX 0
%define CONFIG_LIBNPP 0
%define CONFIG_MMAL 0
%define CONFIG_NVENC 0
%define CONFIG_OMX 0
%define CONFIG_NVENC 1
%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
@ -531,16 +541,27 @@
%define CONFIG_PIXELUTILS 0
%define CONFIG_NETWORK 0
%define CONFIG_RDFT 0
%define CONFIG_AUTODETECT 0
%define CONFIG_FONTCONFIG 0
%define CONFIG_MEMALIGN_HACK 0
%define CONFIG_LINUX_PERF 0
%define CONFIG_MEMORY_POISONING 0
%define CONFIG_NEON_CLOBBER_TEST 0
%define CONFIG_OSSFUZZ 0
%define CONFIG_PIC 0
%define CONFIG_POD2MAN 1
%define CONFIG_RAISE_MAJOR 0
%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
@ -556,21 +577,24 @@
%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 1
%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_IMDCT15 0
%define CONFIG_MDCT15 0
%define CONFIG_INTRAX8 0
%define CONFIG_ISO_MEDIA 0
%define CONFIG_IVIDSP 0
@ -579,12 +603,14 @@
%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
@ -606,13 +632,13 @@
%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_VT_BT2020 0
%define CONFIG_WMA_FREQS 0
%define CONFIG_WMV2DSP 0
%define CONFIG_NULL_BSF 1

Просмотреть файл

@ -1,12 +1,12 @@
/* 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-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm --toolchain=msvc"
#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 --toolchain=msvc"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define CONFIG_THIS_YEAR 2016
#define CONFIG_THIS_YEAR 2017
#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x86"
#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25508.2 for x86"
#define av_restrict __restrict
#define EXTERN_PREFIX "_"
#define EXTERN_ASM _
@ -79,8 +79,8 @@
#define HAVE_MIPSDSP 0
#define HAVE_MIPSDSPR2 0
#define HAVE_MSA 0
#define HAVE_LOONGSON2 1
#define HAVE_LOONGSON3 1
#define HAVE_LOONGSON2 0
#define HAVE_LOONGSON3 0
#define HAVE_MMI 0
#define HAVE_ARMV5TE_EXTERNAL 0
#define HAVE_ARMV6_EXTERNAL 0
@ -178,31 +178,32 @@
#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 0
#define HAVE_ATOMICS_SUNCC 0
#define HAVE_ATOMICS_WIN32 1
#define HAVE_ATOMIC_CAS_PTR 0
#define HAVE_ATOMIC_COMPARE_EXCHANGE 0
#define HAVE_MACHINE_RW_BARRIER 0
#define HAVE_MEMORYBARRIER 1
#define HAVE_MM_EMPTY 1
#define HAVE_RDTSC 1
#define HAVE_SARESTART 0
#define HAVE_SEM_TIMEDWAIT 1
#define HAVE_SEM_TIMEDWAIT 0
#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0
#define HAVE_CABS 0
#define HAVE_CEXP 0
#define HAVE_INLINE_ASM 0
#define HAVE_SYMVER 0
#define HAVE_YASM 1
#define HAVE_X86ASM 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_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 1
#define HAVE_DISPATCH_DISPATCH_H 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -212,7 +213,7 @@
#define HAVE_DIRECT_H 1
#define HAVE_DIRENT_H 0
#define HAVE_DLFCN_H 0
#define HAVE_D3D11_H 1
#define HAVE_DXGIDEBUG_H 1
#define HAVE_DXVA_H 1
#define HAVE_ES2_GL_H 0
#define HAVE_GSM_H 0
@ -221,12 +222,13 @@
#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 0
#define HAVE_SNDIO_H 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_STDATOMIC_H 0
#define HAVE_SYS_MMAN_H 0
@ -280,7 +282,6 @@
#define HAVE_COMMANDLINETOARGVW 1
#define HAVE_COTASKMEMFREE 1
#define HAVE_CRYPTGENRANDOM 1
#define HAVE_DLOPEN 0
#define HAVE_FCNTL 0
#define HAVE_FLT_LIM 1
#define HAVE_FORK 0
@ -300,7 +301,7 @@
#define HAVE_ISATTY 1
#define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
#define HAVE_KBHIT 1
#define HAVE_LOADLIBRARY 0
#define HAVE_LOADLIBRARY 1
#define HAVE_LSTAT 0
#define HAVE_LZO1X_999_COMPRESS 0
#define HAVE_MACH_ABSOLUTE_TIME 0
@ -319,6 +320,7 @@
#define HAVE_SLEEP 1
#define HAVE_STRERROR_R 0
#define HAVE_SYSCONF 0
#define HAVE_SYSCTL 0
#define HAVE_USLEEP 0
#define HAVE_UTGETOSTYPEFROMSTRING 0
#define HAVE_VIRTUALALLOC 1
@ -327,11 +329,13 @@
#define HAVE_OS2THREADS 0
#define HAVE_W32THREADS 1
#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 0
#define HAVE_ATTRIBUTE_PACKED 0
#define HAVE_BLOCKS_EXTENSION 0
#define HAVE_EBP_AVAILABLE 0
#define HAVE_EBX_AVAILABLE 0
#define HAVE_GNU_AS 0
@ -348,12 +352,13 @@
#define HAVE_XFORM_ASM 0
#define HAVE_XMM_CLOBBERS 0
#define HAVE_CONDITION_VARIABLE_PTR 1
#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_MSGHDR_MSG_FLAGS 0
#define HAVE_STRUCT_POLLFD 0
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0
#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
@ -364,28 +369,20 @@
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
#define HAVE_ATOMICS_NATIVE 1
#define HAVE_DOS_PATHS 1
#define HAVE_DXVA2_LIB 0
#define HAVE_DXVA2API_COBJ 1
#define HAVE_LIBC_MSVCRT 1
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 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_SDL2 0
#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 HAVE_XLIB 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_PARSERS 1
#define CONFIG_DOC 0
#define CONFIG_HTMLPAGES 0
#define CONFIG_MANPAGES 1
@ -393,13 +390,17 @@
#define CONFIG_TXTPAGES 1
#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
#define CONFIG_AVIO_READING_EXAMPLE 1
#define CONFIG_DECODING_ENCODING_EXAMPLE 0
#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
@ -408,27 +409,55 @@
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
#define CONFIG_TRANSCODING_EXAMPLE 0
#define CONFIG_AVISYNTH 0
#define CONFIG_ALSA 0
#define CONFIG_APPKIT 0
#define CONFIG_AVFOUNDATION 0
#define CONFIG_BZLIB 0
#define CONFIG_CHROMAPRINT 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_DECKLINK 0
#define CONFIG_FREI0R 0
#define CONFIG_GCRYPT 0
#define CONFIG_GMP 0
#define CONFIG_GNUTLS 0
#define CONFIG_COREIMAGE 0
#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 1
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_SNDIO 0
#define CONFIG_XLIB 1
#define CONFIG_ZLIB 0
#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_LIBCDIO 0
#define CONFIG_LIBCELT 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBEBUR128 0
#define CONFIG_LIBFDK_AAC 0
#define CONFIG_LIBDRM 0
#define CONFIG_LIBFLITE 0
#define CONFIG_LIBFONTCONFIG 0
#define CONFIG_LIBFREETYPE 0
@ -440,18 +469,15 @@
#define CONFIG_LIBKVAZAAR 0
#define CONFIG_LIBMODPLUG 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSHINE 0
#define CONFIG_LIBSMBCLIENT 0
#define CONFIG_LIBSNAPPY 0
@ -462,52 +488,37 @@
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBTWOLAME 0
#define CONFIG_LIBV4L2 0
#define CONFIG_LIBVIDSTAB 0
#define CONFIG_LIBVO_AMRWBENC 0
#define CONFIG_LIBVMAF 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBWAVPACK 0
#define CONFIG_LIBWEBP 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBX265 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXCB 0
#define CONFIG_LIBXCB_SHM 0
#define CONFIG_LIBXCB_SHAPE 0
#define CONFIG_LIBXCB_XFIXES 0
#define CONFIG_LIBXVID 0
#define CONFIG_LIBXML2 0
#define CONFIG_LIBZIMG 0
#define CONFIG_LIBZMQ 0
#define CONFIG_LIBZVBI 0
#define CONFIG_LZMA 0
#define CONFIG_MEDIACODEC 0
#define CONFIG_NETCDF 0
#define CONFIG_OPENAL 0
#define CONFIG_OPENCL 0
#define CONFIG_OPENGL 0
#define CONFIG_OPENSSL 0
#define CONFIG_SCHANNEL 1
#define CONFIG_SDL 0
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_X11GRAB 0
#define CONFIG_XLIB 0
#define CONFIG_ZLIB 0
#define CONFIG_AUDIOTOOLBOX 0
#define CONFIG_CUDA 0
#define CONFIG_CUVID 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_CUDA 1
#define CONFIG_CUVID 1
#define CONFIG_D3D11VA 0
#define CONFIG_DXVA2 0
#define CONFIG_LIBMFX 0
#define CONFIG_LIBNPP 0
#define CONFIG_MMAL 0
#define CONFIG_NVENC 0
#define CONFIG_OMX 0
#define CONFIG_NVENC 1
#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
@ -546,16 +557,27 @@
#define CONFIG_PIXELUTILS 0
#define CONFIG_NETWORK 0
#define CONFIG_RDFT 0
#define CONFIG_AUTODETECT 0
#define CONFIG_FONTCONFIG 0
#define CONFIG_MEMALIGN_HACK 0
#define CONFIG_LINUX_PERF 0
#define CONFIG_MEMORY_POISONING 0
#define CONFIG_NEON_CLOBBER_TEST 0
#define CONFIG_OSSFUZZ 0
#define CONFIG_PIC 0
#define CONFIG_POD2MAN 1
#define CONFIG_RAISE_MAJOR 0
#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
@ -571,21 +593,24 @@
#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 1
#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_IMDCT15 0
#define CONFIG_MDCT15 0
#define CONFIG_INTRAX8 0
#define CONFIG_ISO_MEDIA 0
#define CONFIG_IVIDSP 0
@ -594,12 +619,14 @@
#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
@ -621,13 +648,13 @@
#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_VT_BT2020 0
#define CONFIG_WMA_FREQS 0
#define CONFIG_WMV2DSP 0
#define CONFIG_NULL_BSF 1

Просмотреть файл

@ -63,8 +63,8 @@
%define HAVE_MIPSDSP 0
%define HAVE_MIPSDSPR2 0
%define HAVE_MSA 0
%define HAVE_LOONGSON2 1
%define HAVE_LOONGSON3 1
%define HAVE_LOONGSON2 0
%define HAVE_LOONGSON3 0
%define HAVE_MMI 0
%define HAVE_ARMV5TE_EXTERNAL 0
%define HAVE_ARMV6_EXTERNAL 0
@ -162,31 +162,32 @@
%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 0
%define HAVE_ATOMICS_SUNCC 0
%define HAVE_ATOMICS_WIN32 1
%define HAVE_ATOMIC_CAS_PTR 0
%define HAVE_ATOMIC_COMPARE_EXCHANGE 0
%define HAVE_MACHINE_RW_BARRIER 0
%define HAVE_MEMORYBARRIER 1
%define HAVE_MM_EMPTY 0
%define HAVE_RDTSC 1
%define HAVE_SARESTART 0
%define HAVE_SEM_TIMEDWAIT 1
%define HAVE_SEM_TIMEDWAIT 0
%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0
%define HAVE_CABS 0
%define HAVE_CEXP 0
%define HAVE_INLINE_ASM 0
%define HAVE_SYMVER 0
%define HAVE_YASM 1
%define HAVE_X86ASM 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_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 1
%define HAVE_DISPATCH_DISPATCH_H 0
%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -196,7 +197,7 @@
%define HAVE_DIRECT_H 1
%define HAVE_DIRENT_H 0
%define HAVE_DLFCN_H 0
%define HAVE_D3D11_H 1
%define HAVE_DXGIDEBUG_H 1
%define HAVE_DXVA_H 1
%define HAVE_ES2_GL_H 0
%define HAVE_GSM_H 0
@ -205,12 +206,13 @@
%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 0
%define HAVE_SNDIO_H 0
%define HAVE_SOUNDCARD_H 0
%define HAVE_STDATOMIC_H 0
%define HAVE_SYS_MMAN_H 0
@ -264,7 +266,6 @@
%define HAVE_COMMANDLINETOARGVW 1
%define HAVE_COTASKMEMFREE 1
%define HAVE_CRYPTGENRANDOM 1
%define HAVE_DLOPEN 0
%define HAVE_FCNTL 0
%define HAVE_FLT_LIM 1
%define HAVE_FORK 0
@ -284,7 +285,7 @@
%define HAVE_ISATTY 1
%define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
%define HAVE_KBHIT 1
%define HAVE_LOADLIBRARY 0
%define HAVE_LOADLIBRARY 1
%define HAVE_LSTAT 0
%define HAVE_LZO1X_999_COMPRESS 0
%define HAVE_MACH_ABSOLUTE_TIME 0
@ -312,11 +313,13 @@
%define HAVE_OS2THREADS 0
%define HAVE_W32THREADS 1
%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 0
%define HAVE_ATTRIBUTE_PACKED 0
%define HAVE_BLOCKS_EXTENSION 0
%define HAVE_EBP_AVAILABLE 0
%define HAVE_EBX_AVAILABLE 0
%define HAVE_GNU_AS 0
@ -333,12 +336,13 @@
%define HAVE_XFORM_ASM 0
%define HAVE_XMM_CLOBBERS 0
%define HAVE_CONDITION_VARIABLE_PTR 1
%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_MSGHDR_MSG_FLAGS 0
%define HAVE_STRUCT_POLLFD 0
%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0
%define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
@ -349,28 +353,20 @@
%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
%define HAVE_ATOMICS_NATIVE 1
%define HAVE_DOS_PATHS 1
%define HAVE_DXVA2_LIB 0
%define HAVE_DXVA2API_COBJ 1
%define HAVE_LIBC_MSVCRT 1
%define HAVE_LIBDC1394_1 0
%define HAVE_LIBDC1394_2 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_SDL2 0
%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 HAVE_XLIB 0
%define CONFIG_BSFS 0
%define CONFIG_DECODERS 1
%define CONFIG_PARSERS 1
%define CONFIG_DOC 0
%define CONFIG_HTMLPAGES 0
%define CONFIG_MANPAGES 1
@ -378,13 +374,17 @@
%define CONFIG_TXTPAGES 1
%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
%define CONFIG_AVIO_READING_EXAMPLE 1
%define CONFIG_DECODING_ENCODING_EXAMPLE 0
%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
@ -393,27 +393,55 @@
%define CONFIG_SCALING_VIDEO_EXAMPLE 0
%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
%define CONFIG_TRANSCODING_EXAMPLE 0
%define CONFIG_AVISYNTH 0
%define CONFIG_ALSA 0
%define CONFIG_APPKIT 0
%define CONFIG_AVFOUNDATION 0
%define CONFIG_BZLIB 0
%define CONFIG_CHROMAPRINT 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_DECKLINK 0
%define CONFIG_FREI0R 0
%define CONFIG_GCRYPT 0
%define CONFIG_GMP 0
%define CONFIG_GNUTLS 0
%define CONFIG_COREIMAGE 0
%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 1
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_SNDIO 0
%define CONFIG_XLIB 1
%define CONFIG_ZLIB 0
%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_LIBCDIO 0
%define CONFIG_LIBCELT 0
%define CONFIG_LIBDC1394 0
%define CONFIG_LIBEBUR128 0
%define CONFIG_LIBFDK_AAC 0
%define CONFIG_LIBDRM 0
%define CONFIG_LIBFLITE 0
%define CONFIG_LIBFONTCONFIG 0
%define CONFIG_LIBFREETYPE 0
@ -425,18 +453,15 @@
%define CONFIG_LIBKVAZAAR 0
%define CONFIG_LIBMODPLUG 0
%define CONFIG_LIBMP3LAME 0
%define CONFIG_LIBNUT 0
%define CONFIG_LIBOPENCORE_AMRNB 0
%define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
%define CONFIG_LIBSCHROEDINGER 0
%define CONFIG_LIBSHINE 0
%define CONFIG_LIBSMBCLIENT 0
%define CONFIG_LIBSNAPPY 0
@ -447,52 +472,37 @@
%define CONFIG_LIBTHEORA 0
%define CONFIG_LIBTWOLAME 0
%define CONFIG_LIBV4L2 0
%define CONFIG_LIBVIDSTAB 0
%define CONFIG_LIBVO_AMRWBENC 0
%define CONFIG_LIBVMAF 0
%define CONFIG_LIBVORBIS 0
%define CONFIG_LIBVPX 0
%define CONFIG_LIBWAVPACK 0
%define CONFIG_LIBWEBP 0
%define CONFIG_LIBX264 0
%define CONFIG_LIBX265 0
%define CONFIG_LIBXAVS 0
%define CONFIG_LIBXCB 0
%define CONFIG_LIBXCB_SHM 0
%define CONFIG_LIBXCB_SHAPE 0
%define CONFIG_LIBXCB_XFIXES 0
%define CONFIG_LIBXVID 0
%define CONFIG_LIBXML2 0
%define CONFIG_LIBZIMG 0
%define CONFIG_LIBZMQ 0
%define CONFIG_LIBZVBI 0
%define CONFIG_LZMA 0
%define CONFIG_MEDIACODEC 0
%define CONFIG_NETCDF 0
%define CONFIG_OPENAL 0
%define CONFIG_OPENCL 0
%define CONFIG_OPENGL 0
%define CONFIG_OPENSSL 0
%define CONFIG_SCHANNEL 1
%define CONFIG_SDL 0
%define CONFIG_SDL2 0
%define CONFIG_SECURETRANSPORT 0
%define CONFIG_VIDEOTOOLBOX 0
%define CONFIG_X11GRAB 0
%define CONFIG_XLIB 0
%define CONFIG_ZLIB 0
%define CONFIG_AUDIOTOOLBOX 0
%define CONFIG_CUDA 0
%define CONFIG_CUVID 0
%define CONFIG_CRYSTALHD 0
%define CONFIG_CUDA 1
%define CONFIG_CUVID 1
%define CONFIG_D3D11VA 0
%define CONFIG_DXVA2 0
%define CONFIG_LIBMFX 0
%define CONFIG_LIBNPP 0
%define CONFIG_MMAL 0
%define CONFIG_NVENC 0
%define CONFIG_OMX 0
%define CONFIG_NVENC 1
%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
@ -531,16 +541,27 @@
%define CONFIG_PIXELUTILS 0
%define CONFIG_NETWORK 0
%define CONFIG_RDFT 0
%define CONFIG_AUTODETECT 0
%define CONFIG_FONTCONFIG 0
%define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
%define CONFIG_RAISE_MAJOR 0
%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
@ -556,21 +577,24 @@
%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 1
%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_IMDCT15 0
%define CONFIG_MDCT15 0
%define CONFIG_INTRAX8 0
%define CONFIG_ISO_MEDIA 0
%define CONFIG_IVIDSP 0
@ -579,12 +603,14 @@
%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
@ -606,13 +632,13 @@
%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_VT_BT2020 0
%define CONFIG_WMA_FREQS 0
%define CONFIG_WMV2DSP 0
%define CONFIG_NULL_BSF 1

Просмотреть файл

@ -1,12 +1,12 @@
/* 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-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm --toolchain=msvc"
#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-yasm --toolchain=msvc"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define CONFIG_THIS_YEAR 2016
#define CONFIG_THIS_YEAR 2017
#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64"
#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25508.2 for x64"
#define av_restrict __restrict
#define EXTERN_PREFIX ""
#define EXTERN_ASM
@ -79,8 +79,8 @@
#define HAVE_MIPSDSP 0
#define HAVE_MIPSDSPR2 0
#define HAVE_MSA 0
#define HAVE_LOONGSON2 1
#define HAVE_LOONGSON3 1
#define HAVE_LOONGSON2 0
#define HAVE_LOONGSON3 0
#define HAVE_MMI 0
#define HAVE_ARMV5TE_EXTERNAL 0
#define HAVE_ARMV6_EXTERNAL 0
@ -178,31 +178,32 @@
#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 0
#define HAVE_ATOMICS_SUNCC 0
#define HAVE_ATOMICS_WIN32 1
#define HAVE_ATOMIC_CAS_PTR 0
#define HAVE_ATOMIC_COMPARE_EXCHANGE 0
#define HAVE_MACHINE_RW_BARRIER 0
#define HAVE_MEMORYBARRIER 1
#define HAVE_MM_EMPTY 0
#define HAVE_RDTSC 1
#define HAVE_SARESTART 0
#define HAVE_SEM_TIMEDWAIT 1
#define HAVE_SEM_TIMEDWAIT 0
#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0
#define HAVE_CABS 0
#define HAVE_CEXP 0
#define HAVE_INLINE_ASM 0
#define HAVE_SYMVER 0
#define HAVE_YASM 1
#define HAVE_X86ASM 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_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 1
#define HAVE_DISPATCH_DISPATCH_H 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
@ -212,7 +213,7 @@
#define HAVE_DIRECT_H 1
#define HAVE_DIRENT_H 0
#define HAVE_DLFCN_H 0
#define HAVE_D3D11_H 1
#define HAVE_DXGIDEBUG_H 1
#define HAVE_DXVA_H 1
#define HAVE_ES2_GL_H 0
#define HAVE_GSM_H 0
@ -221,12 +222,13 @@
#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 0
#define HAVE_SNDIO_H 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_STDATOMIC_H 0
#define HAVE_SYS_MMAN_H 0
@ -280,7 +282,6 @@
#define HAVE_COMMANDLINETOARGVW 1
#define HAVE_COTASKMEMFREE 1
#define HAVE_CRYPTGENRANDOM 1
#define HAVE_DLOPEN 0
#define HAVE_FCNTL 0
#define HAVE_FLT_LIM 1
#define HAVE_FORK 0
@ -300,7 +301,7 @@
#define HAVE_ISATTY 1
#define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
#define HAVE_KBHIT 1
#define HAVE_LOADLIBRARY 0
#define HAVE_LOADLIBRARY 1
#define HAVE_LSTAT 0
#define HAVE_LZO1X_999_COMPRESS 0
#define HAVE_MACH_ABSOLUTE_TIME 0
@ -327,11 +328,13 @@
#define HAVE_OS2THREADS 0
#define HAVE_W32THREADS 1
#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 0
#define HAVE_ATTRIBUTE_PACKED 0
#define HAVE_BLOCKS_EXTENSION 0
#define HAVE_EBP_AVAILABLE 0
#define HAVE_EBX_AVAILABLE 0
#define HAVE_GNU_AS 0
@ -348,12 +351,13 @@
#define HAVE_XFORM_ASM 0
#define HAVE_XMM_CLOBBERS 0
#define HAVE_CONDITION_VARIABLE_PTR 1
#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_MSGHDR_MSG_FLAGS 0
#define HAVE_STRUCT_POLLFD 0
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0
#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
@ -364,28 +368,20 @@
#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
#define HAVE_ATOMICS_NATIVE 1
#define HAVE_DOS_PATHS 1
#define HAVE_DXVA2_LIB 0
#define HAVE_DXVA2API_COBJ 1
#define HAVE_LIBC_MSVCRT 1
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 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_SDL2 0
#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 HAVE_XLIB 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_PARSERS 1
#define CONFIG_DOC 0
#define CONFIG_HTMLPAGES 0
#define CONFIG_MANPAGES 1
@ -393,13 +389,17 @@
#define CONFIG_TXTPAGES 1
#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1
#define CONFIG_AVIO_READING_EXAMPLE 1
#define CONFIG_DECODING_ENCODING_EXAMPLE 0
#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
@ -408,27 +408,55 @@
#define CONFIG_SCALING_VIDEO_EXAMPLE 0
#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
#define CONFIG_TRANSCODING_EXAMPLE 0
#define CONFIG_AVISYNTH 0
#define CONFIG_ALSA 0
#define CONFIG_APPKIT 0
#define CONFIG_AVFOUNDATION 0
#define CONFIG_BZLIB 0
#define CONFIG_CHROMAPRINT 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_DECKLINK 0
#define CONFIG_FREI0R 0
#define CONFIG_GCRYPT 0
#define CONFIG_GMP 0
#define CONFIG_GNUTLS 0
#define CONFIG_COREIMAGE 0
#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 1
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_SNDIO 0
#define CONFIG_XLIB 1
#define CONFIG_ZLIB 0
#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_LIBCDIO 0
#define CONFIG_LIBCELT 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBEBUR128 0
#define CONFIG_LIBFDK_AAC 0
#define CONFIG_LIBDRM 0
#define CONFIG_LIBFLITE 0
#define CONFIG_LIBFONTCONFIG 0
#define CONFIG_LIBFREETYPE 0
@ -440,18 +468,15 @@
#define CONFIG_LIBKVAZAAR 0
#define CONFIG_LIBMODPLUG 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 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_LIBRUBBERBAND 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSHINE 0
#define CONFIG_LIBSMBCLIENT 0
#define CONFIG_LIBSNAPPY 0
@ -462,52 +487,37 @@
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBTWOLAME 0
#define CONFIG_LIBV4L2 0
#define CONFIG_LIBVIDSTAB 0
#define CONFIG_LIBVO_AMRWBENC 0
#define CONFIG_LIBVMAF 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBWAVPACK 0
#define CONFIG_LIBWEBP 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBX265 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXCB 0
#define CONFIG_LIBXCB_SHM 0
#define CONFIG_LIBXCB_SHAPE 0
#define CONFIG_LIBXCB_XFIXES 0
#define CONFIG_LIBXVID 0
#define CONFIG_LIBXML2 0
#define CONFIG_LIBZIMG 0
#define CONFIG_LIBZMQ 0
#define CONFIG_LIBZVBI 0
#define CONFIG_LZMA 0
#define CONFIG_MEDIACODEC 0
#define CONFIG_NETCDF 0
#define CONFIG_OPENAL 0
#define CONFIG_OPENCL 0
#define CONFIG_OPENGL 0
#define CONFIG_OPENSSL 0
#define CONFIG_SCHANNEL 1
#define CONFIG_SDL 0
#define CONFIG_SDL2 0
#define CONFIG_SECURETRANSPORT 0
#define CONFIG_VIDEOTOOLBOX 0
#define CONFIG_X11GRAB 0
#define CONFIG_XLIB 0
#define CONFIG_ZLIB 0
#define CONFIG_AUDIOTOOLBOX 0
#define CONFIG_CUDA 0
#define CONFIG_CUVID 0
#define CONFIG_CRYSTALHD 0
#define CONFIG_CUDA 1
#define CONFIG_CUVID 1
#define CONFIG_D3D11VA 0
#define CONFIG_DXVA2 0
#define CONFIG_LIBMFX 0
#define CONFIG_LIBNPP 0
#define CONFIG_MMAL 0
#define CONFIG_NVENC 0
#define CONFIG_OMX 0
#define CONFIG_NVENC 1
#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
@ -546,16 +556,27 @@
#define CONFIG_PIXELUTILS 0
#define CONFIG_NETWORK 0
#define CONFIG_RDFT 0
#define CONFIG_AUTODETECT 0
#define CONFIG_FONTCONFIG 0
#define CONFIG_MEMALIGN_HACK 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_POD2MAN 1
#define CONFIG_RAISE_MAJOR 0
#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
@ -571,21 +592,24 @@
#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 1
#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_IMDCT15 0
#define CONFIG_MDCT15 0
#define CONFIG_INTRAX8 0
#define CONFIG_ISO_MEDIA 0
#define CONFIG_IVIDSP 0
@ -594,12 +618,14 @@
#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
@ -621,13 +647,13 @@
#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_VT_BT2020 0
#define CONFIG_WMA_FREQS 0
#define CONFIG_WMV2DSP 0
#define CONFIG_NULL_BSF 1

Просмотреть файл

@ -87,27 +87,27 @@ FindData(const MetaData* aMetaData, uint32_t aKey, mozilla::MediaByteBuffer* aDe
return FindData(aMetaData, aKey, static_cast<nsTArray<uint8_t>*>(aDest));
}
Result<Ok, nsresult>
mozilla::Result<mozilla::Ok, nsresult>
CryptoFile::DoUpdate(const uint8_t* aData, size_t aLength)
{
BufferReader reader(aData, aLength);
while (reader.Remaining()) {
PsshInfo psshInfo;
if (!reader.ReadArray(psshInfo.uuid, 16)) {
return Err(NS_ERROR_FAILURE);
return mozilla::Err(NS_ERROR_FAILURE);
}
if (!reader.CanReadType<uint32_t>()) {
return Err(NS_ERROR_FAILURE);
return mozilla::Err(NS_ERROR_FAILURE);
}
auto length = reader.ReadType<uint32_t>();
if (!reader.ReadArray(psshInfo.data, length)) {
return Err(NS_ERROR_FAILURE);
return mozilla::Err(NS_ERROR_FAILURE);
}
pssh.AppendElement(psshInfo);
}
return Ok();
return mozilla::Ok();
}
static void

Просмотреть файл

@ -4,6 +4,7 @@
#include "mozilla/ArrayUtils.h"
#include "mozilla/PodOperations.h"
#include "mozilla/ResultExtensions.h"
#include "mp4_demuxer/AnnexB.h"
#include "mp4_demuxer/BitReader.h"
#include "mp4_demuxer/BufferReader.h"

Просмотреть файл

@ -447,7 +447,7 @@ Moof::Moof(Box& aBox, Trex& aTrex, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, Sinf&
int64_t endDecodeTime = decodeOffset.isOk() & offsetOffset.isOk() ?
decodeOffset.unwrap() + offsetOffset.unwrap() : 0;
int64_t decodeDuration = endDecodeTime - mIndex[0].mDecodeTime;
double adjust = (double)decodeDuration / presentationDuration;
double adjust = !!presentationDuration ? (double)decodeDuration / presentationDuration : 0;
int64_t dtsOffset = mIndex[0].mDecodeTime;
int64_t compositionDuration = 0;
// Adjust the dts, ensuring that the new adjusted dts will never be greater

Просмотреть файл

@ -5,6 +5,9 @@
#ifndef MP4_DEMUXER_ANNEX_B_H_
#define MP4_DEMUXER_ANNEX_B_H_
#include "mozilla/Result.h"
#include "ErrorList.h"
template <class T> struct already_AddRefed;
namespace mozilla {

Просмотреть файл

@ -7,9 +7,10 @@
#include "MediaData.h"
#include "MediaInfo.h"
#include "mozilla/RefPtr.h"
#include "mozilla/Result.h"
#include "mozilla/Types.h"
#include "mozilla/Vector.h"
#include "mozilla/RefPtr.h"
#include "nsString.h"
#include "nsTArray.h"
#include "nsString.h"

Просмотреть файл

@ -3498,8 +3498,8 @@ public class BrowserApp extends GeckoApp
}
@Override // GeckoView.ContentListener
public void onFullScreen(final GeckoView view, final boolean fullscreen) {
super.onFullScreen(view, fullscreen);
public void onFullScreen(final GeckoSession session, final boolean fullscreen) {
super.onFullScreen(session, fullscreen);
if (fullscreen) {
mDynamicToolbar.setVisible(false, VisibilityTransition.IMMEDIATE);
@ -3510,10 +3510,6 @@ public class BrowserApp extends GeckoApp
}
}
@Override
public void onContextMenu(GeckoView view, int screenX, int screenY,
String uri, String elementSrc) {}
@Override
public boolean onPrepareOptionsMenu(Menu aMenu) {
if (aMenu == null)

Просмотреть файл

@ -114,7 +114,7 @@ public abstract class GeckoApp extends GeckoActivity
BundleEventListener,
GeckoMenu.Callback,
GeckoMenu.MenuPresenter,
GeckoView.ContentListener,
GeckoSession.ContentListener,
ScreenOrientationDelegate,
Tabs.OnTabsChangedListener,
ViewTreeObserver.OnGlobalLayoutListener {
@ -858,12 +858,12 @@ public abstract class GeckoApp extends GeckoActivity
mLayerView.requestRender();
}
@Override // GeckoView.ContentListener
public void onTitleChange(final GeckoView view, final String title) {
@Override // GeckoSession.ContentListener
public void onTitleChange(final GeckoSession session, final String title) {
}
@Override // GeckoView.ContentListener
public void onFullScreen(final GeckoView view, final boolean fullScreen) {
@Override // GeckoSession.ContentListener
public void onFullScreen(final GeckoSession session, final boolean fullScreen) {
if (fullScreen) {
SnackbarBuilder.builder(this)
.message(R.string.fullscreen_warning)
@ -873,11 +873,17 @@ public abstract class GeckoApp extends GeckoActivity
ActivityUtils.setFullScreen(this, fullScreen);
}
@Override
public void onContextMenu(final GeckoSession session, final int screenX,
final int screenY, final String uri,
final String elementSrc) {
}
protected void setFullScreen(final boolean fullscreen) {
ThreadUtils.postToUiThread(new Runnable() {
@Override
public void run() {
onFullScreen(mLayerView, fullscreen);
onFullScreen(mLayerView.getSession(), fullscreen);
}
});
}
@ -1040,10 +1046,14 @@ public abstract class GeckoApp extends GeckoActivity
mMainLayout = (RelativeLayout) findViewById(R.id.main_layout);
mLayerView = (GeckoView) findViewById(R.id.layer_view);
mLayerView.setChromeUri("chrome://browser/content/browser.xul");
mLayerView.setContentListener(this);
final GeckoSession session = new GeckoSession();
mLayerView.setSession(session);
mLayerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
session.getSettings().setString(GeckoSessionSettings.CHROME_URI,
"chrome://browser/content/browser.xul");
session.setContentListener(this);
GeckoAccessibility.setDelegate(mLayerView);
getAppEventDispatcher().registerGeckoThreadListener(this,

Просмотреть файл

@ -1,27 +0,0 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* vim: ts=4 sw=4 expandtab:
* 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/. */
package org.mozilla.gecko;
import org.mozilla.gecko.annotation.WrapForJNI;
import org.mozilla.gecko.GeckoThread;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.ScreenManagerHelper;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
public class PresentationView extends GeckoView {
private static final String LOGTAG = "PresentationView";
private static final String PRESENTATION_VIEW_URI = "chrome://browser/content/PresentationView.xul";
public PresentationView(Context context, String deviceId, int screenId) {
super(context);
this.mChromeUri = PRESENTATION_VIEW_URI + "#" + deviceId;
this.mScreenId = screenId;
}
}

Просмотреть файл

@ -6,15 +6,10 @@
package org.mozilla.gecko;
import org.mozilla.gecko.AppConstants.Versions;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.PresentationView;
import org.mozilla.gecko.R;
import org.mozilla.gecko.GeckoSession;
import org.mozilla.gecko.GeckoSessionSettings;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.ScreenManagerHelper;
import org.mozilla.gecko.annotation.JNITarget;
import org.mozilla.gecko.annotation.ReflectionTarget;
import org.mozilla.gecko.annotation.WrapForJNI;
import org.mozilla.gecko.gfx.LayerView;
import com.google.android.gms.cast.CastMediaControlIntent;
import com.google.android.gms.cast.CastPresentation;
@ -104,9 +99,11 @@ public class RemotePresentationService extends CastRemoteDisplayLocalService {
}
class VirtualPresentation extends CastPresentation {
private final String LOGTAG = "VirtualPresentation";
private static final String LOGTAG = "VirtualPresentation";
private static final String PRESENTATION_VIEW_URI = "chrome://browser/content/PresentationView.xul";
private RelativeLayout layout;
private PresentationView view;
private GeckoView view;
private String deviceId;
private int screenId;
@ -127,8 +124,15 @@ class VirtualPresentation extends CastPresentation {
* resources.
*/
// Create new PresentationView
view = new PresentationView(getContext(), deviceId, screenId);
// Create new GeckoView
view = new GeckoView(getContext());
final GeckoSession session = new GeckoSession();
session.getSettings().setString(GeckoSessionSettings.CHROME_URI,
PRESENTATION_VIEW_URI + "#" + deviceId);
session.getSettings().setInt(GeckoSessionSettings.SCREEN_ID, screenId);
view.setSession(session);
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));

Просмотреть файл

@ -29,7 +29,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoView.ProgressListener.SecurityInformation;
import org.mozilla.gecko.GeckoSession.ProgressListener.SecurityInformation;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SiteIdentity;
import org.mozilla.gecko.Tab;

Просмотреть файл

@ -42,8 +42,9 @@ import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.FormAssistPopup;
import org.mozilla.gecko.GeckoAccessibility;
import org.mozilla.gecko.GeckoSharedPrefs;
import org.mozilla.gecko.GeckoSession;
import org.mozilla.gecko.GeckoSessionSettings;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoViewSettings;
import org.mozilla.gecko.preferences.GeckoPreferences;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SnackbarBuilder;
@ -72,9 +73,9 @@ import java.util.List;
public class CustomTabsActivity extends AppCompatActivity
implements ActionModePresenter,
GeckoMenu.Callback,
GeckoView.ContentListener,
GeckoView.NavigationListener,
GeckoView.ProgressListener {
GeckoSession.ContentListener,
GeckoSession.NavigationListener,
GeckoSession.ProgressListener {
private static final String LOGTAG = "CustomTabsActivity";
@ -88,6 +89,7 @@ public class CustomTabsActivity extends AppCompatActivity
private MenuItem menuItemControl;
private GeckoSession mGeckoSession;
private GeckoView mGeckoView;
private PromptService mPromptService;
private DoorHangerPopup mDoorHangerPopup;
@ -127,12 +129,15 @@ public class CustomTabsActivity extends AppCompatActivity
mGeckoView = (GeckoView) findViewById(R.id.gecko_view);
mGeckoView.setNavigationListener(this);
mGeckoView.setProgressListener(this);
mGeckoView.setContentListener(this);
GeckoAccessibility.setDelegate(mGeckoView);
mGeckoSession = new GeckoSession();
mGeckoView.setSession(mGeckoSession);
mGeckoSession.setNavigationListener(this);
mGeckoSession.setProgressListener(this);
mGeckoSession.setContentListener(this);
mPromptService = new PromptService(this, mGeckoView.getEventDispatcher());
mDoorHangerPopup = new DoorHangerPopup(this, mGeckoView.getEventDispatcher());
@ -142,15 +147,15 @@ public class CustomTabsActivity extends AppCompatActivity
mTextSelection = TextSelection.Factory.create(mGeckoView, this);
mTextSelection.create();
final GeckoViewSettings settings = mGeckoView.getSettings();
settings.setBoolean(GeckoViewSettings.USE_MULTIPROCESS, false);
final GeckoSessionSettings settings = mGeckoView.getSettings();
settings.setBoolean(GeckoSessionSettings.USE_MULTIPROCESS, false);
settings.setBoolean(
GeckoViewSettings.USE_REMOTE_DEBUGGER,
GeckoSessionSettings.USE_REMOTE_DEBUGGER,
GeckoSharedPrefs.forApp(this).getBoolean(
GeckoPreferences.PREFS_DEVTOOLS_REMOTE_USB_ENABLED, false));
if (intent != null && !TextUtils.isEmpty(intent.getDataString())) {
mGeckoView.loadUri(intent.getDataString());
mGeckoSession.loadUri(intent.getDataString());
} else {
Log.w(LOGTAG, "No intend found for custom tab");
finish();
@ -162,13 +167,13 @@ public class CustomTabsActivity extends AppCompatActivity
@Override
public void onResume() {
mGeckoView.setActive(true);
mGeckoSession.setActive(true);
super.onResume();
}
@Override
public void onPause() {
mGeckoView.setActive(false);
mGeckoSession.setActive(false);
super.onPause();
}
@ -244,8 +249,8 @@ public class CustomTabsActivity extends AppCompatActivity
@Override
public void finish() {
if (mGeckoView != null) {
mGeckoView.loadUri("about:blank");
if (mGeckoSession != null) {
mGeckoSession.loadUri("about:blank");
}
super.finish();
@ -263,7 +268,7 @@ public class CustomTabsActivity extends AppCompatActivity
@Override
public void onBackPressed() {
if (mCanGoBack) {
mGeckoView.goBack();
mGeckoSession.goBack();
} else {
finish();
}
@ -500,15 +505,15 @@ public class CustomTabsActivity extends AppCompatActivity
*/
private void onLoadingControlClicked() {
if (mCanStop) {
mGeckoView.stop();
mGeckoSession.stop();
} else {
mGeckoView.reload();
mGeckoSession.reload();
}
}
private void onForwardClicked() {
if (mCanGoForward) {
mGeckoView.goForward();
mGeckoSession.goForward();
}
}
@ -582,27 +587,27 @@ public class CustomTabsActivity extends AppCompatActivity
return null;
}
/* GeckoView.NavigationListener */
/* GeckoSession.NavigationListener */
@Override
public void onLocationChange(GeckoView view, String url) {
public void onLocationChange(GeckoSession session, String url) {
mCurrentUrl = url;
updateActionBar();
updateProgress(60);
}
@Override
public void onCanGoBack(GeckoView view, boolean canGoBack) {
public void onCanGoBack(GeckoSession session, boolean canGoBack) {
mCanGoBack = canGoBack;
}
@Override
public void onCanGoForward(GeckoView view, boolean canGoForward) {
public void onCanGoForward(GeckoSession session, boolean canGoForward) {
mCanGoForward = canGoForward;
updateMenuItemForward();
}
@Override
public boolean onLoadUri(final GeckoView view, final String urlStr,
public boolean onLoadUri(final GeckoSession session, final String urlStr,
final TargetWindow where) {
if (where != TargetWindow.NEW) {
return false;
@ -640,9 +645,9 @@ public class CustomTabsActivity extends AppCompatActivity
return true;
}
/* GeckoView.ProgressListener */
/* GeckoSession.ProgressListener */
@Override
public void onPageStart(GeckoView view, String url) {
public void onPageStart(GeckoSession session, String url) {
mCurrentUrl = url;
mCanStop = true;
updateActionBar();
@ -651,27 +656,27 @@ public class CustomTabsActivity extends AppCompatActivity
}
@Override
public void onPageStop(GeckoView view, boolean success) {
public void onPageStop(GeckoSession session, boolean success) {
mCanStop = false;
updateCanStop();
updateProgress(100);
}
@Override
public void onSecurityChange(GeckoView view, SecurityInformation securityInfo) {
public void onSecurityChange(GeckoSession session, SecurityInformation securityInfo) {
mSecurityInformation = securityInfo;
updateActionBar();
}
/* GeckoView.ContentListener */
/* GeckoSession.ContentListener */
@Override
public void onTitleChange(GeckoView view, String title) {
public void onTitleChange(GeckoSession session, String title) {
mCurrentTitle = title;
updateActionBar();
}
@Override
public void onFullScreen(GeckoView view, boolean fullScreen) {
public void onFullScreen(GeckoSession session, boolean fullScreen) {
ActivityUtils.setFullScreen(this, fullScreen);
if (fullScreen) {
getSupportActionBar().hide();
@ -681,7 +686,7 @@ public class CustomTabsActivity extends AppCompatActivity
}
@Override
public void onContextMenu(GeckoView view, int screenX, int screenY,
public void onContextMenu(GeckoSession session, int screenX, int screenY,
final String uri, final String elementSrc) {
final String content = uri != null ? uri : elementSrc != null ? elementSrc : "";

Просмотреть файл

@ -19,7 +19,7 @@ import org.mozilla.gecko.AboutPages;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoView.ProgressListener.SecurityInformation;
import org.mozilla.gecko.GeckoSession.ProgressListener.SecurityInformation;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SiteIdentity;
import org.mozilla.gecko.SiteIdentity.SecurityMode;

Просмотреть файл

@ -464,6 +464,7 @@ public abstract class BrowserToolbar extends ThemedRelativeLayout
// Progress-related handling
switch (msg) {
case START:
flags.add(UpdateFlags.PROGRESS);
updateProgressVisibility(tab, Tab.LOAD_PROGRESS_INIT);
break;
case ADDED:

Просмотреть файл

@ -35,9 +35,10 @@ import org.mozilla.gecko.BrowserApp;
import org.mozilla.gecko.DoorHangerPopup;
import org.mozilla.gecko.GeckoAccessibility;
import org.mozilla.gecko.GeckoScreenOrientation;
import org.mozilla.gecko.GeckoSession;
import org.mozilla.gecko.GeckoSessionSettings;
import org.mozilla.gecko.GeckoSharedPrefs;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoViewSettings;
import org.mozilla.gecko.preferences.GeckoPreferences;
import org.mozilla.gecko.R;
import org.mozilla.gecko.customtabs.CustomTabsActivity;
@ -50,13 +51,15 @@ import org.mozilla.gecko.widget.ActionModePresenter;
public class WebAppActivity extends AppCompatActivity
implements ActionModePresenter,
GeckoView.NavigationListener {
GeckoSession.ContentListener,
GeckoSession.NavigationListener {
private static final String LOGTAG = "WebAppActivity";
public static final String MANIFEST_PATH = "MANIFEST_PATH";
public static final String MANIFEST_URL = "MANIFEST_URL";
private static final String SAVED_INTENT = "savedIntent";
private GeckoSession mGeckoSession;
private GeckoView mGeckoView;
private PromptService mPromptService;
private DoorHangerPopup mDoorHangerPopup;
@ -92,28 +95,11 @@ public class WebAppActivity extends AppCompatActivity
super.onCreate(savedInstanceState);
mGeckoView = new GeckoView(this);
mGeckoView.setNavigationListener(this);
mGeckoView.setContentListener(new GeckoView.ContentListener() {
public void onTitleChange(GeckoView view, String title) {}
public void onContextMenu(GeckoView view, int screenX, int screenY,
String uri, String elementSrc) {
final String content = uri != null ? uri : elementSrc != null ? elementSrc : "";
final Uri validUri = WebApps.getValidURL(content);
if (validUri == null) {
return;
}
mGeckoSession = new GeckoSession();
mGeckoView.setSession(mGeckoSession);
runOnUiThread(new Runnable() {
@Override
public void run() {
WebApps.openInFennec(validUri, WebAppActivity.this);
}
});
}
public void onFullScreen(GeckoView view, boolean fullScreen) {
updateFullScreenContent(fullScreen);
}
});
mGeckoSession.setNavigationListener(this);
mGeckoSession.setContentListener(this);
GeckoAccessibility.setDelegate(mGeckoView);
@ -123,10 +109,10 @@ public class WebAppActivity extends AppCompatActivity
mTextSelection = TextSelection.Factory.create(mGeckoView, this);
mTextSelection.create();
final GeckoViewSettings settings = mGeckoView.getSettings();
settings.setBoolean(GeckoViewSettings.USE_MULTIPROCESS, false);
final GeckoSessionSettings settings = mGeckoView.getSettings();
settings.setBoolean(GeckoSessionSettings.USE_MULTIPROCESS, false);
settings.setBoolean(
GeckoViewSettings.USE_REMOTE_DEBUGGER,
GeckoSessionSettings.USE_REMOTE_DEBUGGER,
GeckoSharedPrefs.forApp(this).getBoolean(
GeckoPreferences.PREFS_DEVTOOLS_REMOTE_USB_ENABLED, false));
@ -150,20 +136,20 @@ public class WebAppActivity extends AppCompatActivity
updateFromManifest();
mGeckoView.loadUri(mManifest.getStartUri().toString());
mGeckoSession.loadUri(mManifest.getStartUri().toString());
setContentView(mGeckoView);
}
@Override
public void onResume() {
mGeckoView.setActive(true);
mGeckoSession.setActive(true);
super.onResume();
}
@Override
public void onPause() {
mGeckoView.setActive(false);
mGeckoSession.setActive(false);
super.onPause();
}
@ -206,9 +192,9 @@ public class WebAppActivity extends AppCompatActivity
@Override
public void onBackPressed() {
if (mIsFullScreenContent) {
mGeckoView.exitFullScreen();
mGeckoSession.exitFullScreen();
} else if (mCanGoBack) {
mGeckoView.goBack();
mGeckoSession.goBack();
} else {
super.onBackPressed();
}
@ -266,42 +252,62 @@ public class WebAppActivity extends AppCompatActivity
updateFullScreenMode(displayMode.equals("fullscreen"));
GeckoViewSettings.DisplayMode mode;
int mode;
switch (displayMode) {
case "standalone":
mode = GeckoViewSettings.DisplayMode.STANDALONE;
mode = GeckoSessionSettings.DISPLAY_MODE_STANDALONE;
break;
case "fullscreen":
mode = GeckoViewSettings.DisplayMode.FULLSCREEN;
mode = GeckoSessionSettings.DISPLAY_MODE_FULLSCREEN;
break;
case "minimal-ui":
mode = GeckoViewSettings.DisplayMode.MINIMAL_UI;
mode = GeckoSessionSettings.DISPLAY_MODE_MINIMAL_UI;
break;
case "browser":
default:
mode = GeckoViewSettings.DisplayMode.BROWSER;
mode = GeckoSessionSettings.DISPLAY_MODE_BROWSER;
break;
}
mGeckoView.getSettings().setInt(GeckoViewSettings.DISPLAY_MODE, mode.value());
mGeckoView.getSettings().setInt(GeckoSessionSettings.DISPLAY_MODE, mode);
}
/* GeckoView.NavigationListener */
@Override
public void onLocationChange(GeckoView view, String url) {
@Override // GeckoSession.NavigationListener
public void onLocationChange(GeckoSession session, String url) {
}
@Override
public void onCanGoBack(GeckoView view, boolean canGoBack) {
@Override // GeckoSession.NavigationListener
public void onCanGoBack(GeckoSession session, boolean canGoBack) {
mCanGoBack = canGoBack;
}
@Override
public void onCanGoForward(GeckoView view, boolean canGoForward) {
@Override // GeckoSession.NavigationListener
public void onCanGoForward(GeckoSession session, boolean canGoForward) {
}
@Override // GeckoSession.ContentListener
public void onTitleChange(GeckoSession session, String title) {
}
@Override // GeckoSession.ContentListener
public void onContextMenu(GeckoSession session, int screenX, int screenY,
String uri, String elementSrc) {
final String content = uri != null ? uri : elementSrc != null ? elementSrc : "";
final Uri validUri = WebApps.getValidURL(content);
if (validUri == null) {
return;
}
WebApps.openInFennec(validUri, WebAppActivity.this);
}
@Override // GeckoSession.ContentListener
public void onFullScreen(GeckoSession session, boolean fullScreen) {
updateFullScreenContent(fullScreen);
}
@Override
public boolean onLoadUri(final GeckoView view, final String urlStr,
public boolean onLoadUri(final GeckoSession session, final String urlStr,
final TargetWindow where) {
final Uri uri = Uri.parse(urlStr);
if (uri == null) {

Просмотреть файл

@ -384,11 +384,12 @@ gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x
'GeckoProfile.java',
'GeckoProfileDirectories.java',
'GeckoScreenOrientation.java',
'GeckoSession.java',
'GeckoSessionHandler.java',
'GeckoSessionSettings.java',
'GeckoSharedPrefs.java',
'GeckoThread.java',
'GeckoView.java',
'GeckoViewHandler.java',
'GeckoViewSettings.java',
'gfx/BitmapUtils.java',
'gfx/BufferedImage.java',
'gfx/BufferedImageGLInfo.java',
@ -817,7 +818,6 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
'preferences/SetHomepagePreference.java',
'preferences/SyncPreference.java',
'preferences/TopSitesPanelsPreference.java',
'PresentationView.java',
'PrintHelper.java',
'PrivateTab.java',
'promotion/AddToHomeScreenPromotion.java',

Просмотреть файл

@ -71,6 +71,10 @@ public final class EventDispatcher extends JNIObject {
mNativeQueue = queue;
}
public NativeQueue getNativeQueue() {
return mNativeQueue;
}
private boolean isReadyForDispatchingToGecko() {
return mNativeQueue.isReady();
}

Просмотреть файл

@ -598,7 +598,7 @@ final class GeckoEditable extends IGeckoEditableParent.Stub
}
@WrapForJNI(calledFrom = "gecko")
private GeckoEditable(final GeckoView v) {
private GeckoEditable() {
if (DEBUG) {
// Called by nsWindow.
ThreadUtils.assertOnGeckoThread();
@ -613,8 +613,6 @@ final class GeckoEditable extends IGeckoEditableParent.Stub
PROXY_INTERFACES, this);
mIcRunHandler = mIcPostHandler = ThreadUtils.getUiHandler();
onViewChange(v);
}
@WrapForJNI(calledFrom = "gecko")

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -12,11 +12,10 @@ import org.mozilla.gecko.util.GeckoBundle;
import android.util.Log;
/* package */ abstract class GeckoViewHandler<Listener>
/* package */ abstract class GeckoSessionHandler<Listener>
implements BundleEventListener {
private static final String LOGTAG = "GeckoViewHandler";
private static final String LOGTAG = "GeckoSessionHandler";
private static final boolean DEBUG = false;
private Listener mListener;
@ -25,19 +24,19 @@ import android.util.Log;
private final String[] mEvents;
GeckoViewHandler(final String module, final GeckoView view,
final String[] events) {
this(module, view, events, /* alwaysListen */ false);
GeckoSessionHandler(final String module, final GeckoSession session,
final String[] events) {
this(module, session, events, /* alwaysListen */ false);
}
GeckoViewHandler(final String module, final GeckoView view,
final String[] events, final boolean alwaysListen) {
GeckoSessionHandler(final String module, final GeckoSession session,
final String[] events, final boolean alwaysListen) {
mAlwaysListen = alwaysListen;
mModuleName = module;
mEvents = events;
if (alwaysListen) {
register(view.getEventDispatcher());
register(session.getEventDispatcher());
}
}
@ -45,8 +44,8 @@ import android.util.Log;
return mListener;
}
public void setListener(final Listener listener, final GeckoView view) {
final EventDispatcher eventDispatcher = view.getEventDispatcher();
public void setListener(final Listener listener, final GeckoSession session) {
final EventDispatcher eventDispatcher = session.getEventDispatcher();
if (mListener == listener) {
return;
}

Просмотреть файл

@ -0,0 +1,215 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* vim: ts=4 sw=4 expandtab:
* 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/. */
package org.mozilla.gecko;
import org.mozilla.gecko.util.GeckoBundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import java.util.Arrays;
import java.util.Collection;
public final class GeckoSessionSettings implements Parcelable {
private static final String LOGTAG = "GeckoSessionSettings";
private static final boolean DEBUG = false;
// This needs to match nsIDocShell.idl
public static final int DISPLAY_MODE_BROWSER = 0;
public static final int DISPLAY_MODE_MINIMAL_UI = 1;
public static final int DISPLAY_MODE_STANDALONE = 2;
public static final int DISPLAY_MODE_FULLSCREEN = 3;
private static class Key<T> {
public final String name;
public final boolean initOnly;
public final Collection<T> values;
public Key(final String name) {
this(name, /* initOnly */ false, /* values */ null);
}
public Key(final String name, final boolean initOnly, final Collection<T> values) {
this.name = name;
this.initOnly = initOnly;
this.values = values;
}
}
/**
* Key to set the chrome window URI, or null to use default URI.
* Read-only once session is open.
*/
public static final Key<String> CHROME_URI =
new Key<String>("chromeUri", /* initOnly */ true, /* values */ null);
/**
* Key to set the window screen ID, or 0 to use default ID.
* Read-only once session is open.
*/
public static final Key<Integer> SCREEN_ID =
new Key<Integer>("screenId", /* initOnly */ true, /* values */ null);
/*
* Key to enable and disable tracking protection.
*/
public static final Key<Boolean> USE_TRACKING_PROTECTION =
new Key<Boolean>("useTrackingProtection");
/*
* Key to enable and disable private mode browsing.
* Read-only once session is open.
*/
public static final Key<Boolean> USE_PRIVATE_MODE =
new Key<Boolean>("usePrivateMode", /* initOnly */ true, /* values */ null);
/*
* Key to enable and disable multiprocess browsing (e10s).
* Read-only once session is open.
*/
public static final Key<Boolean> USE_MULTIPROCESS =
new Key<Boolean>("useMultiprocess", /* initOnly */ true, /* values */ null);
/*
* Key to specify which display-mode we should use
*/
public static final Key<Integer> DISPLAY_MODE =
new Key<Integer>("displayMode", /* initOnly */ false,
Arrays.asList(DISPLAY_MODE_BROWSER, DISPLAY_MODE_MINIMAL_UI,
DISPLAY_MODE_STANDALONE, DISPLAY_MODE_FULLSCREEN));
public static final Key<Boolean> USE_REMOTE_DEBUGGER =
new Key<Boolean>("useRemoteDebugger");
public static final Key<String> DEBUGGER_SOCKET_DIR =
new Key<String>("debuggerSocketDir");
/* package */ static final Key<String> DATA_DIR =
new Key<String>("dataDir", /* initOnly */ true, /* values */ null);
private final GeckoSession mSession;
private final GeckoBundle mBundle;
public GeckoSessionSettings() {
this(null);
}
/* package */ GeckoSessionSettings(final GeckoSession session) {
mSession = session;
mBundle = new GeckoBundle();
mBundle.putString(CHROME_URI.name, null);
mBundle.putInt(SCREEN_ID.name, 0);
mBundle.putBoolean(USE_TRACKING_PROTECTION.name, false);
mBundle.putBoolean(USE_PRIVATE_MODE.name, false);
mBundle.putBoolean(USE_MULTIPROCESS.name, true);
mBundle.putInt(DISPLAY_MODE.name, DISPLAY_MODE_BROWSER);
mBundle.putBoolean(USE_REMOTE_DEBUGGER.name, false);
mBundle.putString(DEBUGGER_SOCKET_DIR.name, null);
}
/* package */ GeckoSessionSettings(final GeckoSessionSettings settings,
final GeckoSession session) {
mSession = session;
mBundle = new GeckoBundle(settings.mBundle);
}
public void setBoolean(final Key<Boolean> key, final boolean value) {
synchronized (mBundle) {
if (valueChangedLocked(key, value)) {
mBundle.putBoolean(key.name, value);
dispatchUpdate();
}
}
}
public boolean getBoolean(final Key<Boolean> key) {
synchronized (mBundle) {
return mBundle.getBoolean(key.name);
}
}
public void setInt(final Key<Integer> key, final int value) {
synchronized (mBundle) {
if (valueChangedLocked(key, value)) {
mBundle.putInt(key.name, value);
dispatchUpdate();
}
}
}
public int getInt(final Key<Integer> key) {
synchronized (mBundle) {
return mBundle.getInt(key.name);
}
}
public void setString(final Key<String> key, final String value) {
synchronized (mBundle) {
if (valueChangedLocked(key, value)) {
mBundle.putString(key.name, value);
dispatchUpdate();
}
}
}
public String getString(final Key<String> key) {
synchronized (mBundle) {
return mBundle.getString(key.name);
}
}
/* package */ GeckoBundle asBundle() {
return mBundle;
}
private <T> boolean valueChangedLocked(final Key<T> key, T value) {
if (key.initOnly && mSession != null && mSession.isOpen()) {
throw new IllegalStateException("Read-only property");
} else if (key.values != null && !key.values.contains(value)) {
throw new IllegalArgumentException("Invalid value");
}
final Object old = mBundle.get(key.name);
return (old != value) && (old == null || !old.equals(value));
}
private void dispatchUpdate() {
if (mSession != null) {
mSession.getEventDispatcher().dispatch("GeckoView:UpdateSettings", null);
}
}
@Override // Parcelable
public int describeContents() {
return 0;
}
@Override // Parcelable
public void writeToParcel(Parcel out, int flags) {
mBundle.writeToParcel(out, flags);
}
// AIDL code may call readFromParcel even though it's not part of Parcelable.
public void readFromParcel(final Parcel source) {
mBundle.readFromParcel(source);
}
public static final Parcelable.Creator<GeckoSessionSettings> CREATOR
= new Parcelable.Creator<GeckoSessionSettings>() {
@Override
public GeckoSessionSettings createFromParcel(final Parcel in) {
final GeckoSessionSettings settings = new GeckoSessionSettings();
settings.readFromParcel(in);
return settings;
}
@Override
public GeckoSessionSettings[] newArray(final int size) {
return new GeckoSessionSettings[size];
}
};
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1,191 +0,0 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* vim: ts=4 sw=4 expandtab:
* 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/. */
package org.mozilla.gecko;
import org.mozilla.gecko.util.GeckoBundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
public final class GeckoViewSettings implements Parcelable {
private static final String LOGTAG = "GeckoViewSettings";
private static final boolean DEBUG = false;
private static class Key<T> {
private final String text;
public Key(final String text) {
this.text = text;
}
}
public enum DisplayMode {
// This needs to match nsIDocShell.idl
BROWSER(0),
MINIMAL_UI(1),
STANDALONE(2),
FULLSCREEN(3);
private final int mMode;
DisplayMode(int mode) {
mMode = mode;
}
public int value() {
return mMode;
}
}
/*
* Key to enabled and disable tracking protection.
*/
public static final Key<Boolean> USE_TRACKING_PROTECTION =
new Key<Boolean>("useTrackingProtection");
/*
* Key to enabled and disable private mode browsing.
*/
public static final Key<Boolean> USE_PRIVATE_MODE =
new Key<Boolean>("usePrivateMode");
/*
* Key to enabled and disable multiprocess browsing (e10s).
* Note: can only be set during GeckoView initialization, changes during an
* active GeckoView session will be ignored.
*/
public static final Key<Boolean> USE_MULTIPROCESS =
new Key<Boolean>("useMultiprocess");
/*
* Key to specify which display-mode we should use
*/
public static final Key<Integer> DISPLAY_MODE =
new Key<Integer>("displayMode");
public static final Key<Boolean> USE_REMOTE_DEBUGGER =
new Key<Boolean>("useRemoteDebugger");
public static final Key<String> DEBUGGER_SOCKET_DIR =
new Key<String>("debuggerSocketDir");
private final EventDispatcher mEventDispatcher;
private final GeckoBundle mBundle;
public GeckoViewSettings() {
this(null);
}
/* package */ GeckoViewSettings(EventDispatcher eventDispatcher) {
mEventDispatcher = eventDispatcher;
mBundle = new GeckoBundle();
setBoolean(USE_TRACKING_PROTECTION, false);
setBoolean(USE_PRIVATE_MODE, false);
setBoolean(USE_MULTIPROCESS, true);
setInt(DISPLAY_MODE, DisplayMode.BROWSER.value());
setBoolean(USE_REMOTE_DEBUGGER, false);
// Set in GeckoView.init().
setString(DEBUGGER_SOCKET_DIR, "");
}
/* package */ GeckoViewSettings(GeckoViewSettings settings, EventDispatcher eventDispatcher) {
mBundle = new GeckoBundle(settings.mBundle);
mEventDispatcher = eventDispatcher;
}
public void setBoolean(final Key<Boolean> key, boolean value) {
synchronized (mBundle) {
final Object old = mBundle.get(key.text);
if (old != null && old.equals(value)) {
return;
}
mBundle.putBoolean(key.text, value);
}
dispatchUpdate();
}
public boolean getBoolean(final Key<Boolean> key) {
synchronized (mBundle) {
return mBundle.getBoolean(key.text);
}
}
public void setInt(final Key<Integer> key, int value) {
synchronized (mBundle) {
final Object old = mBundle.get(key.text);
if (old != null && old.equals(value)) {
return;
}
mBundle.putInt(key.text, value);
}
dispatchUpdate();
}
public int getInt(final Key<Integer> key) {
synchronized (mBundle) {
return mBundle.getInt(key.text);
}
}
public void setString(final Key<String> key, final String value) {
synchronized (mBundle) {
final Object old = mBundle.get(key.text);
if (old != null && old.equals(value)) {
return;
}
mBundle.putString(key.text, value);
}
dispatchUpdate();
}
public String getString(final Key<String> key) {
synchronized (mBundle) {
return mBundle.getString(key.text);
}
}
/* package */ GeckoBundle asBundle() {
return mBundle;
}
private void dispatchUpdate() {
if (mEventDispatcher != null) {
mEventDispatcher.dispatch("GeckoView:UpdateSettings", null);
}
}
@Override // Parcelable
public int describeContents() {
return 0;
}
@Override // Parcelable
public void writeToParcel(Parcel out, int flags) {
mBundle.writeToParcel(out, flags);
}
// AIDL code may call readFromParcel even though it's not part of Parcelable.
public void readFromParcel(final Parcel source) {
mBundle.readFromParcel(source);
}
public static final Parcelable.Creator<GeckoViewSettings> CREATOR
= new Parcelable.Creator<GeckoViewSettings>() {
@Override
public GeckoViewSettings createFromParcel(final Parcel in) {
final GeckoViewSettings settings = new GeckoViewSettings();
settings.readFromParcel(in);
return settings;
}
@Override
public GeckoViewSettings[] newArray(final int size) {
return new GeckoViewSettings[size];
}
};
}

Просмотреть файл

@ -48,24 +48,19 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoSession;
import org.mozilla.gecko.util.GeckoBundle;
final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
final class BasicGeckoViewPrompt implements GeckoSession.PromptDelegate {
protected static final String LOGTAG = "BasicGeckoViewPrompt";
private final Activity mActivity;
public int filePickerRequestCode = 1;
private int mFileType;
private FileCallback mFileCallback;
private static Activity getActivity(final GeckoView view) {
if (view != null) {
final Context context = view.getContext();
if (context instanceof Activity) {
return (Activity) context;
}
}
return null;
public BasicGeckoViewPrompt(final Activity activity) {
mActivity = activity;
}
private AlertDialog.Builder addCheckbox(final AlertDialog.Builder builder,
@ -97,9 +92,9 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
return builder;
}
public void alert(final GeckoView view, final String title, final String msg,
public void alert(final GeckoSession session, final String title, final String msg,
final AlertCallback callback) {
final Activity activity = getActivity(view);
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -112,10 +107,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
callback).show();
}
public void promptForButton(final GeckoView view, final String title, final String msg,
final String[] btnMsg, final ButtonCallback callback)
{
final Activity activity = getActivity(view);
public void promptForButton(final GeckoSession session, final String title,
final String msg, final String[] btnMsg,
final ButtonCallback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -187,10 +182,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
return dialog;
}
public void promptForText(final GeckoView view, final String title, final String msg,
final String value, final TextCallback callback)
{
final Activity activity = getActivity(view);
public void promptForText(final GeckoSession session, final String title,
final String msg, final String value,
final TextCallback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -213,10 +208,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
createStandardDialog(addCheckbox(builder, container, callback), callback).show();
}
public void promptForAuth(final GeckoView view, final String title, final String msg,
final GeckoBundle options, final AuthCallback callback)
{
final Activity activity = getActivity(view);
public void promptForAuth(final GeckoSession session, final String title,
final String msg, final GeckoBundle options,
final AuthCallback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -291,11 +286,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
}
}
public void promptForChoice(final GeckoView view, final String title, final String msg,
final int type, final GeckoBundle[] choices,
final ChoiceCallback callback)
{
final Activity activity = getActivity(view);
public void promptForChoice(final GeckoSession session, final String title,
final String msg, final int type,
final GeckoBundle[] choices, final ChoiceCallback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -423,7 +417,7 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
// Show sub-menu.
dialog.setOnDismissListener(null);
dialog.dismiss();
promptForChoice(view, item.getString("label"), /* msg */ null,
promptForChoice(session, item.getString("label"), /* msg */ null,
type, children, callback);
return;
}
@ -473,10 +467,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
}
}
public void promptForColor(final GeckoView view, final String title,
public void promptForColor(final GeckoSession session, final String title,
final String value, final TextCallback callback)
{
final Activity activity = getActivity(view);
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -581,11 +575,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
}
}
public void promptForDateTime(final GeckoView view, final String title, final int type,
final String value, final String min, final String max,
final TextCallback callback)
{
final Activity activity = getActivity(view);
public void promptForDateTime(final GeckoSession session, final String title,
final int type, final String value, final String min,
final String max, final TextCallback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -698,10 +691,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
}
@TargetApi(19)
public void promptForFile(GeckoView view, String title, int type,
public void promptForFile(GeckoSession session, String title, int type,
String[] mimeTypes, FileCallback callback)
{
final Activity activity = getActivity(view);
final Activity activity = mActivity;
if (activity == null) {
callback.dismiss();
return;
@ -753,8 +746,7 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
}
}
public void onFileCallbackResult(final Context context, final int resultCode,
final Intent data) {
public void onFileCallbackResult(final int resultCode, final Intent data) {
if (mFileCallback == null) {
return;
}
@ -772,7 +764,7 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
if (mFileType == FILE_TYPE_SINGLE ||
(mFileType == FILE_TYPE_MULTIPLE && clip == null)) {
callback.confirm(context, uri);
callback.confirm(mActivity, uri);
} else if (mFileType == FILE_TYPE_MULTIPLE) {
if (clip == null) {
@ -785,13 +777,13 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
for (int i = 0; i < count; i++) {
uris.add(clip.getItemAt(i).getUri());
}
callback.confirm(context, uris.toArray(new Uri[uris.size()]));
callback.confirm(mActivity, uris.toArray(new Uri[uris.size()]));
}
}
public void promptForPermission(final GeckoView view, final String title,
final GeckoView.PermissionDelegate.Callback callback) {
final Activity activity = getActivity(view);
public void promptForPermission(final GeckoSession session, final String title,
final GeckoSession.PermissionDelegate.Callback callback) {
final Activity activity = mActivity;
if (activity == null) {
callback.reject();
return;
@ -850,10 +842,10 @@ final class BasicGeckoViewPrompt implements GeckoView.PromptDelegate {
return spinner;
}
public void promptForMedia(final GeckoView view, final String title,
public void promptForMedia(final GeckoSession session, final String title,
final GeckoBundle[] video, final GeckoBundle[] audio,
final GeckoView.PermissionDelegate.MediaCallback callback) {
final Activity activity = getActivity(view);
final GeckoSession.PermissionDelegate.MediaCallback callback) {
final Activity activity = mActivity;
if (activity == null || (video == null && audio == null)) {
callback.reject();
return;

Просмотреть файл

@ -18,8 +18,9 @@ import android.view.WindowManager;
import java.util.Locale;
import org.mozilla.gecko.GeckoSession;
import org.mozilla.gecko.GeckoSessionSettings;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoViewSettings;
import org.mozilla.gecko.util.GeckoBundle;
public class GeckoViewActivity extends Activity {
@ -31,6 +32,7 @@ public class GeckoViewActivity extends Activity {
/* package */ static final int REQUEST_FILE_PICKER = 1;
private static final int REQUEST_PERMISSIONS = 2;
private GeckoSession mGeckoSession;
private GeckoView mGeckoView;
@Override
@ -57,24 +59,27 @@ public class GeckoViewActivity extends Activity {
final boolean useMultiprocess = getIntent().getBooleanExtra(USE_MULTIPROCESS_EXTRA,
true);
GeckoView.preload(this, geckoArgs, useMultiprocess);
GeckoSession.preload(this, geckoArgs, useMultiprocess);
setContentView(R.layout.geckoview_activity);
mGeckoView = (GeckoView) findViewById(R.id.gecko_view);
mGeckoView.setContentListener(new MyGeckoViewContent());
mGeckoView.setProgressListener(new MyGeckoViewProgress());
mGeckoView.setNavigationListener(new Navigation());
mGeckoSession = new GeckoSession();
mGeckoView.setSession(mGeckoSession);
final BasicGeckoViewPrompt prompt = new BasicGeckoViewPrompt();
mGeckoSession.setContentListener(new MyGeckoViewContent());
mGeckoSession.setProgressListener(new MyGeckoViewProgress());
mGeckoSession.setNavigationListener(new Navigation());
final BasicGeckoViewPrompt prompt = new BasicGeckoViewPrompt(this);
prompt.filePickerRequestCode = REQUEST_FILE_PICKER;
mGeckoView.setPromptDelegate(prompt);
mGeckoSession.setPromptDelegate(prompt);
final MyGeckoViewPermission permission = new MyGeckoViewPermission();
permission.androidPermissionRequestCode = REQUEST_PERMISSIONS;
mGeckoView.setPermissionDelegate(permission);
mGeckoSession.setPermissionDelegate(permission);
mGeckoView.getSettings().setBoolean(GeckoViewSettings.USE_MULTIPROCESS,
mGeckoView.getSettings().setBoolean(GeckoSessionSettings.USE_MULTIPROCESS,
useMultiprocess);
loadSettings(getIntent());
loadFromIntent(getIntent());
@ -93,12 +98,12 @@ public class GeckoViewActivity extends Activity {
private void loadFromIntent(final Intent intent) {
final Uri uri = intent.getData();
mGeckoView.loadUri(uri != null ? uri.toString() : DEFAULT_URL);
mGeckoSession.loadUri(uri != null ? uri.toString() : DEFAULT_URL);
}
private void loadSettings(final Intent intent) {
mGeckoView.getSettings().setBoolean(
GeckoViewSettings.USE_REMOTE_DEBUGGER,
GeckoSessionSettings.USE_REMOTE_DEBUGGER,
intent.getBooleanExtra(USE_REMOTE_DEBUGGER_EXTRA, false));
}
@ -107,8 +112,8 @@ public class GeckoViewActivity extends Activity {
final Intent data) {
if (requestCode == REQUEST_FILE_PICKER) {
final BasicGeckoViewPrompt prompt = (BasicGeckoViewPrompt)
mGeckoView.getPromptDelegate();
prompt.onFileCallbackResult(this, resultCode, data);
mGeckoSession.getPromptDelegate();
prompt.onFileCallbackResult(resultCode, data);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
@ -120,21 +125,21 @@ public class GeckoViewActivity extends Activity {
final int[] grantResults) {
if (requestCode == REQUEST_PERMISSIONS) {
final MyGeckoViewPermission permission = (MyGeckoViewPermission)
mGeckoView.getPermissionDelegate();
mGeckoSession.getPermissionDelegate();
permission.onRequestPermissionsResult(permissions, grantResults);
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private class MyGeckoViewContent implements GeckoView.ContentListener {
private class MyGeckoViewContent implements GeckoSession.ContentListener {
@Override
public void onTitleChange(GeckoView view, String title) {
public void onTitleChange(GeckoSession session, String title) {
Log.i(LOGTAG, "Content title changed to " + title);
}
@Override
public void onFullScreen(final GeckoView view, final boolean fullScreen) {
public void onFullScreen(final GeckoSession session, final boolean fullScreen) {
getWindow().setFlags(fullScreen ? WindowManager.LayoutParams.FLAG_FULLSCREEN : 0,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (fullScreen) {
@ -145,7 +150,7 @@ public class GeckoViewActivity extends Activity {
}
@Override
public void onContextMenu(GeckoView view, int screenX, int screenY,
public void onContextMenu(GeckoSession session, int screenX, int screenY,
String uri, String elementSrc) {
Log.d(LOGTAG, "onContextMenu screenX=" + screenX +
" screenY=" + screenY + " uri=" + uri +
@ -153,28 +158,28 @@ public class GeckoViewActivity extends Activity {
}
}
private class MyGeckoViewProgress implements GeckoView.ProgressListener {
private class MyGeckoViewProgress implements GeckoSession.ProgressListener {
@Override
public void onPageStart(GeckoView view, String url) {
public void onPageStart(GeckoSession session, String url) {
Log.i(LOGTAG, "Starting to load page at " + url);
Log.i(LOGTAG, "zerdatime " + SystemClock.elapsedRealtime() +
" - page load start");
}
@Override
public void onPageStop(GeckoView view, boolean success) {
public void onPageStop(GeckoSession session, boolean success) {
Log.i(LOGTAG, "Stopping page load " + (success ? "successfully" : "unsuccessfully"));
Log.i(LOGTAG, "zerdatime " + SystemClock.elapsedRealtime() +
" - page load stop");
}
@Override
public void onSecurityChange(GeckoView view, SecurityInformation securityInfo) {
public void onSecurityChange(GeckoSession session, SecurityInformation securityInfo) {
Log.i(LOGTAG, "Security status changed to " + securityInfo.securityMode);
}
}
private class MyGeckoViewPermission implements GeckoView.PermissionDelegate {
private class MyGeckoViewPermission implements GeckoSession.PermissionDelegate {
public int androidPermissionRequestCode = 1;
private Callback mCallback;
@ -198,7 +203,7 @@ public class GeckoViewActivity extends Activity {
}
@Override
public void requestAndroidPermissions(final GeckoView view, final String[] permissions,
public void requestAndroidPermissions(final GeckoSession session, final String[] permissions,
final Callback callback) {
if (Build.VERSION.SDK_INT < 23) {
// requestPermissions was introduced in API 23.
@ -210,7 +215,7 @@ public class GeckoViewActivity extends Activity {
}
@Override
public void requestContentPermission(final GeckoView view, final String uri,
public void requestContentPermission(final GeckoSession session, final String uri,
final String type, final String access,
final Callback callback) {
final int resId;
@ -226,8 +231,8 @@ public class GeckoViewActivity extends Activity {
final String title = getString(resId, Uri.parse(uri).getAuthority());
final BasicGeckoViewPrompt prompt = (BasicGeckoViewPrompt)
mGeckoView.getPromptDelegate();
prompt.promptForPermission(view, title, callback);
mGeckoSession.getPromptDelegate();
prompt.promptForPermission(session, title, callback);
}
private void normalizeMediaName(final GeckoBundle[] sources) {
@ -255,7 +260,7 @@ public class GeckoViewActivity extends Activity {
}
@Override
public void requestMediaPermission(final GeckoView view, final String uri,
public void requestMediaPermission(final GeckoSession session, final String uri,
final GeckoBundle[] video,
final GeckoBundle[] audio,
final MediaCallback callback) {
@ -273,33 +278,33 @@ public class GeckoViewActivity extends Activity {
normalizeMediaName(audio);
final BasicGeckoViewPrompt prompt = (BasicGeckoViewPrompt)
mGeckoView.getPromptDelegate();
prompt.promptForMedia(view, title, video, audio, callback);
mGeckoSession.getPromptDelegate();
prompt.promptForMedia(session, title, video, audio, callback);
}
}
private class Navigation implements GeckoView.NavigationListener {
private class Navigation implements GeckoSession.NavigationListener {
@Override
public void onLocationChange(GeckoView view, final String url) {
public void onLocationChange(GeckoSession session, final String url) {
}
@Override
public void onCanGoBack(GeckoView view, boolean canGoBack) {
public void onCanGoBack(GeckoSession session, boolean canGoBack) {
}
@Override
public void onCanGoForward(GeckoView view, boolean value) {
public void onCanGoForward(GeckoSession session, boolean value) {
}
@Override
public boolean onLoadUri(final GeckoView view, final String uri,
public boolean onLoadUri(final GeckoSession session, final String uri,
final TargetWindow where) {
Log.d(LOGTAG, "onLoadUri=" + uri +
" where=" + where);
if (where != TargetWindow.NEW) {
return false;
}
view.loadUri(uri);
session.loadUri(uri);
return true;
}
}

Просмотреть файл

@ -56,7 +56,7 @@ class GeckoViewRemoteDebugger extends GeckoViewModule {
let windowId = this.window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils)
.outerWindowID;
let portOrPath = this.settings.debuggerSocketDir +
let portOrPath = (this.settings.debuggerSocketDir || this.settings.dataDir) +
"/firefox-debugger-socket-" +
windowId;
this._usbDebugger.start(portOrPath);

Просмотреть файл

@ -216,6 +216,12 @@ def _repack(app_finder, l10n_finder, copier, formatter, non_chrome=set()):
if not formatter.contains(p):
formatter.add(p, f)
# Resources in `localization` directories are packaged from the source and then
# if localized versions are present in the l10n dir, we package them as well
# keeping the source dir resources as a runtime fallback.
for p, f in l10n_finder.find('**/localization'):
formatter.add(p, f)
# Transplant jar preloading information.
for path, log in app_finder.jarlogs.iteritems():
assert isinstance(copier[path], Jarrer)

1
servo/.gitignore поставляемый
Просмотреть файл

@ -36,3 +36,4 @@ Servo.app
.vscode
/unminified-js

4
servo/Cargo.lock сгенерированный
Просмотреть файл

@ -3476,7 +3476,7 @@ dependencies = [
[[package]]
name = "webrender"
version = "0.53.1"
source = "git+https://github.com/servo/webrender#058dd77d35d938974d16dcf12e2f75a0a6e4cdef"
source = "git+https://github.com/servo/webrender#71c1f3dca3173a977610e5f7a818deb155cc8cf4"
dependencies = [
"app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3503,7 +3503,7 @@ dependencies = [
[[package]]
name = "webrender_api"
version = "0.53.1"
source = "git+https://github.com/servo/webrender#058dd77d35d938974d16dcf12e2f75a0a6e4cdef"
source = "git+https://github.com/servo/webrender#71c1f3dca3173a977610e5f7a818deb155cc8cf4"
dependencies = [
"app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",

Просмотреть файл

@ -549,6 +549,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
sticky_data.margins,
sticky_data.vertical_offset_bounds,
sticky_data.horizontal_offset_bounds,
webrender_api::LayoutVector2D::zero(),
);
builder.pop_clip_id();
id

Просмотреть файл

@ -31,6 +31,7 @@ use dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
use std::ascii::AsciiExt;
use std::collections::HashSet;
use std::default::Default;
use std::rc::Rc;
use style::attr::AttrValue;
@ -277,6 +278,38 @@ impl HTMLElementMethods for HTMLElement {
}
}
// https://html.spec.whatwg.org/multipage/#attr-itemtype
fn Itemtypes(&self) -> Option<Vec<DOMString>> {
let atoms = self.element.get_tokenlist_attribute(&local_name!("itemtype"), );
if atoms.is_empty() {
return None;
}
let mut item_attr_values = HashSet::new();
for attr_value in &atoms {
item_attr_values.insert(DOMString::from(String::from(attr_value.trim())));
}
Some(item_attr_values.into_iter().collect())
}
// https://html.spec.whatwg.org/multipage/#names:-the-itemprop-attribute
fn PropertyNames(&self) -> Option<Vec<DOMString>> {
let atoms = self.element.get_tokenlist_attribute(&local_name!("itemprop"), );
if atoms.is_empty() {
return None;
}
let mut item_attr_values = HashSet::new();
for attr_value in &atoms {
item_attr_values.insert(DOMString::from(String::from(attr_value.trim())));
}
Some(item_attr_values.into_iter().collect())
}
// https://html.spec.whatwg.org/multipage/#dom-click
fn Click(&self) {
if !self.upcast::<Element>().disabled_state() {
@ -577,4 +610,17 @@ impl VirtualMethods for HTMLElement {
}
self.update_sequentially_focusable_status();
}
fn parse_plain_attribute(&self, name: &LocalName, value: DOMString) -> AttrValue {
match name {
&local_name!("itemprop") => AttrValue::from_serialized_tokenlist(value.into()),
&local_name!("itemtype") => AttrValue::from_serialized_tokenlist(value.into()),
_ => {
self.super_type().unwrap().parse_plain_attribute(
name,
value,
)
},
}
}
}

Просмотреть файл

@ -18,9 +18,14 @@ interface HTMLElement : Element {
// microdata
// attribute boolean itemScope;
// attribute DOMString itemId;
//readonly attribute HTMLPropertiesCollection properties;
// attribute any itemValue; // acts as DOMString on setting
[Pref="dom.microdata.testing.enabled"]
sequence<DOMString>? propertyNames();
[Pref="dom.microdata.testing.enabled"]
sequence<DOMString>? itemtypes();
// user interaction
[CEReactions]

Просмотреть файл

@ -6,6 +6,7 @@
"dom.customelements.enabled": true,
"dom.forcetouch.enabled": false,
"dom.gamepad.enabled": false,
"dom.microdata.testing.enabled": true,
"dom.mouseevent.which.enabled": false,
"dom.mozbrowser.enabled": false,
"dom.mutation_observer.enabled": false,

Просмотреть файл

@ -78,3 +78,6 @@ try:
- 'sm-msan'
- 'sm-fuzzing'
- 'sm-rust-bindings'
'win32':
- 'sm-plain'
- 'sm-compacting'

Просмотреть файл

@ -116,7 +116,11 @@ qr-talos:
- talos-tp5o
- talos-perf-reftest
- talos-perf-reftest-singletons
- talos-tp6
- talos-tp6-stylo-threads
- talos-speedometer
- talos-h1
- talos-h2
qr-tests:
- cppunit

Просмотреть файл

@ -97,7 +97,7 @@ function run_analysis () {
(
cd "$analysis_dir"
$PYTHON "$ANALYSIS_SRCDIR/analyze.py" --buildcommand="$GECKO_DIR/testing/mozharness/scripts/spidermonkey/build.${build_type}"
$PYTHON "$ANALYSIS_SRCDIR/analyze.py" --buildcommand="$GECKO_DIR/taskcluster/scripts/builder/hazard-${build_type}.sh"
)
}

Просмотреть файл

@ -45,11 +45,11 @@ git checkout $SCCACHE_REVISION
# story in https://bugzilla.mozilla.org/show_bug.cgi?id=1163171#c26.
case "$(uname -s)" in
Linux)
OPENSSL_TARBALL=openssl-1.1.0f.tar.gz
OPENSSL_TARBALL=openssl-1.1.0g.tar.gz
curl -O https://www.openssl.org/source/$OPENSSL_TARBALL
cat >$OPENSSL_TARBALL.sha256sum <<EOF
12f746f3f2493b2f39da7ecf63d7ee19c6ac9ec6a4fcd8c229da8a522cb12765 openssl-1.1.0f.tar.gz
de4d501267da39310905cb6dc8c6121f7a2cad45a7707f76df828fe1b85073af openssl-1.1.0g.tar.gz
EOF
cat $OPENSSL_TARBALL.sha256sum
sha256sum -c $OPENSSL_TARBALL.sha256sum

Просмотреть файл

@ -41,7 +41,7 @@ RELEASE_PROMOTION_CONFIG = {
'do_not_optimize': [],
},
'promote_firefox': {
'target_tasks_method': '%(project)s_desktop_promotion',
'target_tasks_method': '{project}_desktop_promotion',
'previous_graph_kinds': [
'build', 'build-signing', 'repackage', 'repackage-signing',
],
@ -155,7 +155,8 @@ def release_promotion_action(parameters, input, task_group_id, task_id, task):
promotion_config = RELEASE_PROMOTION_CONFIG[release_promotion_flavor]
target_tasks_method = input.get(
'target_tasks_method', promotion_config['target_tasks_method']
'target_tasks_method',
promotion_config['target_tasks_method'].format(project=parameters['project'])
)
previous_graph_kinds = input.get(
'previous_graph_kinds', promotion_config['previous_graph_kinds']

Просмотреть файл

@ -64,7 +64,9 @@ def create_tasks(taskgraph, label_to_taskid, params, decision_task_id=None):
task_def['taskGroupId'] = task_group_id
task_def['schedulerId'] = scheduler_id
with futures.ThreadPoolExecutor(CONCURRENCY) as e:
# If `testing` is True, then run without parallelization
concurrency = CONCURRENCY if not testing else 1
with futures.ThreadPoolExecutor(concurrency) as e:
fs = {}
# We can't submit a task until its dependencies have been submitted.
@ -129,6 +131,8 @@ def create_task(session, task_id, label, task_def):
if testing:
json.dump([task_id, task_def], sys.stdout,
sort_keys=True, indent=4, separators=(',', ': '))
# add a newline
print("")
return
logger.debug("Creating task with taskId {} for {}".format(task_id, label))

8
testing/geckodriver/Cargo.lock сгенерированный
Просмотреть файл

@ -359,7 +359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rand"
version = "0.3.17"
version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -486,7 +486,7 @@ name = "tempdir"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -592,7 +592,7 @@ name = "uuid"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -697,7 +697,7 @@ dependencies = [
"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"
"checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356"
"checksum podio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e5422a1ee1bc57cc47ae717b0137314258138f38fd5f3cea083f43a9725383a0"
"checksum rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "61efcbcd9fa8d8fbb07c84e34a8af18a1ff177b449689ad38a6e9457ecc7b2ae"
"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd"
"checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509"
"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"
"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db"

Просмотреть файл

@ -1,4 +0,0 @@
config = {
'build_command': "build.browser",
'expect_file': "expect.browser.json",
}

Просмотреть файл

@ -1,4 +0,0 @@
config = {
'build_command': "build.shell",
'expect_file': "expect.shell.json",
}

Просмотреть файл

@ -1,103 +0,0 @@
import os
HG_SHARE_BASE_DIR = "/builds/hg-shared"
PYTHON_DIR = "/tools/python27"
SRCDIR = "source"
config = {
"platform": "linux64",
"build_type": "br-haz",
"log_name": "hazards",
"shell-objdir": "obj-opt-js",
"analysis-dir": "analysis",
"analysis-objdir": "obj-analyzed",
"srcdir": SRCDIR,
"analysis-scriptdir": "js/src/devtools/rootAnalysis",
# These paths are relative to the tooltool checkout location
"sixgill": "sixgill/usr/libexec/sixgill",
"sixgill_bin": "sixgill/usr/bin",
"python": "python",
"exes": {
'gittool.py': '%(abs_tools_dir)s/buildfarm/utils/gittool.py',
'tooltool.py': '/tools/tooltool.py',
"virtualenv": "/tools/virtualenv/bin/virtualenv",
},
"force_clobber": True,
'vcs_share_base': HG_SHARE_BASE_DIR,
"repos": [{
"repo": "https://hg.mozilla.org/build/tools",
"branch": "default",
"dest": "tools"
}],
"upload_remote_baseuri": 'https://ftp-ssl.mozilla.org/',
"default_blob_upload_servers": [
"https://blobupload.elasticbeanstalk.com",
],
"blob_uploader_auth_file": os.path.join(os.getcwd(), "oauth.txt"),
"virtualenv_path": '%s/venv' % os.getcwd(),
'tools_dir': "/tools",
'compiler_manifest': "build/gcc.manifest",
'sixgill_manifest': "build/sixgill.manifest",
# Mock.
"mock_packages": [
"autoconf213", "mozilla-python27-mercurial", "ccache",
"zip", "zlib-devel", "glibc-static",
"openssh-clients", "mpfr", "wget", "rsync",
# For building the JS shell
"gmp-devel", "nspr", "nspr-devel",
# For building the browser
"dbus-devel", "dbus-glib-devel", "hal-devel",
"libICE-devel", "libIDL-devel",
# For mach resource-usage
"python-psutil",
'zip', 'git',
'libstdc++-static', 'perl-Test-Simple', 'perl-Config-General',
'gtk2-devel', 'libnotify-devel', 'yasm',
'alsa-lib-devel', 'libcurl-devel',
'wireless-tools-devel', 'libX11-devel',
'libXt-devel', 'mesa-libGL-devel',
'gnome-vfs2-devel', 'GConf2-devel', 'wget',
'mpfr', # required for system compiler
'xorg-x11-font*', # fonts required for PGO
'imake', # required for makedepend!?!
'pulseaudio-libs-devel',
'freetype-2.3.11-6.el6_1.8.x86_64',
'freetype-devel-2.3.11-6.el6_1.8.x86_64',
'gstreamer-devel', 'gstreamer-plugins-base-devel',
],
"mock_files": [
("/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"),
('/home/cltbld/.hgrc', '/builds/.hgrc'),
('/builds/relengapi.tok', '/builds/relengapi.tok'),
("/tools/tooltool.py", "/tools/tooltool.py"),
('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
],
"env_replacements": {
"pythondir": PYTHON_DIR,
"gccdir": "%(abs_work_dir)s/gcc",
"sixgilldir": "%(abs_work_dir)s/sixgill",
},
"partial_env": {
"PATH": "%(pythondir)s/bin:%(gccdir)s/bin:%(PATH)s",
"LD_LIBRARY_PATH": "%(sixgilldir)s/usr/lib64",
# Suppress the mercurial-setup check. When running in automation, this
# is redundant with MOZ_AUTOMATION, but a local developer-mode build
# will have the mach state directory set to a nonstandard location and
# therefore will always claim that mercurial-setup has not been run.
"I_PREFER_A_SUBOPTIMAL_MERCURIAL_EXPERIENCE": "1",
},
}

Просмотреть файл

@ -1,38 +0,0 @@
# This config file is for locally testing spidermonkey_build.py. It provides
# the values that would otherwise be provided by buildbot.
BRANCH = "local-src"
HOME = "/home/sfink"
REPO = HOME + "/src/MI-GC"
config = {
"hgurl": "https://hg.mozilla.org/",
"python": "python",
"sixgill": HOME + "/src/sixgill",
"sixgill_bin": HOME + "/src/sixgill/bin",
"repo": REPO,
"repos": [{
"repo": REPO,
"branch": "default",
"dest": BRANCH,
}, {
"repo": "https://hg.mozilla.org/build/tools",
"branch": "default",
"dest": "tools"
}],
"tools_dir": "/tools",
"mock_target": "mozilla-centos6-x86_64",
"upload_remote_basepath": "/tmp/upload-base",
"upload_ssh_server": "localhost",
"upload_ssh_key": "/home/sfink/.ssh/id_rsa",
"upload_ssh_user": "sfink",
"upload_label": "linux64-br-haz",
# For testing tryserver uploads (directory structure is different)
#"branch": "try",
#"revision": "deadbeef1234",
}

Просмотреть файл

@ -13,6 +13,5 @@ scripts
mobile_l10n.rst
mobile_partner_repack.rst
multil10n.rst
spidermonkey_build.rst
talos_script.rst
web_platform_tests.rst

Просмотреть файл

@ -1,7 +0,0 @@
spidermonkey_build module
=========================
.. automodule:: spidermonkey_build
:members:
:undoc-members:
:show-inheritance:

Просмотреть файл

@ -1,241 +0,0 @@
import os
import json
import re
from mozharness.base.errors import MakefileErrorList
from mozharness.mozilla.buildbot import TBPL_WARNING
class HazardError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
# Logging ends up calling splitlines directly on what is being logged, which would fail.
def splitlines(self):
return str(self).splitlines()
class HazardAnalysis(object):
def clobber_shell(self, builder):
"""Clobber the specially-built JS shell used to run the analysis"""
dirs = builder.query_abs_dirs()
builder.rmtree(dirs['shell_objdir'])
def configure_shell(self, builder):
"""Configure the specially-built JS shell used to run the analysis"""
dirs = builder.query_abs_dirs()
if not os.path.exists(dirs['shell_objdir']):
builder.mkdir_p(dirs['shell_objdir'])
js_src_dir = os.path.join(dirs['gecko_src'], 'js', 'src')
rc = builder.run_command(['autoconf-2.13'],
cwd=js_src_dir,
env=builder.env,
error_list=MakefileErrorList)
if rc != 0:
rc = builder.run_command(['autoconf2.13'],
cwd=js_src_dir,
env=builder.env,
error_list=MakefileErrorList)
if rc != 0:
raise HazardError("autoconf failed, can't continue.")
rc = builder.run_command([os.path.join(js_src_dir, 'configure'),
'--enable-optimize',
'--disable-debug',
'--enable-ctypes',
'--with-system-nspr',
'--without-intl-api'],
cwd=dirs['shell_objdir'],
env=builder.env,
error_list=MakefileErrorList)
if rc != 0:
raise HazardError("Configure failed, can't continue.")
def build_shell(self, builder):
"""Build a JS shell specifically for running the analysis"""
dirs = builder.query_abs_dirs()
rc = builder.run_command(['make', '-j', str(builder.config.get('concurrency', 4)), '-s'],
cwd=dirs['shell_objdir'],
env=builder.env,
error_list=MakefileErrorList)
if rc != 0:
raise HazardError("Build failed, can't continue.")
def clobber(self, builder):
"""Clobber all of the old analysis data. Note that theoretically we could do
incremental analyses, but they seem to still be buggy."""
dirs = builder.query_abs_dirs()
builder.rmtree(dirs['abs_analysis_dir'])
builder.rmtree(dirs['abs_analyzed_objdir'])
def setup(self, builder):
"""Prepare the config files and scripts for running the analysis"""
dirs = builder.query_abs_dirs()
analysis_dir = dirs['abs_analysis_dir']
if not os.path.exists(analysis_dir):
builder.mkdir_p(analysis_dir)
js_src_dir = os.path.join(dirs['gecko_src'], 'js', 'src')
values = {
'js': os.path.join(dirs['shell_objdir'], 'dist', 'bin', 'js'),
'analysis_scriptdir': os.path.join(js_src_dir, 'devtools', 'rootAnalysis'),
'source_objdir': dirs['abs_analyzed_objdir'],
'source': os.path.join(dirs['abs_work_dir'], 'source'),
'sixgill': os.path.join(dirs['abs_work_dir'], builder.config['sixgill']),
'sixgill_bin': os.path.join(dirs['abs_work_dir'], builder.config['sixgill_bin']),
'gcc_bin': os.path.join(dirs['abs_work_dir'], 'gcc'),
}
defaults = """
js = '%(js)s'
analysis_scriptdir = '%(analysis_scriptdir)s'
objdir = '%(source_objdir)s'
source = '%(source)s'
sixgill = '%(sixgill)s'
sixgill_bin = '%(sixgill_bin)s'
gcc_bin = '%(gcc_bin)s'
jobs = 4
""" % values
defaults_path = os.path.join(analysis_dir, 'defaults.py')
file(defaults_path, "w").write(defaults)
builder.log("Wrote analysis config file " + defaults_path)
build_script = builder.config['build_command']
builder.copyfile(os.path.join(dirs['mozharness_scriptdir'],
os.path.join('spidermonkey', build_script)),
os.path.join(analysis_dir, build_script),
copystat=True)
def run(self, builder, env, error_list):
"""Execute the analysis, which consists of building all analyzed
source code with a GCC plugin active that siphons off the interesting
data, then running some JS scripts over the databases created by
the plugin."""
dirs = builder.query_abs_dirs()
analysis_dir = dirs['abs_analysis_dir']
analysis_scriptdir = os.path.join(dirs['abs_work_dir'], dirs['analysis_scriptdir'])
build_script = builder.config['build_command']
build_script = os.path.abspath(os.path.join(analysis_dir, build_script))
cmd = [
builder.config['python'],
os.path.join(analysis_scriptdir, 'analyze.py'),
"--source", dirs['gecko_src'],
"--buildcommand", build_script,
]
retval = builder.run_command(cmd,
cwd=analysis_dir,
env=env,
error_list=error_list)
if retval != 0:
raise HazardError("failed to build")
def collect_output(self, builder):
"""Gather up the analysis output and place in the upload dir."""
dirs = builder.query_abs_dirs()
analysis_dir = dirs['abs_analysis_dir']
upload_dir = dirs['abs_blob_upload_dir']
builder.mkdir_p(upload_dir)
files = (('rootingHazards.txt',
'rooting_hazards',
'list of rooting hazards, unsafe references, and extra roots'),
('gcFunctions.txt',
'gcFunctions',
'list of functions that can gc, and why'),
('allFunctions.txt',
'allFunctions',
'list of all functions that were compiled'),
('gcTypes.txt',
'gcTypes',
'list of types containing unrooted gc pointers'),
('unnecessary.txt',
'extra',
'list of extra roots (rooting with no GC function in scope)'),
('refs.txt',
'refs',
'list of unsafe references to unrooted pointers'),
('hazards.txt',
'hazards',
'list of just the hazards, together with gcFunction reason for each'))
for f, short, long in files:
builder.copy_to_upload_dir(os.path.join(analysis_dir, f),
short_desc=short,
long_desc=long,
compress=False, # blobber will compress
upload_dir=upload_dir)
print("== Hazards (temporarily inline here, beware weirdly interleaved output, see bug 1211402) ==")
print(file(os.path.join(analysis_dir, "hazards.txt")).read())
def upload_results(self, builder):
"""Upload the results of the analysis."""
pass
def check_expectations(self, builder):
"""Compare the actual to expected number of problems."""
if 'expect_file' not in builder.config:
builder.info('No expect_file given; skipping comparison with expected hazard count')
return
dirs = builder.query_abs_dirs()
analysis_dir = dirs['abs_analysis_dir']
analysis_scriptdir = os.path.join(dirs['gecko_src'], 'js', 'src', 'devtools', 'rootAnalysis')
expect_file = os.path.join(analysis_scriptdir, builder.config['expect_file'])
expect = builder.read_from_file(expect_file)
if expect is None:
raise HazardError("could not load expectation file")
data = json.loads(expect)
num_hazards = 0
num_refs = 0
with builder.opened(os.path.join(analysis_dir, "rootingHazards.txt")) as (hazards_fh, err):
if err:
raise HazardError("hazards file required")
for line in hazards_fh:
m = re.match(r"^Function.*has unrooted.*live across GC call", line)
if m:
num_hazards += 1
m = re.match(r'^Function.*takes unsafe address of unrooted', line)
if m:
num_refs += 1
expect_hazards = data.get('expect-hazards')
status = []
if expect_hazards is None:
status.append("%d hazards" % num_hazards)
else:
status.append("%d/%d hazards allowed" % (num_hazards, expect_hazards))
if expect_hazards is not None and expect_hazards != num_hazards:
if expect_hazards < num_hazards:
builder.warning("TEST-UNEXPECTED-FAIL %d more hazards than expected (expected %d, saw %d)" %
(num_hazards - expect_hazards, expect_hazards, num_hazards))
builder.buildbot_status(TBPL_WARNING)
else:
builder.info("%d fewer hazards than expected! (expected %d, saw %d)" %
(expect_hazards - num_hazards, expect_hazards, num_hazards))
expect_refs = data.get('expect-refs')
if expect_refs is None:
status.append("%d unsafe refs" % num_refs)
else:
status.append("%d/%d unsafe refs allowed" % (num_refs, expect_refs))
if expect_refs is not None and expect_refs != num_refs:
if expect_refs < num_refs:
builder.warning("TEST-UNEXPECTED-FAIL %d more unsafe refs than expected (expected %d, saw %d)" %
(num_refs - expect_refs, expect_refs, num_refs))
builder.buildbot_status(TBPL_WARNING)
else:
builder.info("%d fewer unsafe refs than expected! (expected %d, saw %d)" %
(expect_refs - num_refs, expect_refs, num_refs))
builder.info("TinderboxPrint: " + ", ".join(status))

Просмотреть файл

@ -1,485 +0,0 @@
#!/usr/bin/env python
# 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/.
import os
import sys
import copy
from datetime import datetime
from functools import wraps
sys.path.insert(1, os.path.dirname(sys.path[0]))
from mozharness.base.errors import MakefileErrorList
from mozharness.base.script import BaseScript
from mozharness.base.transfer import TransferMixin
from mozharness.base.vcs.vcsbase import VCSMixin
from mozharness.mozilla.blob_upload import BlobUploadMixin, blobupload_config_options
from mozharness.mozilla.buildbot import BuildbotMixin
from mozharness.mozilla.building.hazards import HazardError, HazardAnalysis
from mozharness.mozilla.purge import PurgeMixin
from mozharness.mozilla.mock import MockMixin
from mozharness.mozilla.tooltool import TooltoolMixin
SUCCESS, WARNINGS, FAILURE, EXCEPTION, RETRY = xrange(5)
def requires(*queries):
"""Wrapper for detecting problems where some bit of information
required by the wrapped step is unavailable. Use it put prepending
@requires("foo"), which will check whether self.query_foo() returns
something useful."""
def make_wrapper(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
for query in queries:
val = query(self)
goodval = not (val is None or "None" in str(val))
assert goodval, f.__name__ + " requires " + query.__name__ + " to return a value"
return f(self, *args, **kwargs)
return wrapper
return make_wrapper
nuisance_env_vars = ['TERMCAP', 'LS_COLORS', 'PWD', '_']
class SpidermonkeyBuild(MockMixin,
PurgeMixin, BaseScript,
VCSMixin, BuildbotMixin, TooltoolMixin, TransferMixin, BlobUploadMixin):
config_options = [
[["--repo"], {
"dest": "repo",
"help": "which gecko repo to get spidermonkey from",
}],
[["--source"], {
"dest": "source",
"help": "directory containing gecko source tree (instead of --repo)",
}],
[["--revision"], {
"dest": "revision",
}],
[["--branch"], {
"dest": "branch",
}],
[["--vcs-share-base"], {
"dest": "vcs_share_base",
"help": "base directory for shared repositories",
}],
[["-j"], {
"dest": "concurrency",
"type": int,
"default": 4,
"help": "number of simultaneous jobs used while building the shell " +
"(currently ignored for the analyzed build",
}] + copy.deepcopy(blobupload_config_options)
]
def __init__(self):
super(SpidermonkeyBuild, self).__init__(
config_options=self.config_options,
# other stuff
all_actions=[
'purge',
'checkout-tools',
# First, build an optimized JS shell for running the analysis
'checkout-source',
'get-blobs',
'clobber-shell',
'configure-shell',
'build-shell',
# Next, build a tree with the analysis plugin active. Note that
# we are using the same checkout for the JS shell build and the
# build of the source to be analyzed, which is a little
# unnecessary (no need to rebuild the JS shell all the time).
# (Different objdir, though.)
'clobber-analysis',
'setup-analysis',
'run-analysis',
'collect-analysis-output',
'upload-analysis',
'check-expectations',
],
default_actions=[
'purge',
'checkout-tools',
'checkout-source',
'get-blobs',
'clobber-shell',
'configure-shell',
'build-shell',
'clobber-analysis',
'setup-analysis',
'run-analysis',
'collect-analysis-output',
# Temporarily disabled, see bug 1211402
# 'upload-analysis',
'check-expectations',
],
config={
'default_vcs': 'hg',
'vcs_share_base': os.environ.get('HG_SHARE_BASE_DIR'),
'ccache': True,
'buildbot_json_path': os.environ.get('PROPERTIES_FILE'),
'tools_repo': 'https://hg.mozilla.org/build/tools',
'upload_ssh_server': None,
'upload_remote_basepath': None,
'enable_try_uploads': True,
'source': None,
'stage_product': 'firefox',
},
)
self.buildid = None
self.create_virtualenv()
self.analysis = HazardAnalysis()
def _pre_config_lock(self, rw_config):
if self.config['source']:
self.config['srcdir'] = self.config['source']
super(SpidermonkeyBuild, self)._pre_config_lock(rw_config)
if self.buildbot_config is None:
self.info("Reading buildbot build properties...")
self.read_buildbot_config()
if self.buildbot_config:
bb_props = [('mock_target', 'mock_target', None),
('hgurl', 'hgurl', None),
('clobberer_url', 'clobberer_url',
'https://api.pub.build.mozilla.org/clobberer/lastclobber'),
('force_clobber', 'force_clobber', None),
('branch', 'blob_upload_branch', None),
]
buildbot_props = self.buildbot_config.get('properties', {})
for bb_prop, cfg_prop, default in bb_props:
if not self.config.get(cfg_prop) and buildbot_props.get(bb_prop, default):
self.config[cfg_prop] = buildbot_props.get(bb_prop, default)
self.config['is_automation'] = True
else:
self.config['is_automation'] = False
self.config.setdefault('blob_upload_branch', 'devel')
dirs = self.query_abs_dirs()
replacements = self.config['env_replacements'].copy()
for k, v in replacements.items():
replacements[k] = v % dirs
self.env = self.query_env(replace_dict=replacements,
partial_env=self.config['partial_env'],
purge_env=nuisance_env_vars)
self.env['MOZ_UPLOAD_DIR'] = dirs['abs_blob_upload_dir']
self.env['TOOLTOOL_DIR'] = dirs['abs_work_dir']
def query_abs_dirs(self):
if self.abs_dirs:
return self.abs_dirs
abs_dirs = BaseScript.query_abs_dirs(self)
abs_work_dir = abs_dirs['abs_work_dir']
dirs = {
'shell_objdir':
os.path.join(abs_work_dir, self.config['shell-objdir']),
'mozharness_scriptdir':
os.path.abspath(os.path.dirname(__file__)),
'abs_analysis_dir':
os.path.join(abs_work_dir, self.config['analysis-dir']),
'abs_analyzed_objdir':
os.path.join(abs_work_dir, self.config['srcdir'], self.config['analysis-objdir']),
'analysis_scriptdir':
os.path.join(self.config['srcdir'], self.config['analysis-scriptdir']),
'abs_tools_dir':
os.path.join(abs_dirs['base_work_dir'], 'tools'),
'gecko_src':
os.path.join(abs_work_dir, self.config['srcdir']),
'abs_blob_upload_dir':
os.path.join(abs_work_dir, 'blobber_upload_dir'),
}
abs_dirs.update(dirs)
self.abs_dirs = abs_dirs
return self.abs_dirs
def query_repo(self):
if self.config.get('repo'):
return self.config['repo']
elif self.buildbot_config and 'properties' in self.buildbot_config:
return self.config['hgurl'] + self.buildbot_config['properties']['repo_path']
else:
return None
def query_revision(self):
if 'revision' in self.buildbot_properties:
revision = self.buildbot_properties['revision']
elif self.buildbot_config and 'sourcestamp' in self.buildbot_config:
revision = self.buildbot_config['sourcestamp']['revision']
else:
# Useful for local testing. In actual use, this would always be
# None.
revision = self.config.get('revision')
return revision
def query_branch(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
return self.buildbot_config['properties']['branch']
elif 'branch' in self.config:
# Used for locally testing try vs non-try
return self.config['branch']
else:
return os.path.basename(self.query_repo())
def query_compiler_manifest(self):
dirs = self.query_abs_dirs()
manifest = os.path.join(dirs['abs_work_dir'], dirs['analysis_scriptdir'],
self.config['compiler_manifest'])
if os.path.exists(manifest):
return manifest
return os.path.join(dirs['abs_work_dir'], self.config['compiler_manifest'])
def query_sixgill_manifest(self):
dirs = self.query_abs_dirs()
manifest = os.path.join(dirs['abs_work_dir'], dirs['analysis_scriptdir'],
self.config['sixgill_manifest'])
if os.path.exists(manifest):
return manifest
return os.path.join(dirs['abs_work_dir'], self.config['sixgill_manifest'])
def query_buildid(self):
if self.buildid:
return self.buildid
if self.buildbot_config and 'properties' in self.buildbot_config:
self.buildid = self.buildbot_config['properties'].get('buildid')
if not self.buildid:
self.buildid = datetime.now().strftime("%Y%m%d%H%M%S")
return self.buildid
def query_upload_ssh_server(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
return self.buildbot_config['properties']['upload_ssh_server']
else:
return self.config['upload_ssh_server']
def query_upload_ssh_key(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
key = self.buildbot_config['properties']['upload_ssh_key']
else:
key = self.config['upload_ssh_key']
if self.mock_enabled and not key.startswith("/"):
key = "/home/mock_mozilla/.ssh/" + key
return key
def query_upload_ssh_user(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
return self.buildbot_config['properties']['upload_ssh_user']
else:
return self.config['upload_ssh_user']
def query_product(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
return self.buildbot_config['properties']['product']
else:
return self.config['product']
def query_upload_remote_basepath(self):
if self.config.get('upload_remote_basepath'):
return self.config['upload_remote_basepath']
else:
return "/pub/mozilla.org/{product}".format(
product=self.query_product(),
)
def query_upload_remote_baseuri(self):
baseuri = self.config.get('upload_remote_baseuri')
if self.buildbot_config and 'properties' in self.buildbot_config:
buildprops = self.buildbot_config['properties']
if 'upload_remote_baseuri' in buildprops:
baseuri = buildprops['upload_remote_baseuri']
return baseuri.strip("/") if baseuri else None
def query_target(self):
if self.buildbot_config and 'properties' in self.buildbot_config:
return self.buildbot_config['properties']['platform']
else:
return self.config.get('target')
def query_upload_path(self):
branch = self.query_branch()
common = {
'basepath': self.query_upload_remote_basepath(),
'branch': branch,
'target': self.query_target(),
}
if branch == 'try':
if not self.config['enable_try_uploads']:
return None
try:
user = self.buildbot_config['sourcestamp']['changes'][0]['who']
except (KeyError, TypeError):
user = "unknown"
return "{basepath}/try-builds/{user}-{rev}/{branch}-{target}".format(
user=user,
rev=self.query_revision(),
**common
)
else:
return "{basepath}/tinderbox-builds/{branch}-{target}/{buildid}".format(
buildid=self.query_buildid(),
**common
)
def query_do_upload(self):
if self.query_branch() == 'try':
return self.config.get('enable_try_uploads')
return True
# Actions {{{2
def purge(self):
dirs = self.query_abs_dirs()
self.info("purging, abs_upload_dir=" + dirs['abs_upload_dir'])
PurgeMixin.clobber(
self,
always_clobber_dirs=[
dirs['abs_upload_dir'],
],
)
def checkout_tools(self):
dirs = self.query_abs_dirs()
# If running from within a directory also passed as the --source dir,
# this has the danger of clobbering <source>/tools/
if self.config['source']:
srcdir = self.config['source']
if os.path.samefile(srcdir, os.path.dirname(dirs['abs_tools_dir'])):
raise Exception("Cannot run from source checkout to avoid overwriting subdirs")
rev = self.vcs_checkout(
vcs='hg',
branch="default",
repo=self.config['tools_repo'],
clean=False,
dest=dirs['abs_tools_dir'],
)
self.set_buildbot_property("tools_revision", rev, write_to_file=True)
def do_checkout_source(self):
# --source option means to use an existing source directory instead of checking one out.
if self.config['source']:
return
dirs = self.query_abs_dirs()
dest = dirs['gecko_src']
# Pre-create the directory to appease the share extension
if not os.path.exists(dest):
self.mkdir_p(dest)
rev = self.vcs_checkout(
repo=self.query_repo(),
dest=dest,
revision=self.query_revision(),
branch=self.config.get('branch'),
clean=True,
)
self.set_buildbot_property('source_revision', rev, write_to_file=True)
def checkout_source(self):
try:
self.do_checkout_source()
except Exception as e:
self.fatal("checkout failed: " + str(e), exit_code=RETRY)
def get_blobs(self):
work_dir = self.query_abs_dirs()['abs_work_dir']
if not os.path.exists(work_dir):
self.mkdir_p(work_dir)
self.tooltool_fetch(self.query_compiler_manifest(), output_dir=work_dir)
self.tooltool_fetch(self.query_sixgill_manifest(), output_dir=work_dir)
def clobber_shell(self):
self.analysis.clobber_shell(self)
def configure_shell(self):
self.enable_mock()
try:
self.analysis.configure_shell(self)
except HazardError as e:
self.fatal(e, exit_code=FAILURE)
self.disable_mock()
def build_shell(self):
self.enable_mock()
try:
self.analysis.build_shell(self)
except HazardError as e:
self.fatal(e, exit_code=FAILURE)
self.disable_mock()
def clobber_analysis(self):
self.analysis.clobber(self)
def setup_analysis(self):
self.analysis.setup(self)
def run_analysis(self):
self.enable_mock()
upload_dir = self.query_abs_dirs()['abs_blob_upload_dir']
if not os.path.exists(upload_dir):
self.mkdir_p(upload_dir)
env = self.env.copy()
env['MOZ_UPLOAD_DIR'] = upload_dir
try:
self.analysis.run(self, env=env, error_list=MakefileErrorList)
except HazardError as e:
self.fatal(e, exit_code=FAILURE)
self.disable_mock()
def collect_analysis_output(self):
self.analysis.collect_output(self)
def upload_analysis(self):
if not self.config['is_automation']:
return
if not self.query_do_upload():
self.info("Uploads disabled for this build. Skipping...")
return
self.enable_mock()
try:
self.analysis.upload_results(self)
except HazardError as e:
self.error(e)
self.return_code = WARNINGS
self.disable_mock()
def check_expectations(self):
try:
self.analysis.check_expectations(self)
except HazardError as e:
self.fatal(e, exit_code=FAILURE)
# main {{{1
if __name__ == '__main__':
myScript = SpidermonkeyBuild()
myScript.run_and_exit()

Просмотреть файл

@ -76,7 +76,7 @@ function test_tone_change_events(testFunc, toneChanges, desc) {
const now = Date.now();
const duration = now - lastEventTime;
assert_approx_equals(duration, expectedDuration, 50,
assert_approx_equals(duration, expectedDuration, 150,
`Expect tonechange event for "${tone}" to be fired approximately after ${expectedDuration} seconds`);
lastEventTime = now;

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше