2014-04-08 18 views
7

मैं फ़ंक्शन avcodec_decode_video2 का उपयोग कर रहा हूं। स्ट्रीम में एन्कोडिंग परिवर्तन पर, यह -10 9 4 9 55552 लौटाता है। प्रलेखन केवल राज्यों:मैं यह कैसे पता लगा सकता हूं कि यह ffmpeg त्रुटि कोड का अर्थ क्या है?

त्रुटि पर एक नकारात्मक मूल्य, लौट आए अन्यथा बाइट्स की संख्या का इस्तेमाल किया या शून्य अगर कोई फ्रेम decompressed जा सकता है।

लेकिन रिटर्न कोड या दस्तावेज़ीकरण के किसी अन्य रूप का प्रतीत नहीं होता है। त्रुटि का क्या मतलब है और मैं सामान्य रूप से यह कैसे निर्धारित कर सकता हूं?

avcodec.h

#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. */ 

यह त्रुटियां जिन्हें आप पूरा कर सकते हैं का पूरा सेट है, libavcodec \ फ़ाइल में

:

उत्तर

5

ffmpeg से त्रुटि कोड (avutil से error.h): http://ffmpeg.org/doxygen/trunk/error_8h_source.html

यह पता चला मूल्य आपके द्वारा निर्दिष्ट है:

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

-1094995529 -0x41444E49 हो जाता है और जब आप उन पर देखने के अक्षरों, एसीएसआईआई, 0x41 = 'ए', 0x44 = 'डी', 0x4E = 'एन, और 0x49 =' मैं 'में। मैक्रो/इत्यादि के कारण चीजों को उलट दिया जाता है, इसलिए एडीएनआई इंडिया बन जाता है, जिसे आप # डेफिन स्निपेट से देख सकते हैं, AVERROR_INVALIDDATA परिभाषित FFERRTAG ('I', 'N', 'D', 'A') है।

त्रुटि कोड के बाकी उस फ़ाइल में हैं और मैं उन्हें यहाँ नीचे चिपकाया है:

#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 हैं। बस अपने कोड के अंदर उन सभी के खिलाफ वापसी मूल्य की जांच करें।

+0

धन्यवाद। मैं यह कहता हूं, हालांकि, वे सभी errno.h पर आधारित हैं जो 1-131 से लेकर हैं। मुझे समझ में नहीं आता कि -10 9 4 9 5555 के रूप में इतना बड़ा मूल्य कैसे वापस किया जा सकता है। – Asik

+0

उपरोक्त कोड में आप निषेध के साथ खेल सकते हैं। यहां तक ​​कि हमारी संख्या अजीब लगती है। तो क्यों लिखें (अगर retcode == AVERROR (EINVAL)) { printf ("अज्ञात त्रुटि"); } –

संबंधित मुद्दे