Bug 983241 - Allow filterNodeSoftware->SetInput(*, nullptr) in order to drop reference to input surface / filter. r=Bas

This commit is contained in:
Markus Stange 2014-09-25 15:19:28 -04:00
Родитель 9e1c33c018
Коммит 33956e6925
1 изменённых файлов: 6 добавлений и 4 удалений

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

@ -932,7 +932,7 @@ FilterNodeSoftware::~FilterNodeSoftware()
void void
FilterNodeSoftware::SetInput(uint32_t aIndex, FilterNode *aFilter) FilterNodeSoftware::SetInput(uint32_t aIndex, FilterNode *aFilter)
{ {
if (aFilter->GetBackendType() != FILTER_BACKEND_SOFTWARE) { if (aFilter && aFilter->GetBackendType() != FILTER_BACKEND_SOFTWARE) {
MOZ_ASSERT(false, "can only take software filters as inputs"); MOZ_ASSERT(false, "can only take software filters as inputs");
return; return;
} }
@ -955,10 +955,8 @@ FilterNodeSoftware::SetInput(uint32_t aInputEnumIndex,
MOZ_CRASH(); MOZ_CRASH();
return; return;
} }
if ((uint32_t)inputIndex >= mInputSurfaces.size()) { if ((uint32_t)inputIndex >= NumberOfSetInputs()) {
mInputSurfaces.resize(inputIndex + 1); mInputSurfaces.resize(inputIndex + 1);
}
if ((uint32_t)inputIndex >= mInputFilters.size()) {
mInputFilters.resize(inputIndex + 1); mInputFilters.resize(inputIndex + 1);
} }
mInputSurfaces[inputIndex] = aSurface; mInputSurfaces[inputIndex] = aSurface;
@ -969,6 +967,10 @@ FilterNodeSoftware::SetInput(uint32_t aInputEnumIndex,
aFilter->AddInvalidationListener(this); aFilter->AddInvalidationListener(this);
} }
mInputFilters[inputIndex] = aFilter; mInputFilters[inputIndex] = aFilter;
if (!aSurface && !aFilter && (size_t)inputIndex == NumberOfSetInputs()) {
mInputSurfaces.resize(inputIndex);
mInputFilters.resize(inputIndex);
}
Invalidate(); Invalidate();
} }