Mercurial > libavcodec.hg
comparison rv10.c @ 1642:e83980313d3f libavcodec
rv20 sub_id == 0x20200002 support
author | michael |
---|---|
date | Sun, 30 Nov 2003 18:08:35 +0000 |
parents | 0226cad80fc2 |
children | 9bb07bd315d9 |
comparison
equal
deleted
inserted
replaced
1641:0226cad80fc2 | 1642:e83980313d3f |
---|---|
337 return mb_count; | 337 return mb_count; |
338 } | 338 } |
339 | 339 |
340 static int rv20_decode_picture_header(MpegEncContext *s) | 340 static int rv20_decode_picture_header(MpegEncContext *s) |
341 { | 341 { |
342 int pb_frame, seq, mb_pos; | 342 int seq, mb_pos, i; |
343 int i; | 343 |
344 | 344 i= get_bits(&s->gb, 2); |
345 if (get_bits(&s->gb, 1)) | 345 switch(i){ |
346 s->pict_type = P_TYPE; | 346 case 0: s->pict_type= I_TYPE; break; |
347 else | 347 case 2: s->pict_type= P_TYPE; break; |
348 s->pict_type = I_TYPE; | 348 case 3: s->pict_type= B_TYPE; break; |
349 | 349 default: |
350 pb_frame = get_bits(&s->gb, 2); | 350 av_log(s->avctx, AV_LOG_ERROR, "unknown frame type\n"); |
351 | 351 return -1; |
352 if (pb_frame){ | 352 } |
353 av_log(s->avctx, AV_LOG_ERROR, "pb frame not supported\n"); | 353 |
354 if (get_bits(&s->gb, 1)){ | |
355 av_log(s->avctx, AV_LOG_ERROR, "unknown bit set\n"); | |
354 return -1; | 356 return -1; |
355 } | 357 } |
356 | 358 |
357 s->qscale = get_bits(&s->gb, 5); | 359 s->qscale = get_bits(&s->gb, 5); |
358 if(s->qscale==0){ | 360 if(s->qscale==0){ |
359 av_log(s->avctx, AV_LOG_ERROR, "error, qscale:0\n"); | 361 av_log(s->avctx, AV_LOG_ERROR, "error, qscale:0\n"); |
360 return -1; | 362 return -1; |
361 } | 363 } |
362 | 364 |
363 seq= get_bits(&s->gb, 8); | 365 if(s->avctx->sub_id == 0x20200002) |
366 seq= get_bits(&s->gb, 16); | |
367 else | |
368 seq= get_bits(&s->gb, 8); | |
364 | 369 |
365 for(i=0; i<6; i++){ | 370 for(i=0; i<6; i++){ |
366 if(s->mb_width*s->mb_height < ff_mba_max[i]) break; | 371 if(s->mb_width*s->mb_height < ff_mba_max[i]) break; |
367 } | 372 } |
368 mb_pos= get_bits(&s->gb, ff_mba_length[i]); | 373 mb_pos= get_bits(&s->gb, ff_mba_length[i]); |
377 // s->obmc=1; | 382 // s->obmc=1; |
378 // s->umvplus=1; | 383 // s->umvplus=1; |
379 // s->modified_quant=1; | 384 // s->modified_quant=1; |
380 | 385 |
381 if(s->avctx->debug & FF_DEBUG_PICT_INFO){ | 386 if(s->avctx->debug & FF_DEBUG_PICT_INFO){ |
382 av_log(s->avctx, AV_LOG_INFO, "num:%3d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n", | 387 av_log(s->avctx, AV_LOG_INFO, "num:%5d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n", |
383 seq, s->mb_x, s->mb_y, s->pict_type, s->qscale, s->no_rounding); | 388 seq, s->mb_x, s->mb_y, s->pict_type, s->qscale, s->no_rounding); |
389 } | |
390 | |
391 if (s->pict_type == B_TYPE){ | |
392 av_log(s->avctx, AV_LOG_ERROR, "b frame not supported\n"); | |
393 return -1; | |
384 } | 394 } |
385 | 395 |
386 return s->mb_width*s->mb_height - mb_pos; | 396 return s->mb_width*s->mb_height - mb_pos; |
387 } | 397 } |
388 | 398 |