mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 03:59:43 +00:00
more non portable float parsing code ...
Originally committed as revision 4462 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7cb8f314db
commit
8baa661498
@ -75,26 +75,6 @@ typedef struct FourxmDemuxContext {
|
||||
float fps;
|
||||
} FourxmDemuxContext;
|
||||
|
||||
static float get_le_float(unsigned char *buffer)
|
||||
{
|
||||
float f;
|
||||
unsigned char *float_buffer = (unsigned char *)&f;
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
float_buffer[0] = buffer[3];
|
||||
float_buffer[1] = buffer[2];
|
||||
float_buffer[2] = buffer[1];
|
||||
float_buffer[3] = buffer[0];
|
||||
#else
|
||||
float_buffer[0] = buffer[0];
|
||||
float_buffer[1] = buffer[1];
|
||||
float_buffer[2] = buffer[2];
|
||||
float_buffer[3] = buffer[3];
|
||||
#endif
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
static int fourxm_probe(AVProbeData *p)
|
||||
{
|
||||
if (p->buf_size < 12)
|
||||
@ -147,7 +127,7 @@ static int fourxm_read_header(AVFormatContext *s,
|
||||
size = LE_32(&header[i + 4]);
|
||||
|
||||
if (fourcc_tag == std__TAG) {
|
||||
fourxm->fps = get_le_float(&header[i + 12]);
|
||||
fourxm->fps = av_int2flt(LE_32(&header[i + 12]));
|
||||
} else if (fourcc_tag == vtrk_TAG) {
|
||||
/* check that there is enough data */
|
||||
if (size != vtrk_SIZE) {
|
||||
|
@ -609,42 +609,21 @@ ebml_read_float (MatroskaDemuxContext *matroska,
|
||||
return res;
|
||||
size = rlength;
|
||||
|
||||
if (size != 4 && size != 8 && size != 10) {
|
||||
if (size == 4) {
|
||||
*num= av_int2flt(get_be32(pb));
|
||||
} else if(size==8){
|
||||
*num= av_int2dbl(get_be64(pb));
|
||||
} else if(size==10){
|
||||
av_log(matroska->ctx, AV_LOG_ERROR,
|
||||
"FIXME! 10-byte floats unimplemented\n");
|
||||
return AVERROR_UNKNOWN;
|
||||
} else{
|
||||
offset_t pos = url_ftell(pb);
|
||||
av_log(matroska->ctx, AV_LOG_ERROR,
|
||||
"Invalid float element size %d at position %llu (0x%llx)\n",
|
||||
size, pos, pos);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if (size == 10) {
|
||||
av_log(matroska->ctx, AV_LOG_ERROR,
|
||||
"FIXME! 10-byte floats unimplemented\n");
|
||||
return AVERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
if (size == 4) {
|
||||
float f;
|
||||
|
||||
while (size-- > 0)
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
((uint8_t *) &f)[3 - size] = get_byte(pb);
|
||||
#else
|
||||
((uint8_t *) &f)[size] = get_byte(pb);
|
||||
#endif
|
||||
|
||||
*num = f;
|
||||
} else {
|
||||
double d;
|
||||
|
||||
while (size-- > 0)
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
((uint8_t *) &d)[7 - size] = get_byte(pb);
|
||||
#else
|
||||
((uint8_t *) &d)[size] = get_byte(pb);
|
||||
#endif
|
||||
|
||||
*num = d;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user