2016-08-03 6 views
-1

ffmpeg에서 원시 BGR24 이미지 데이터를 C++ 응용 프로그램으로 읽으려고합니다. C++ 응용 프로그램은 openCV를 사용하여 이미지를 추가로 처리합니다. jpg -> ffmpeg -> 응용 프로그램 -> openCVffmpeg에서 출력을 읽는 데 문제가 있습니다.

ffmpeg의 출력을 파일에 저장하고 응용 프로그램 내에서 해당 파일을 읽는 것으로 시작했습니다. OpenCV는 이미지를 즐겁게 보여주기 때문에 분명히 이것을 받아들입니다. 그러나 ffmpeg의 출력을 응용 프로그램의 stdin으로 직접 파이프 할 때 오류가 발생합니다.

입력을 파일로 저장하도록 프로그램을 변경하고 두 파일을 비교했습니다. 첫 번째 1856 바이트는 동일하지만 그 이후에는 stdin에서 저장 한 파일이 달라지며 전체 파일은 단지 16 진수 D1 (또는 십진수 209)입니다.

bytes read from stdin

bytes read from file

나는 다른 출력을 가지고는 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; 
} 

이 내가 어떤 도움이

+0

char 대신 unsigned char를 사용 하시겠습니까? –

+0

나는 그것을 시도했지만 차이를 만들지 않는다. – JLucas

답변

0

문제가 표준 입력을 읽고 있던 것 같습니다 감사하겠습니다

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(); 

파일을 읽으려고 어떻게 내가 읽은 데 사용하는 코드입니다 . 윈도우 머신에서 작업 중이며 바이너리 모드로 inputstream을 설정하지 않았습니다.

입력 스트림을 2 진 모드로 설정하십시오.

_setmode(_fileno(stdin), _O_BINARY); 

cin.get(in); 

같은 스트림을 읽고 문제를 해결했습니다.