проблемы с чтением вывода из ffmpeg

Я пытаюсь прочитать необработанные данные изображения BGR24 из ffmpeg в приложение C ++. Приложение C ++ затем обработает изображение, используя openCV.
jpg -> ffmpeg -> приложение -> openCV

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

Я изменил программу, чтобы просто сохранить ввод в файл, и я сравнил два файла. Первые 1856 байтов одинаковы, но после этого файл, сохраненный из stdin, отличается, и после этого весь файл является просто шестнадцатеричным D1 (или десятичным 209).

чтение байтов из стандартного ввода

чтение байтов из файла

Я предполагаю, что я делаю ошибку при чтении стандартного ввода вместо ffmpeg с другим выводом. Но мне очень странно, что первая часть такая же.
Это код, который я использую для чтения стандартного ввода

char* img = (char*) malloc(FRM_SIZE_BYTES);
cout << "array address: " << &img;
cout << "array of size: " << FRM_SIZE_BYTES << endl;

int read = int read = read_stdin(img, FRM_SIZE_BYTES);
cout << "read " << read << " bytes" << endl;

int read_stdin(char* buffer, int count)
{
int read = 0;
char in;
for (int i = 0; i < count; i++) {
cin >>  in;
buffer[i] = in;
read++;
}
return read;
}

вот как я пытаюсь прочитать файл

ifstream image;
image.open("img.raw", ios_base::binary | ios_base::in);
std::streampos start, end;
char* imgFile = (char*)malloc(FRM_SIZE_BYTES);
image.read(imgFile, FRM_SIZE_BYTES);
image.close();

Любая помощь будет оценена

-1

Решение

Кажется, проблема была в чтении стандартного ввода. Я работаю на машине с Windows и не установил входной поток в двоичном режиме.

Установка входного потока в бинарный режим.

_setmode(_fileno(stdin), _O_BINARY);

и читать поток, как это

cin.get(in);

исправил проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]