00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #undef _GNU_SOURCE
00020 #include "avutil.h"
00021 #include "avstring.h"
00022 #include "common.h"
00023
00024 struct error_entry {
00025 int num;
00026 const char *tag;
00027 const char *str;
00028 };
00029
00030 #define ERROR_TAG(tag) AVERROR_##tag, #tag
00031 static const struct error_entry error_entries[] = {
00032 { ERROR_TAG(BSF_NOT_FOUND), "Bitstream filter not found" },
00033 { ERROR_TAG(BUG), "Internal bug, should not have happened" },
00034 { ERROR_TAG(BUG2), "Internal bug, should not have happened" },
00035 { ERROR_TAG(BUFFER_TOO_SMALL), "Buffer too small" },
00036 { ERROR_TAG(DECODER_NOT_FOUND), "Decoder not found" },
00037 { ERROR_TAG(DEMUXER_NOT_FOUND), "Demuxer not found" },
00038 { ERROR_TAG(ENCODER_NOT_FOUND), "Encoder not found" },
00039 { ERROR_TAG(EOF), "End of file" },
00040 { ERROR_TAG(EXIT), "Immediate exit requested" },
00041 { ERROR_TAG(EXTERNAL), "Generic error in an external library" },
00042 { ERROR_TAG(FILTER_NOT_FOUND), "Filter not found" },
00043 { ERROR_TAG(INVALIDDATA), "Invalid data found when processing input" },
00044 { ERROR_TAG(MUXER_NOT_FOUND), "Muxer not found" },
00045 { ERROR_TAG(OPTION_NOT_FOUND), "Option not found" },
00046 { ERROR_TAG(PATCHWELCOME), "Not yet implemented in FFmpeg, patches welcome" },
00047 { ERROR_TAG(PROTOCOL_NOT_FOUND), "Protocol not found" },
00048 { ERROR_TAG(STREAM_NOT_FOUND), "Stream not found" },
00049 { ERROR_TAG(UNKNOWN), "Unknown error occurred" },
00050 { ERROR_TAG(EXPERIMENTAL), "Experimental feature" },
00051 };
00052
00053 int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
00054 {
00055 int ret = 0, i;
00056 const struct error_entry *entry = NULL;
00057
00058 for (i = 0; i < FF_ARRAY_ELEMS(error_entries); i++) {
00059 if (errnum == error_entries[i].num) {
00060 entry = &error_entries[i];
00061 break;
00062 }
00063 }
00064 if (entry) {
00065 av_strlcpy(errbuf, entry->str, errbuf_size);
00066 } else {
00067 #if HAVE_STRERROR_R
00068 ret = AVERROR(strerror_r(AVUNERROR(errnum), errbuf, errbuf_size));
00069 #else
00070 ret = -1;
00071 #endif
00072 if (ret < 0)
00073 snprintf(errbuf, errbuf_size, "Error number %d occurred", errnum);
00074 }
00075
00076 return ret;
00077 }
00078
00079 #ifdef TEST
00080
00081 #undef printf
00082
00083 int main(void)
00084 {
00085 int i;
00086
00087 for (i = 0; i < FF_ARRAY_ELEMS(error_entries); i++) {
00088 const struct error_entry *entry = &error_entries[i];
00089 printf("%d: %s [%s]\n", entry->num, av_err2str(entry->num), entry->tag);
00090 }
00091
00092 for (i = 0; i < 256; i++) {
00093 printf("%d: %s\n", -i, av_err2str(-i));
00094 }
00095
00096 return 0;
00097 }
00098
00099 #endif