Windows Pipes STDIN и STDOUT Родительский дочерний процесс связи IPC FFMPEG - PullRequest
0 голосов
/ 15 октября 2018

Я пишу простое приложение WINDOWS, которое демонстрирует конвейерную обработку,

Я передаю данные о размере байта в дочерний процесс, увеличиваю значение и отправляю данные о размере символа обратно в родительский и циклический, пока он не достигнет MAX_CHAR.демонстрация "i ++" с IPC.

Родительский процесс

while(i<256){
    bSuccess = WriteFile(g_hChildStd_IN_Wr, chBuf, sizeof(char), &dwWritten, NULL);
    bSuccess = ReadFile(g_hChildStd_OUT_Rd, chBuf, sizeof(char), &dwRead, NULL); // IF THERE IS NO FFLUSH IT BLOCKS
}

И в Child

while (i<256){
        byte data=0;
        fread(&data, sizeof(char), 1, stdout);
        data++;
        fwrite(&data, sizeof(char), 1, stdout);
        //fflush(stdout); IF I DO NOT HAVE THIS  PARENT BLOCKS ON READ
}

Прежде всего, если я не FDLUSH дочерний процесс stdout, родительский блок при чтении дочернего stdout.

Как можно запустить этот код, не требуя fflush дочернего stdout.

Закрытие канала после первой записи дочернего элемента не вариант, так как он находится в цикле и должен выполняться 256 раз.

более обобщенно, я хочу, чтобы дочерний элемент записал N байтов в родительский, родительский прочитал, что N байтов что-то делает, и записал назад в дочерний другой N байтов, а дочерний сделал что-то с этими N байтами и записал в родительские N байтов.Это случается М раз.

Дело в том, что я не могу использовать fflush, потому что моей конечной целью является использование дочернего процесса, который не реализован мной.

Моя конечная цель - передать данные в FFMPEG, кодировать данные и прочитать их обратно со стандартного ввода и делать это снова и снова, без необходимости форкать новый процесс FFMPEG для каждого кадра изображения, а вместо этого разветвлять один экземплярFFMPEG и канал данных и считывать данные из него.А так как я не реализовал ffmpeg и не могу изменить исходный код.

спасибо

спасибо

...