From 3b4b29dcd9c5da2ba40a34ce3d9eb3a7f659ba77 Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Tue, 22 Oct 2002 09:23:14 +0000 Subject: [PATCH] put/get portable for IEEE double - renamed put_native_string/get_native_string Originally committed as revision 1062 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libav/avio.h | 8 ++++---- libav/aviobuf.c | 26 +++++++++++++++++--------- libav/ffm.c | 20 ++++++++++---------- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/libav/avio.h b/libav/avio.h index be4189b8a3..bf00f2edd1 100644 --- a/libav/avio.h +++ b/libav/avio.h @@ -87,8 +87,8 @@ void put_le16(ByteIOContext *s, unsigned int val); void put_be16(ByteIOContext *s, unsigned int val); void put_tag(ByteIOContext *s, char *tag); -void put_native_double(ByteIOContext *s, double val); -void put_native_string(ByteIOContext *s, const char *buf); +void put_be64_double(ByteIOContext *s, double val); +void put_strz(ByteIOContext *s, const char *buf); offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence); void url_fskip(ByteIOContext *s, offset_t offset); @@ -108,8 +108,8 @@ unsigned int get_le32(ByteIOContext *s); UINT64 get_le64(ByteIOContext *s); unsigned int get_le16(ByteIOContext *s); -double get_native_double(ByteIOContext *s); -char *get_native_string(ByteIOContext *s, char *buf, int maxlen); +double get_be64_double(ByteIOContext *s); +char *get_strz(ByteIOContext *s, char *buf, int maxlen); unsigned int get_be16(ByteIOContext *s); unsigned int get_be32(ByteIOContext *s); UINT64 get_be64(ByteIOContext *s); diff --git a/libav/aviobuf.c b/libav/aviobuf.c index 3f0108361b..27f6b5d38a 100644 --- a/libav/aviobuf.c +++ b/libav/aviobuf.c @@ -176,12 +176,18 @@ void put_be32(ByteIOContext *s, unsigned int val) put_byte(s, val); } -void put_native_double(ByteIOContext *s, double val) +/* IEEE format is assumed */ +void put_be64_double(ByteIOContext *s, double val) { - put_buffer(s, (const unsigned char *) &val, sizeof(val)); + union { + double d; + UINT64 ull; + } u; + u.d = val; + put_be64(s, u.ull); } -void put_native_string(ByteIOContext *s, const char *str) +void put_strz(ByteIOContext *s, const char *str) { if (str) put_buffer(s, (const unsigned char *) str, strlen(str) + 1); @@ -339,16 +345,18 @@ unsigned int get_be32(ByteIOContext *s) return val; } -double get_native_double(ByteIOContext *s) +double get_be64_double(ByteIOContext *s) { - double val; + union { + double d; + UINT64 ull; + } u; - get_buffer(s, (unsigned char *) &val, sizeof(val)); - - return val; + u.ull = get_be64(s); + return u.d; } -char *get_native_string(ByteIOContext *s, char *buf, int maxlen) +char *get_strz(ByteIOContext *s, char *buf, int maxlen) { int i = 0; char c; diff --git a/libav/ffm.c b/libav/ffm.c index 45bfbcb7ce..dba0886543 100644 --- a/libav/ffm.c +++ b/libav/ffm.c @@ -166,14 +166,14 @@ static int ffm_write_header(AVFormatContext *s) put_be16(pb, (int) (codec->qcompress * 10000.0)); put_be16(pb, (int) (codec->qblur * 10000.0)); put_be32(pb, codec->bit_rate_tolerance); - put_native_string(pb, codec->rc_eq); + put_strz(pb, codec->rc_eq); put_be32(pb, codec->rc_max_rate); put_be32(pb, codec->rc_min_rate); put_be32(pb, codec->rc_buffer_size); - put_native_double(pb, codec->i_quant_factor); - put_native_double(pb, codec->b_quant_factor); - put_native_double(pb, codec->i_quant_offset); - put_native_double(pb, codec->b_quant_offset); + put_be64_double(pb, codec->i_quant_factor); + put_be64_double(pb, codec->b_quant_factor); + put_be64_double(pb, codec->i_quant_offset); + put_be64_double(pb, codec->b_quant_offset); put_be32(pb, codec->dct_algo); break; case CODEC_TYPE_AUDIO: @@ -420,14 +420,14 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap) codec->qcompress = get_be16(pb) / 10000.0; codec->qblur = get_be16(pb) / 10000.0; codec->bit_rate_tolerance = get_be32(pb); - codec->rc_eq = strdup(get_native_string(pb, rc_eq_buf, sizeof(rc_eq_buf))); + codec->rc_eq = strdup(get_strz(pb, rc_eq_buf, sizeof(rc_eq_buf))); codec->rc_max_rate = get_be32(pb); codec->rc_min_rate = get_be32(pb); codec->rc_buffer_size = get_be32(pb); - codec->i_quant_factor = get_native_double(pb); - codec->b_quant_factor = get_native_double(pb); - codec->i_quant_offset = get_native_double(pb); - codec->b_quant_offset = get_native_double(pb); + codec->i_quant_factor = get_be64_double(pb); + codec->b_quant_factor = get_be64_double(pb); + codec->i_quant_offset = get_be64_double(pb); + codec->b_quant_offset = get_be64_double(pb); codec->dct_algo = get_be32(pb); break; case CODEC_TYPE_AUDIO: