utils.c (3265B)
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 23 /** 24 * @file 25 * various utility functions 26 */ 27 28 const char *av_get_media_type_string(enum AVMediaType media_type) 29 { 30 switch (media_type) { 31 case AVMEDIA_TYPE_VIDEO: return "video"; 32 case AVMEDIA_TYPE_AUDIO: return "audio"; 33 case AVMEDIA_TYPE_DATA: return "data"; 34 case AVMEDIA_TYPE_SUBTITLE: return "subtitle"; 35 case AVMEDIA_TYPE_ATTACHMENT: return "attachment"; 36 default: return NULL; 37 } 38 } 39 40 char av_get_picture_type_char(enum AVPictureType pict_type) 41 { 42 switch (pict_type) { 43 case AV_PICTURE_TYPE_I: return 'I'; 44 case AV_PICTURE_TYPE_P: return 'P'; 45 case AV_PICTURE_TYPE_B: return 'B'; 46 case AV_PICTURE_TYPE_S: return 'S'; 47 case AV_PICTURE_TYPE_SI: return 'i'; 48 case AV_PICTURE_TYPE_SP: return 'p'; 49 case AV_PICTURE_TYPE_BI: return 'b'; 50 default: return '?'; 51 } 52 } 53 54 #if FF_API_OPT_INT_LIST 55 unsigned av_int_list_length_for_size(unsigned elsize, 56 const void *list, uint64_t term) 57 { 58 unsigned i; 59 60 if (!list) 61 return 0; 62 #define LIST_LENGTH(type) \ 63 { type t = term, *l = (type *)list; for (i = 0; l[i] != t; i++); } 64 switch (elsize) { 65 case 1: LIST_LENGTH(uint8_t); break; 66 case 2: LIST_LENGTH(uint16_t); break; 67 case 4: LIST_LENGTH(uint32_t); break; 68 case 8: LIST_LENGTH(uint64_t); break; 69 default: av_assert0(!"valid element size"); 70 } 71 return i; 72 } 73 #endif 74 75 char *av_fourcc_make_string(char *buf, uint32_t fourcc) 76 { 77 int i; 78 char *orig_buf = buf; 79 size_t buf_size = AV_FOURCC_MAX_STRING_SIZE; 80 81 for (i = 0; i < 4; i++) { 82 const int c = fourcc & 0xff; 83 const int print_chr = (c >= '0' && c <= '9') || 84 (c >= 'a' && c <= 'z') || 85 (c >= 'A' && c <= 'Z') || 86 (c && strchr(". -_", c)); 87 const int len = snprintf(buf, buf_size, print_chr ? "%c" : "[%d]", c); 88 if (len < 0) 89 break; 90 buf += len; 91 buf_size = buf_size > len ? buf_size - len : 0; 92 fourcc >>= 8; 93 } 94 95 return orig_buf; 96 } 97 98 AVRational av_get_time_base_q(void) 99 { 100 return (AVRational){1, AV_TIME_BASE}; 101 } 102 103 void av_assert0_fpu(void) { 104 #if HAVE_MMX_INLINE 105 uint16_t state[14]; 106 __asm__ volatile ( 107 "fstenv %0 \n\t" 108 : "+m" (state) 109 : 110 : "memory" 111 ); 112 av_assert0((state[4] & 3) == 3); 113 #endif 114 }