@@ -300,11 +300,21 @@ static void lsr_read_extension(GF_LASeRCodec *lsr, const char *name)
300300
301301static void lsr_read_extend_class (GF_LASeRCodec * lsr , char * * out_data , u32 * out_len , const char * name )
302302{
303- u32 len ;
303+ u32 len , blen ;
304304 GF_LSR_READ_INT (lsr , len , lsr -> info -> cfg .extensionIDBits , "reserved" );
305305 len = lsr_read_vluimsbf5 (lsr , "len" );
306- // while (len) gf_bs_read_int(lsr->bs, 1);
307- gf_bs_read_long_int (lsr -> bs , len );
306+ while (len && !gf_bs_is_align (lsr -> bs )) {
307+ gf_bs_read_int (lsr -> bs , len );
308+ len -- ;
309+ }
310+ blen = len / 8 ;
311+ gf_bs_skip_bytes (lsr -> bs , blen );
312+ len -= blen * 8 ;
313+
314+ while (len ) {
315+ gf_bs_read_int (lsr -> bs , 1 );
316+ len -- ;
317+ }
308318 if (out_data ) * out_data = NULL ;
309319 if (out_len ) * out_len = 0 ;
310320}
@@ -839,10 +849,11 @@ static void lsr_read_id(GF_LASeRCodec *lsr, GF_Node *n)
839849static Fixed lsr_translate_coords (GF_LASeRCodec * lsr , u32 val , u32 nb_bits )
840850{
841851 if (!nb_bits ) return 0 ;
842-
852+ if (nb_bits >=32 ) return 0 ;
853+
843854#ifdef GPAC_FIXED_POINT
844855 if (val >> (nb_bits - 1 ) ) {
845- s32 neg = (s32 ) val - (1 << nb_bits );
856+ s64 neg = (s64 ) val - (0x00000001UL << nb_bits );
846857 if (neg < - FIX_ONE / 2 )
847858 return 2 * gf_divfix (INT2FIX (neg /2 ), lsr -> res_factor );
848859 return gf_divfix (INT2FIX (neg ), lsr -> res_factor );
@@ -853,18 +864,18 @@ static Fixed lsr_translate_coords(GF_LASeRCodec *lsr, u32 val, u32 nb_bits)
853864 }
854865#else
855866 if (val >> (nb_bits - 1 ) ) {
856- s32 neg = (s32 ) val - (1 << nb_bits );
857- return gf_divfix ( INT2FIX ( neg ), lsr -> res_factor ) ;
867+ s64 neg = (s64 ) val - (0x00000001UL << nb_bits );
868+ return (( Fixed ) neg ) / lsr -> res_factor ;
858869 } else {
859- return gf_divfix ( INT2FIX ( val ), lsr -> res_factor ) ;
870+ return (( Fixed ) val ) / lsr -> res_factor ;
860871 }
861872#endif
862873}
863874
864875static Fixed lsr_translate_scale (GF_LASeRCodec * lsr , u32 val )
865876{
866877 if (val >> (lsr -> coord_bits - 1 ) ) {
867- s32 v = val - (1 << lsr -> coord_bits );
878+ s64 v = val - (0x00000001UL << lsr -> coord_bits );
868879 return INT2FIX (v ) / 256 ;
869880 } else {
870881 return INT2FIX (val ) / 256 ;
0 commit comments