00001 /* 00002 * dvdv.c - Mac Hardware MPEG2 decoding. 00003 * 00004 * Based on modifications to ffmpeg's libavcodec/mpeg12.c by John Dagliesh. 00005 * See http://www.defyne.org/dvb/accellent.html 00006 * 00007 * Added to the MythTV project's copy of libavcodec by Nigel Pearson. 00008 */ 00009 00010 #include "avcodec.h" 00011 #include "mpegvideo.h" 00012 #include "dvdv.h" 00013 00014 void DVDV_init_block(MpegEncContext *s) 00015 { 00016 DVDV_MBInfo * mb = DVDV_MB(s); 00017 int ret; 00018 00019 for (ret=0; ret<6; ret++) 00020 mb->num_coded_elts[ret] = 0; 00021 } 00022 00023 void DVDV_decode_mb(MpegEncContext *s) 00024 { 00025 DVDV_MBInfo * mb = DVDV_MB(s); 00026 00027 mb->mb_type = 0; 00028 if (!s->mb_intra) 00029 { 00030 if (s->mv_dir & MV_DIR_FORWARD) 00031 { 00032 mb->mb_type |= 1; 00033 mb->frwd_mv[0] = s->mv[0][0][0]; 00034 mb->frwd_mv[1] = s->mv[0][0][1]; 00035 mb->frwd_mv_field[0] = s->mv[0][1][0]; 00036 mb->frwd_mv_field[1] = s->mv[0][1][1]; 00037 } 00038 if (s->mv_dir & MV_DIR_BACKWARD) 00039 { 00040 mb->mb_type |= 2; 00041 mb->back_mv[0] = s->mv[1][0][0]; 00042 mb->back_mv[1] = s->mv[1][0][1]; 00043 mb->back_mv_field[0] = s->mv[1][1][0]; 00044 mb->back_mv_field[1] = s->mv[1][1][1]; 00045 } 00046 if (s->mv_type != MV_TYPE_16X16) 00047 { 00048 mb->mb_type |= 4; 00049 mb->field_select[0] = s->field_select[0][0]; 00050 mb->field_select[1] = s->field_select[1][0]; 00051 mb->field_select[2] = s->field_select[0][1]; 00052 mb->field_select[3] = s->field_select[1][1]; 00053 } 00054 } 00055 mb->ildct = s->interlaced_dct; 00056 DVDV_MB(s)++; 00057 00058 // side effects of MPV_decode_mb: 00059 if (!s->mb_intra) 00060 { 00061 s->last_dc[0] = 00062 s->last_dc[1] = 00063 s->last_dc[2] = 128 << s->intra_dc_precision; 00064 } 00065 s->mb_skipped = 0; 00066 }
1.5.5