Wideo Chroma-Filtering za pomocą GPUImage?

Próbuję wyświetlić plik wideo z przezroczystością wewnątrz mojej aplikacji za pomocą klucza przezroczystości (RGB: 0x00FF00, lub pełny zielony) za pomocą awesome @ BradLarsonGPUImage zestaw narzędzi. Mam jednak pewne trudności zGPUImageChromaKeyFilter filtrować i nie do końca rozumiem dlaczego.

Mój źródłowy plik wideo jest dostępny w mojej skrzynce odbiorczejtutaj (12 KB, 3 sekundy, pełne zielone tło, tylko kwadrat na ekranie),

I użyłem przykładowego projektu zatytułowanegoSimpleVideoFilter.

To jest kod, którego próbowałem użyć (po prostu go zastąpiłem-viewDidLoad):

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyFilter alloc] init];
[filter setColorToReplaceRed:0 green:1 blue:0];
[filter setEnabled:YES];

[movieFile addTarget:filter];

GPUImageView *filterView = (GPUImageView *)self.view;
[filter addTarget:filterView];

[movieFile startProcessing];

Zgodnie z dokumentacją (która jest rzadka), topowinien efekt zastąpienia całej zieleni w filmie. Zamiast tego otrzymuję to jako wyjście:

Co mówi mi, że wideo jest odtwarzane (a więc kopiuje się do aplikacji), ale wydaje się, że nie wykonuje żadnego kluczowania chrominancji. Dlaczego miałoby to być? Czy muszę ręcznie ustawić wartości i progi wygładzania? Nie powinienem, ponieważ źródło zawiera tylko dwa kolory (0x00FF00 i0x000000).

Przetestowałem to również na urządzeniu, ale bezskutecznie. Prawie wszystkie inne filtry, które próbuję użyć, takie jakGPUImageRGBFilter, GPUImageSepiaFilter, itp. MożeGPUImageChromaKeyFilter po prostu zostać złamanym?

Każda pomoc w tym zakresie byłaby doceniana, ponieważ w tym momencie ocieram spód beczki o przezroczystość wideo.

questionAnswers(2)

yourAnswerToTheQuestion