mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-03-20 11:27:45 +01:00
Said function has presumably been added in order to check that we have successfully reset the floating point state after having violated the ABI/calling convention by not issuing emms in our MMX DSP routines. Yet the ability to check this should not have been made public, because there is no external need for it and because the function does not even always achieve what its documentation claims to do: It only works when inline assembly is available. It should have been implemented in emms.h like emms_c() (which is where a replacement should be put if there is still ABI-violating MMX code when av_assert0_fpu() is removed). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
116 lines
3.2 KiB
C
116 lines
3.2 KiB
C
/*
|
|
* This file is part of FFmpeg.
|
|
*
|
|
* FFmpeg is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* FFmpeg is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with FFmpeg; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "avutil.h"
|
|
#include "avassert.h"
|
|
|
|
/**
|
|
* @file
|
|
* various utility functions
|
|
*/
|
|
|
|
const char *av_get_media_type_string(enum AVMediaType media_type)
|
|
{
|
|
switch (media_type) {
|
|
case AVMEDIA_TYPE_VIDEO: return "video";
|
|
case AVMEDIA_TYPE_AUDIO: return "audio";
|
|
case AVMEDIA_TYPE_DATA: return "data";
|
|
case AVMEDIA_TYPE_SUBTITLE: return "subtitle";
|
|
case AVMEDIA_TYPE_ATTACHMENT: return "attachment";
|
|
default: return NULL;
|
|
}
|
|
}
|
|
|
|
char av_get_picture_type_char(enum AVPictureType pict_type)
|
|
{
|
|
switch (pict_type) {
|
|
case AV_PICTURE_TYPE_I: return 'I';
|
|
case AV_PICTURE_TYPE_P: return 'P';
|
|
case AV_PICTURE_TYPE_B: return 'B';
|
|
case AV_PICTURE_TYPE_S: return 'S';
|
|
case AV_PICTURE_TYPE_SI: return 'i';
|
|
case AV_PICTURE_TYPE_SP: return 'p';
|
|
case AV_PICTURE_TYPE_BI: return 'b';
|
|
default: return '?';
|
|
}
|
|
}
|
|
|
|
#if FF_API_OPT_INT_LIST
|
|
unsigned av_int_list_length_for_size(unsigned elsize,
|
|
const void *list, uint64_t term)
|
|
{
|
|
unsigned i;
|
|
|
|
if (!list)
|
|
return 0;
|
|
#define LIST_LENGTH(type) \
|
|
{ type t = term, *l = (type *)list; for (i = 0; l[i] != t; i++); }
|
|
switch (elsize) {
|
|
case 1: LIST_LENGTH(uint8_t); break;
|
|
case 2: LIST_LENGTH(uint16_t); break;
|
|
case 4: LIST_LENGTH(uint32_t); break;
|
|
case 8: LIST_LENGTH(uint64_t); break;
|
|
default: av_assert0(!"valid element size");
|
|
}
|
|
return i;
|
|
}
|
|
#endif
|
|
|
|
char *av_fourcc_make_string(char *buf, uint32_t fourcc)
|
|
{
|
|
int i;
|
|
char *orig_buf = buf;
|
|
size_t buf_size = AV_FOURCC_MAX_STRING_SIZE;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
const int c = fourcc & 0xff;
|
|
const int print_chr = (c >= '0' && c <= '9') ||
|
|
(c >= 'a' && c <= 'z') ||
|
|
(c >= 'A' && c <= 'Z') ||
|
|
(c && strchr(". -_", c));
|
|
const int len = snprintf(buf, buf_size, print_chr ? "%c" : "[%d]", c);
|
|
if (len < 0)
|
|
break;
|
|
buf += len;
|
|
buf_size = buf_size > len ? buf_size - len : 0;
|
|
fourcc >>= 8;
|
|
}
|
|
|
|
return orig_buf;
|
|
}
|
|
|
|
AVRational av_get_time_base_q(void)
|
|
{
|
|
return (AVRational){1, AV_TIME_BASE};
|
|
}
|
|
#if FF_API_ASSERT_FPU
|
|
void av_assert0_fpu(void) {
|
|
#if HAVE_MMX_INLINE
|
|
uint16_t state[14];
|
|
__asm__ volatile (
|
|
"fstenv %0 \n\t"
|
|
: "+m" (state)
|
|
:
|
|
: "memory"
|
|
);
|
|
av_assert0((state[4] & 3) == 3);
|
|
#endif
|
|
}
|
|
#endif
|