2014-04-08 2 views
7

나는 avcodec_decode_video2 함수를 사용하고 있습니다. 스트림의 인코딩 변경시 -1094995529가 반환됩니다. 문서는 상태 : 음의 값이 반환됩니다 더 프레임이 압축 해제되지 않을 수 있다면, 그렇지 않으면 바이트 의 수가 제로 사용 오류에이 ffmpeg 오류 코드의 의미를 어떻게 알 수 있습니까?

.

그러나 리턴 코드 또는 다른 형식의 문서 열거 형은없는 것 같습니다. 오류의 의미는 무엇이며 어떻게 일반적으로이를 결정할 수 있습니까? 이것은 당신이 만날 수있는 오류의 전체 집합입니다

#include <errno.h> 

#if EINVAL > 0 
#define AVERROR(e) (-(e)) /**< Returns a negative error code from a POSIX error code, to return from library functions. */ 
#define AVUNERROR(e) (-(e)) /**< Returns a POSIX error code from a library function error return value. */ 
#else 
/* Some platforms have E* and errno already negated. */ 
#define AVERROR(e) (e) 
#define AVUNERROR(e) (e) 
#endif 
#define AVERROR_UNKNOWN  AVERROR(EINVAL) /**< unknown error */ 
#define AVERROR_IO   AVERROR(EIO)  /**< I/O error */ 
#define AVERROR_NUMEXPECTED AVERROR(EDOM) /**< Number syntax expected in filename. */ 
#define AVERROR_INVALIDDATA AVERROR(EINVAL) /**< invalid data found */ 
#define AVERROR_NOMEM  AVERROR(ENOMEM) /**< not enough memory */ 
#define AVERROR_NOFMT  AVERROR(EILSEQ) /**< unknown format */ 
#define AVERROR_NOTSUPP  AVERROR(ENOSYS) /**< Operation not supported. */ 
#define AVERROR_NOENT  AVERROR(ENOENT) /**< No such file or directory. */ 
#define AVERROR_EOF   AVERROR(EPIPE) /**< End of file. */ 
#define AVERROR_PATCHWELCOME -MKTAG('P','A','W','E') /**< Not yet implemented in FFmpeg. Patches welcome. */ 

avcodec.h \ 위해 libavcodec 파일

: 언급

답변

5

오류 코드 (avutil에서 error.h가) : 당신이 그 볼 때

#define AVERROR_INVALIDDATA  FFERRTAG('I','N','D','A') 

-1094995529이 -0x41444E49되고 : http://ffmpeg.org/doxygen/trunk/error_8h_source.html

그것은 당신이 지정한 값이 밝혀 ACSII에서 0x41 = 'A', 0x44 = 'D', 0x4E = 'N 및 0x49 ='I '와 같은 문자가 포함됩니다. 매크로/etc로 인해 ADNI가 #define 스 니펫에서 볼 수있는 INDA가되고 FERRTAG ('I', 'N', 'D', 'A')로 정의 된 AVERROR_INVALIDDATA가됩니다. 오류 코드의

나머지는 해당 파일에 있고 나는 아래에 여기를 붙여 넣은 :

#define AVERROR_BSF_NOT_FOUND  FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found 
#define AVERROR_BUG    FFERRTAG('B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 
#define AVERROR_BUFFER_TOO_SMALL FFERRTAG('B','U','F','S') ///< Buffer too small 
#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found 
#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found 
#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found 
#define AVERROR_EOF    FFERRTAG('E','O','F',' ') ///< End of file 
#define AVERROR_EXIT    FFERRTAG('E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted 
#define AVERROR_EXTERNAL   FFERRTAG('E','X','T',' ') ///< Generic error in an external library 
#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found 
#define AVERROR_INVALIDDATA  FFERRTAG('I','N','D','A') ///< Invalid data found when processing input 
#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found 
#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found 
#define AVERROR_PATCHWELCOME  FFERRTAG('P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome 
#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found 
#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found 
#define AVERROR_BUG2    FFERRTAG('B','U','G',' ') 
#define AVERROR_UNKNOWN   FFERRTAG('U','N','K','N') ///< Unknown error, typically from an external library 
#define AVERROR_EXPERIMENTAL  (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. 
#define AVERROR_INPUT_CHANGED  (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) 
#define AVERROR_OUTPUT_CHANGED  (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) 
#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') 
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') 
#define AVERROR_HTTP_FORBIDDEN  FFERRTAG(0xF8,'4','0','3') 
#define AVERROR_HTTP_NOT_FOUND  FFERRTAG(0xF8,'4','0','4') 
#define AVERROR_HTTP_OTHER_4XX  FFERRTAG(0xF8,'4','X','X') 
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') 
1

오류 관련 POSIX 있습니다. 코드 내부에서 간단히 리턴 값을 모두 검사합니다. 는 FFmpeg에서

+0

감사합니다. 그러나 나는 이것들을 발견했다. 그들은 모두 1-131의 범위에있는 errno.h를 기반으로한다. 저는 -1094995529와 같은 큰 값이 어떻게 반환 될 수 있는지 이해하지 못합니다. – Asik

+0

위 코드에서 부정으로 노는 것을 찾을 수 있습니다. 그럼에도 불구하고 우리 번호는 이상하게 보입니다. 그렇다면 왜 쓰지 않는가? if (retcode == AVERROR (EINVAL)) { printf ("unknown error"); } –

관련 문제