1/* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19#include "config.h" 20#include "avutil.h" 21#include "avassert.h" 22#include "samplefmt.h" 23#include "pixdesc.h" 24 25/** 26 * @file 27 * various utility functions 28 */ 29 30unsigned avutil_version(void) 31{ 32 static int checks_done; 33 if (checks_done) 34 return LIBAVUTIL_VERSION_INT; 35 36 av_assert0(AV_PIX_FMT_VDA_VLD == 81); //check if the pix fmt enum has not had anything inserted or removed by mistake 37 av_assert0(AV_SAMPLE_FMT_DBLP == 9); 38 av_assert0(AVMEDIA_TYPE_ATTACHMENT == 4); 39 av_assert0(AV_PICTURE_TYPE_BI == 7); 40 av_assert0(LIBAVUTIL_VERSION_MICRO >= 100); 41 av_assert0(HAVE_MMX2 == HAVE_MMXEXT); 42 43 av_assert0(((size_t)-1) > 0); // C guarantees this but if false on a platform we care about revert at least b284e1ffe343d6697fb950d1ee517bafda8a9844 44 45 if (av_sat_dadd32(1, 2) != 5) { 46 av_log(NULL, AV_LOG_FATAL, "Libavutil has been build with a broken binutils, please upgrade binutils and rebuild\n"); 47 abort(); 48 } 49 50 if (llrint(1LL<<60) != 1LL<<60) { 51 av_log(NULL, AV_LOG_ERROR, "Libavutil has been linked to a broken llrint()\n"); 52 } 53 54#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 55 ff_check_pixfmt_descriptors(); 56#endif 57 checks_done = 1; 58 return LIBAVUTIL_VERSION_INT; 59} 60 61const char *avutil_configuration(void) 62{ 63 return FFMPEG_CONFIGURATION; 64} 65 66const char *avutil_license(void) 67{ 68#define LICENSE_PREFIX "libavutil license: " 69 return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; 70} 71 72const char *av_get_media_type_string(enum AVMediaType media_type) 73{ 74 switch (media_type) { 75 case AVMEDIA_TYPE_VIDEO: return "video"; 76 case AVMEDIA_TYPE_AUDIO: return "audio"; 77 case AVMEDIA_TYPE_DATA: return "data"; 78 case AVMEDIA_TYPE_SUBTITLE: return "subtitle"; 79 case AVMEDIA_TYPE_ATTACHMENT: return "attachment"; 80 default: return NULL; 81 } 82} 83 84char av_get_picture_type_char(enum AVPictureType pict_type) 85{ 86 switch (pict_type) { 87 case AV_PICTURE_TYPE_I: return 'I'; 88 case AV_PICTURE_TYPE_P: return 'P'; 89 case AV_PICTURE_TYPE_B: return 'B'; 90 case AV_PICTURE_TYPE_S: return 'S'; 91 case AV_PICTURE_TYPE_SI: return 'i'; 92 case AV_PICTURE_TYPE_SP: return 'p'; 93 case AV_PICTURE_TYPE_BI: return 'b'; 94 default: return '?'; 95 } 96} 97 98unsigned av_int_list_length_for_size(unsigned elsize, 99 const void *list, uint64_t term) 100{ 101 unsigned i; 102 103 if (!list) 104 return 0; 105#define LIST_LENGTH(type) \ 106 { type t = term, *l = (type *)list; for (i = 0; l[i] != t; i++); } 107 switch (elsize) { 108 case 1: LIST_LENGTH(uint8_t); break; 109 case 2: LIST_LENGTH(uint16_t); break; 110 case 4: LIST_LENGTH(uint32_t); break; 111 case 8: LIST_LENGTH(uint64_t); break; 112 default: av_assert0(!"valid element size"); 113 } 114 return i; 115} 116 117AVRational av_get_time_base_q(void) 118{ 119 return (AVRational){1, AV_TIME_BASE}; 120} 121