comparison h263dec.c @ 903:22ee74da2cd3 libavcodec

cleanup adding AVVideoFrame moving quality, pict_type, key_frame, qscale_table, ... to AVVideoFrame removing obsolete variables in AVCodecContext skiping of MBs in b frames correctly initalizing AVCodecContext picture buffer cleanup
author michaelni
date Wed, 04 Dec 2002 10:04:03 +0000
parents 4513713d664a
children b3ae2aba4b24
comparison
equal deleted inserted replaced
902:6acc8394960d 903:22ee74da2cd3
197 /* DCT & quantize */ 197 /* DCT & quantize */
198 s->dsp.clear_blocks(s->block[0]); 198 s->dsp.clear_blocks(s->block[0]);
199 199
200 s->mv_dir = MV_DIR_FORWARD; 200 s->mv_dir = MV_DIR_FORWARD;
201 s->mv_type = MV_TYPE_16X16; 201 s->mv_type = MV_TYPE_16X16;
202 // s->mb_skiped = 0;
202 //printf("%d %d %06X\n", ret, get_bits_count(&s->gb), show_bits(&s->gb, 24)); 203 //printf("%d %d %06X\n", ret, get_bits_count(&s->gb), show_bits(&s->gb, 24));
203 ret= s->decode_mb(s, s->block); 204 ret= s->decode_mb(s, s->block);
204 205
205 PRINT_QP("%2d", s->qscale); 206 PRINT_QP("%2d", s->qscale);
206 MPV_decode_mb(s, s->block); 207 MPV_decode_mb(s, s->block);
345 void *data, int *data_size, 346 void *data, int *data_size,
346 UINT8 *buf, int buf_size) 347 UINT8 *buf, int buf_size)
347 { 348 {
348 MpegEncContext *s = avctx->priv_data; 349 MpegEncContext *s = avctx->priv_data;
349 int ret,i; 350 int ret,i;
350 AVPicture *pict = data; 351 AVVideoFrame *pict = data;
351 float new_aspect; 352 float new_aspect;
352 353
353 #ifdef PRINT_FRAME_TIME 354 #ifdef PRINT_FRAME_TIME
354 uint64_t time= rdtsc(); 355 uint64_t time= rdtsc();
355 #endif 356 #endif
356 #ifdef DEBUG 357 #ifdef DEBUG
357 printf("*****frame %d size=%d\n", avctx->frame_number, buf_size); 358 printf("*****frame %d size=%d\n", avctx->frame_number, buf_size);
358 printf("bytes=%x %x %x %x\n", buf[0], buf[1], buf[2], buf[3]); 359 printf("bytes=%x %x %x %x\n", buf[0], buf[1], buf[2], buf[3]);
359 #endif 360 #endif
360
361 s->flags= avctx->flags; 361 s->flags= avctx->flags;
362 362
363 *data_size = 0; 363 *data_size = 0;
364 364
365 /* no supplementary picture */ 365 /* no supplementary picture */
521 if (ret < 0){ 521 if (ret < 0){
522 fprintf(stderr, "header damaged\n"); 522 fprintf(stderr, "header damaged\n");
523 return -1; 523 return -1;
524 } 524 }
525 525
526 s->avctx->key_frame = (s->pict_type == I_TYPE); 526 // for hurry_up==5
527 s->avctx->pict_type = s->pict_type; 527 s->current_picture.pict_type= s->pict_type;
528 s->current_picture.key_frame= s->pict_type == I_TYPE;
528 529
529 /* skip b frames if we dont have reference frames */ 530 /* skip b frames if we dont have reference frames */
530 if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); 531 if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size);
531 /* skip b frames if we are in a hurry */ 532 /* skip b frames if we are in a hurry */
532 if(avctx->hurry_up && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); 533 if(avctx->hurry_up && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size);
578 579
579 s->error_status_table[s->resync_mb_x + s->resync_mb_y*s->mb_width]|= VP_START; 580 s->error_status_table[s->resync_mb_x + s->resync_mb_y*s->mb_width]|= VP_START;
580 } 581 }
581 582
582 if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type==I_TYPE) 583 if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type==I_TYPE)
583 if(msmpeg4_decode_ext_header(s, buf_size) < 0) return -1; 584 if(msmpeg4_decode_ext_header(s, buf_size) < 0){
585 s->error_status_table[s->mb_num-1]= AC_ERROR|DC_ERROR|MV_ERROR;
586 }
584 587
585 /* divx 5.01+ bistream reorder stuff */ 588 /* divx 5.01+ bistream reorder stuff */
586 if(s->codec_id==CODEC_ID_MPEG4 && s->bitstream_buffer_size==0 && s->divx_version>=500){ 589 if(s->codec_id==CODEC_ID_MPEG4 && s->bitstream_buffer_size==0 && s->divx_version>=500){
587 int current_pos= get_bits_count(&s->gb)>>3; 590 int current_pos= get_bits_count(&s->gb)>>3;
588 591
642 for(mb_y=0; mb_y<s->mb_height; mb_y++){ 645 for(mb_y=0; mb_y<s->mb_height; mb_y++){
643 int mb_x; 646 int mb_x;
644 int y= mb_y*16 + 8; 647 int y= mb_y*16 + 8;
645 for(mb_x=0; mb_x<s->mb_width; mb_x++){ 648 for(mb_x=0; mb_x<s->mb_width; mb_x++){
646 int x= mb_x*16 + 8; 649 int x= mb_x*16 + 8;
647 uint8_t *ptr= s->last_picture[0]; 650 uint8_t *ptr= s->last_picture.data[0];
648 int xy= 1 + mb_x*2 + (mb_y*2 + 1)*(s->mb_width*2 + 2); 651 int xy= 1 + mb_x*2 + (mb_y*2 + 1)*(s->mb_width*2 + 2);
649 int mx= (s->motion_val[xy][0]>>1) + x; 652 int mx= (s->motion_val[xy][0]>>1) + x;
650 int my= (s->motion_val[xy][1]>>1) + y; 653 int my= (s->motion_val[xy][1]>>1) + y;
651 int i; 654 int i;
652 int max; 655 int max;
667 s->mbskip_table[mb_x + mb_y*s->mb_width]=0; 670 s->mbskip_table[mb_x + mb_y*s->mb_width]=0;
668 } 671 }
669 } 672 }
670 673
671 } 674 }
672 #endif 675 #endif
673 if(s->pict_type==B_TYPE || (!s->has_b_frames)){ 676 if(s->pict_type==B_TYPE || (!s->has_b_frames)){
674 pict->data[0] = s->current_picture[0]; 677 *pict= *(AVVideoFrame*)&s->current_picture;
675 pict->data[1] = s->current_picture[1];
676 pict->data[2] = s->current_picture[2];
677 } else { 678 } else {
678 pict->data[0] = s->last_picture[0]; 679 *pict= *(AVVideoFrame*)&s->last_picture;
679 pict->data[1] = s->last_picture[1]; 680 }
680 pict->data[2] = s->last_picture[2];
681 }
682 pict->linesize[0] = s->linesize;
683 pict->linesize[1] = s->uvlinesize;
684 pict->linesize[2] = s->uvlinesize;
685
686 avctx->quality = s->qscale;
687 681
688 /* Return the Picture timestamp as the frame number */ 682 /* Return the Picture timestamp as the frame number */
689 /* we substract 1 because it is added on utils.c */ 683 /* we substract 1 because it is added on utils.c */
690 avctx->frame_number = s->picture_number - 1; 684 avctx->frame_number = s->picture_number - 1;
691 685
692 /* dont output the last pic after seeking 686 /* dont output the last pic after seeking
693 note we allready added +1 for the current pix in MPV_frame_end(s) */ 687 note we allready added +1 for the current pix in MPV_frame_end(s) */
694 if(s->num_available_buffers>=2 || (!s->has_b_frames)) 688 if(s->num_available_buffers>=2 || (!s->has_b_frames))
695 *data_size = sizeof(AVPicture); 689 *data_size = sizeof(AVVideoFrame);
696 #ifdef PRINT_FRAME_TIME 690 #ifdef PRINT_FRAME_TIME
697 printf("%Ld\n", rdtsc()-time); 691 printf("%Ld\n", rdtsc()-time);
698 #endif 692 #endif
699 return get_consumed_bytes(s, buf_size); 693 return get_consumed_bytes(s, buf_size);
700 } 694 }