Que vergonha… não criei sincronismo ao capturar o frame do buffer na biblioteca libhaircapture (derivado da correria para entreta de um projeto, mas não justifica… ). Ao capturar a imagem, a falta de sincronimo pode gera um quadro com metade do frame atual e a outra metade do frame anterior.
O erro foi constatado graças ao Stage (o Luiz Fernando) que trabalha na NETi, pois os seus testes exaustivos acabou demonstrando esta falha (foi mal…). Poderia implementar a técnica de semáforo, mas um simples mutex é o suficiente para sincronizar e resolver o problema. Para quem deseja fazer uma prova de conceito, abaixo um código básico.
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
pthread_mutex_t r3_mutex=PTHREAD_MUTEX_INITIALIZER;
void* print(void )
{
pthread_mutex_lock(&r3_mutex);
printf("Aguarando 10 segundos dentro thread. 2\n");
sleep(10);
pthread_mutex_unlock(&r3_mutex);
printf("Thread finalizada.\n");
pthread_exit(NULL);
}
int main (int argc, char** argv)
{
pthread_t threads;
pthread_create(&threads, NULL, (void *(*)(void *))print, NULL);
printf("Aguarando 2 segundos (sleep fora da thread). \n");
sleep(2);
printf("Aguarando 10 segundos restante (sleep dentro da thread). \n");
pthread_mutex_lock(&r3_mutex);
printf("Realmente constatada, thread finalizada.\n");
printf("Processando algo... \n");
pthread_mutex_unlock(&r3_mutex);
printf("Process main finalizado\n");
return 0;
}
Hello to all
In this puzzling continuously, I honey you all
Prize your family and friends