comparison h263.c @ 10791:48adb5a1b47b libavcodec

Split out intel H263 decoder.
author michael
date Thu, 07 Jan 2010 06:25:41 +0000
parents 0c8f9288b5e4
children 9b3ec3d1bdae
comparison
equal deleted inserted replaced
10790:145b62a1de1c 10791:48adb5a1b47b
131 return 5; 131 return 5;
132 else 132 else
133 return 7; 133 return 7;
134 } 134 }
135 135
136 static void show_pict_info(MpegEncContext *s){ 136 void ff_h263_show_pict_info(MpegEncContext *s){
137 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n", 137 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
138 s->qscale, av_get_pict_type_char(s->pict_type), 138 s->qscale, av_get_pict_type_char(s->pict_type),
139 s->gb.size_in_bits, 1-s->no_rounding, 139 s->gb.size_in_bits, 1-s->no_rounding,
140 s->obmc ? " AP" : "", 140 s->obmc ? " AP" : "",
141 s->umvplus ? " UMV" : "", 141 s->umvplus ? " UMV" : "",
5357 s->y_dc_scale_table= 5357 s->y_dc_scale_table=
5358 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; 5358 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
5359 } 5359 }
5360 5360
5361 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ 5361 if(s->avctx->debug&FF_DEBUG_PICT_INFO){
5362 show_pict_info(s); 5362 ff_h263_show_pict_info(s);
5363 } 5363 }
5364 if (s->pict_type == FF_I_TYPE && s->codec_tag == AV_RL32("ZYGO")){ 5364 if (s->pict_type == FF_I_TYPE && s->codec_tag == AV_RL32("ZYGO")){
5365 int i,j; 5365 int i,j;
5366 for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb)); 5366 for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
5367 av_log(s->avctx, AV_LOG_DEBUG, "\n"); 5367 av_log(s->avctx, AV_LOG_DEBUG, "\n");
6062 if(s->flags& CODEC_FLAG_LOW_DELAY) 6062 if(s->flags& CODEC_FLAG_LOW_DELAY)
6063 s->low_delay=1; 6063 s->low_delay=1;
6064 s->avctx->has_b_frames= !s->low_delay; 6064 s->avctx->has_b_frames= !s->low_delay;
6065 return decode_vop_header(s, gb); 6065 return decode_vop_header(s, gb);
6066 } 6066 }
6067
6068 /* don't understand why they choose a different header ! */
6069 int intel_h263_decode_picture_header(MpegEncContext *s)
6070 {
6071 int format;
6072
6073 /* picture header */
6074 if (get_bits_long(&s->gb, 22) != 0x20) {
6075 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
6076 return -1;
6077 }
6078 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
6079
6080 if (get_bits1(&s->gb) != 1) {
6081 av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
6082 return -1; /* marker */
6083 }
6084 if (get_bits1(&s->gb) != 0) {
6085 av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
6086 return -1; /* h263 id */
6087 }
6088 skip_bits1(&s->gb); /* split screen off */
6089 skip_bits1(&s->gb); /* camera off */
6090 skip_bits1(&s->gb); /* freeze picture release off */
6091
6092 format = get_bits(&s->gb, 3);
6093 if (format != 7) {
6094 av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n");
6095 return -1;
6096 }
6097 s->h263_plus = 0;
6098
6099 s->pict_type = FF_I_TYPE + get_bits1(&s->gb);
6100
6101 s->unrestricted_mv = get_bits1(&s->gb);
6102 s->h263_long_vectors = s->unrestricted_mv;
6103
6104 if (get_bits1(&s->gb) != 0) {
6105 av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
6106 return -1; /* SAC: off */
6107 }
6108 s->obmc= get_bits1(&s->gb);
6109 s->pb_frame = get_bits1(&s->gb);
6110
6111 if(format == 7){
6112 format = get_bits(&s->gb, 3);
6113 if(format == 0 || format == 7){
6114 av_log(s->avctx, AV_LOG_ERROR, "Wrong Intel H263 format\n");
6115 return -1;
6116 }
6117 if(get_bits(&s->gb, 2))
6118 av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
6119 s->loop_filter = get_bits1(&s->gb);
6120 if(get_bits1(&s->gb))
6121 av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
6122 if(get_bits1(&s->gb))
6123 s->pb_frame = 2;
6124 if(get_bits(&s->gb, 5))
6125 av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
6126 if(get_bits(&s->gb, 5) != 1)
6127 av_log(s->avctx, AV_LOG_ERROR, "Invalid marker\n");
6128 }
6129 if(format == 6){
6130 int ar = get_bits(&s->gb, 4);
6131 skip_bits(&s->gb, 9); // display width
6132 skip_bits1(&s->gb);
6133 skip_bits(&s->gb, 9); // display height
6134 if(ar == 15){
6135 skip_bits(&s->gb, 8); // aspect ratio - width
6136 skip_bits(&s->gb, 8); // aspect ratio - height
6137 }
6138 }
6139
6140 s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
6141 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
6142
6143 if(s->pb_frame){
6144 skip_bits(&s->gb, 3); //temporal reference for B-frame
6145 skip_bits(&s->gb, 2); //dbquant
6146 }
6147
6148 /* PEI */
6149 while (get_bits1(&s->gb) != 0) {
6150 skip_bits(&s->gb, 8);
6151 }
6152 s->f_code = 1;
6153
6154 s->y_dc_scale_table=
6155 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
6156
6157 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
6158 show_pict_info(s);
6159
6160 return 0;
6161 }