From 9d82b0dda1ae42e835ef4bc2c38ac1fd2753b781 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 7 Jul 2006 22:43:32 +0000 Subject: [PATCH] moving utf8 reading function to libavutil Originally committed as revision 5664 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/flac.c | 47 +++------------------------------------------- libavutil/common.h | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 44 deletions(-) diff --git a/libavcodec/flac.c b/libavcodec/flac.c index 4978d0e515..659112c77d 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -85,53 +85,12 @@ static int blocksize_table[] = { 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7 }; -static int64_t get_utf8(GetBitContext *gb) -{ - uint64_t val; - int ones=0, bytes; - - while(get_bits1(gb)) - ones++; - - if (ones==0) bytes=0; - else if(ones==1) return -1; - else bytes= ones - 1; - - val= get_bits(gb, 7-ones); - while(bytes--){ - const int tmp = get_bits(gb, 8); - - if((tmp>>6) != 2) - return -1; - val<<=6; - val|= tmp&0x3F; - } +static int64_t get_utf8(GetBitContext *gb){ + int64_t val; + GET_UTF8(val, get_bits(gb, 8), return -1;) return val; } -#if 0 -static int skip_utf8(GetBitContext *gb) -{ - int ones=0, bytes; - - while(get_bits1(gb)) - ones++; - - if (ones==0) bytes=0; - else if(ones==1) return -1; - else bytes= ones - 1; - - skip_bits(gb, 7-ones); - while(bytes--){ - const int tmp = get_bits(gb, 8); - - if((tmp>>6) != 2) - return -1; - } - return 0; -} -#endif - static void metadata_streaminfo(FLACContext *s); static void dump_headers(FLACContext *s); diff --git a/libavutil/common.h b/libavutil/common.h index 7187c579c9..ffded89a4c 100644 --- a/libavutil/common.h +++ b/libavutil/common.h @@ -503,6 +503,20 @@ static inline int ff_get_fourcc(const char *s){ level= (level^mask)-mask; #endif +#define GET_UTF8(val, GET_BYTE, ERROR)\ + val= GET_BYTE;\ + {\ + int ones= 7 - av_log2(val ^ 255);\ + if(ones==1)\ + ERROR\ + val&= 127>>ones;\ + while(--ones > 0){\ + int tmp= GET_BYTE - 128;\ + if(tmp>>6)\ + ERROR\ + val= (val<<6) + tmp;\ + }\ + } #if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT) #define COPY3_IF_LT(x,y,a,b,c,d)\