Mercurial > libavcodec.hg
comparison h263.c @ 660:b8e268337a1d libavcodec
parsing resync header extension support
author | michaelni |
---|---|
date | Thu, 12 Sep 2002 15:22:14 +0000 |
parents | 9dc53c09d791 |
children | a0901e38c564 |
comparison
equal
deleted
inserted
replaced
659:9dc53c09d791 | 660:b8e268337a1d |
---|---|
2046 header_extension= get_bits1(gb); | 2046 header_extension= get_bits1(gb); |
2047 } | 2047 } |
2048 if(header_extension){ | 2048 if(header_extension){ |
2049 int time_increment; | 2049 int time_increment; |
2050 int time_incr=0; | 2050 int time_incr=0; |
2051 printf("header extension not supported\n"); | |
2052 return -1; | |
2053 | 2051 |
2054 while (get_bits1(gb) != 0) | 2052 while (get_bits1(gb) != 0) |
2055 time_incr++; | 2053 time_incr++; |
2056 | 2054 |
2057 check_marker(gb, "before time_increment in video packed header"); | 2055 check_marker(gb, "before time_increment in video packed header"); |
2058 time_increment= get_bits(gb, s->time_increment_bits); | 2056 time_increment= get_bits(gb, s->time_increment_bits); |
2059 if(s->pict_type!=B_TYPE){ | |
2060 s->last_time_base= s->time_base; | |
2061 s->time_base+= time_incr; | |
2062 s->time= s->time_base*s->time_increment_resolution + time_increment; | |
2063 s->pp_time= s->time - s->last_non_b_time; | |
2064 s->last_non_b_time= s->time; | |
2065 }else{ | |
2066 s->time= (s->last_time_base + time_incr)*s->time_increment_resolution + time_increment; | |
2067 s->bp_time= s->last_non_b_time - s->time; | |
2068 } | |
2069 check_marker(gb, "before vop_coding_type in video packed header"); | 2057 check_marker(gb, "before vop_coding_type in video packed header"); |
2070 | 2058 |
2071 skip_bits(gb, 2); /* vop coding type */ | 2059 skip_bits(gb, 2); /* vop coding type */ |
2072 //FIXME not rect stuff here | 2060 //FIXME not rect stuff here |
2073 | 2061 |
2074 if(s->shape != BIN_ONLY_SHAPE){ | 2062 if(s->shape != BIN_ONLY_SHAPE){ |
2075 skip_bits(gb, 3); /* intra dc vlc threshold */ | 2063 skip_bits(gb, 3); /* intra dc vlc threshold */ |
2076 | 2064 |
2077 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE && s->num_sprite_warping_points){ | 2065 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE && s->num_sprite_warping_points){ |
2078 mpeg4_decode_sprite_trajectory(s); | 2066 mpeg4_decode_sprite_trajectory(s); |
2067 fprintf(stderr, "untested\n"); | |
2079 } | 2068 } |
2080 | 2069 |
2081 //FIXME reduced res stuff here | 2070 //FIXME reduced res stuff here |
2082 | 2071 |
2083 if (s->pict_type != I_TYPE) { | 2072 if (s->pict_type != I_TYPE) { |
2084 s->f_code = get_bits(gb, 3); /* fcode_for */ | 2073 int f_code = get_bits(gb, 3); /* fcode_for */ |
2085 if(s->f_code==0){ | 2074 if(f_code==0){ |
2086 printf("Error, video packet header damaged or not MPEG4 header (f_code=0)\n"); | 2075 printf("Error, video packet header damaged (f_code=0)\n"); |
2087 return -1; // makes no sense to continue, as the MV decoding will break very quickly | |
2088 } | 2076 } |
2089 } | 2077 } |
2090 if (s->pict_type == B_TYPE) { | 2078 if (s->pict_type == B_TYPE) { |
2091 s->b_code = get_bits(gb, 3); | 2079 int b_code = get_bits(gb, 3); |
2080 if(b_code==0){ | |
2081 printf("Error, video packet header damaged (b_code=0)\n"); | |
2082 } | |
2092 } | 2083 } |
2093 } | 2084 } |
2094 } | 2085 } |
2095 //FIXME new-pred stuff | 2086 //FIXME new-pred stuff |
2096 | 2087 |