diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/mpegvideo.c')
-rw-r--r-- | src/libffmpeg/libavcodec/mpegvideo.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/libffmpeg/libavcodec/mpegvideo.c b/src/libffmpeg/libavcodec/mpegvideo.c index d37087c3f..38d8a99b9 100644 --- a/src/libffmpeg/libavcodec/mpegvideo.c +++ b/src/libffmpeg/libavcodec/mpegvideo.c @@ -372,7 +372,7 @@ static int alloc_picture(MpegEncContext *s, Picture *pic, int shared){ } if(pic->linesize[1] != pic->linesize[2]){ - av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (uv stride missmatch)\n"); + av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (uv stride mismatch)\n"); return -1; } @@ -550,9 +550,9 @@ static void update_duplicate_context_after_me(MpegEncContext *dst, MpegEncContex COPY(lambda2); COPY(picture_in_gop_number); COPY(gop_picture_number); - COPY(frame_pred_frame_dct); //FIXME dont set in encode_header - COPY(progressive_frame); //FIXME dont set in encode_header - COPY(partitioned_frame); //FIXME dont set in encode_header + COPY(frame_pred_frame_dct); //FIXME don't set in encode_header + COPY(progressive_frame); //FIXME don't set in encode_header + COPY(partitioned_frame); //FIXME don't set in encode_header #undef COPY } @@ -1493,7 +1493,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) } alloc: if(!s->encoding){ - /* release non refernce frames */ + /* release non reference frames */ for(i=0; i<MAX_PICTURE_COUNT; i++){ if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){ s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]); @@ -1544,7 +1544,7 @@ alloc: if(s->pict_type != I_TYPE && (s->last_picture_ptr==NULL || s->last_picture_ptr->data[0]==NULL)){ av_log(avctx, AV_LOG_ERROR, "warning: first frame is no keyframe\n"); - assert(s->pict_type != B_TYPE); //these should have been dropped if we dont have a reference + assert(s->pict_type != B_TYPE); //these should have been dropped if we don't have a reference goto alloc; } @@ -1566,8 +1566,8 @@ alloc: s->hurry_up= s->avctx->hurry_up; s->error_resilience= avctx->error_resilience; - /* set dequantizer, we cant do it during init as it might change for mpeg4 - and we cant do it in the header decode as init isnt called for mpeg4 there yet */ + /* set dequantizer, we can't do it during init as it might change for mpeg4 + and we can't do it in the header decode as init isnt called for mpeg4 there yet */ if(s->mpeg_quant || s->codec_id == CODEC_ID_MPEG2VIDEO){ s->dct_unquantize_intra = s->dct_unquantize_mpeg2_intra; s->dct_unquantize_inter = s->dct_unquantize_mpeg2_inter; @@ -1626,7 +1626,7 @@ void MPV_frame_end(MpegEncContext *s) #endif if(s->encoding){ - /* release non refernce frames */ + /* release non-reference frames */ for(i=0; i<MAX_PICTURE_COUNT; i++){ if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){ s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]); @@ -2164,7 +2164,7 @@ static void select_input_picture(MpegEncContext *s){ s->reordered_input_picture[i-1]= s->reordered_input_picture[i]; s->reordered_input_picture[MAX_PICTURE_COUNT-1]= NULL; - /* set next picture types & ordering */ + /* set next picture type & ordering */ if(s->reordered_input_picture[0]==NULL && s->input_picture[0]){ if(/*s->picture_in_gop_number >= s->gop_size ||*/ s->next_picture_ptr==NULL || s->intra_only){ s->reordered_input_picture[0]= s->input_picture[0]; @@ -2281,7 +2281,7 @@ no_output_pic: copy_picture(&s->new_picture, s->reordered_input_picture[0]); if(s->reordered_input_picture[0]->type == FF_BUFFER_TYPE_SHARED){ - // input is a shared pix, so we cant modifiy it -> alloc a new one & ensure that the shared one is reuseable + // input is a shared pix, so we can't modifiy it -> alloc a new one & ensure that the shared one is reuseable int i= ff_find_unused_picture(s, 0); Picture *pic= &s->picture[i]; @@ -3231,7 +3231,7 @@ static inline void chroma_4mv_motion_lowres(MpegEncContext *s, } /** - * motion compesation of a single macroblock + * motion compensation of a single macroblock * @param s context * @param dest_y luma destination pointer * @param dest_cb chroma cb/u destination pointer @@ -3480,7 +3480,7 @@ static inline void MPV_motion(MpegEncContext *s, } /** - * motion compesation of a single macroblock + * motion compensation of a single macroblock * @param s context * @param dest_y luma destination pointer * @param dest_cb chroma cb/u destination pointer @@ -3798,7 +3798,13 @@ static always_inline void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM bloc } /* skip dequant / idct if we are really late ;) */ - if(s->hurry_up>1) return; + if(s->hurry_up>1) goto skip_idct; + if(s->avctx->skip_idct){ + if( (s->avctx->skip_idct >= AVDISCARD_NONREF && s->pict_type == B_TYPE) + ||(s->avctx->skip_idct >= AVDISCARD_NONKEY && s->pict_type != I_TYPE) + || s->avctx->skip_idct >= AVDISCARD_ALL) + goto skip_idct; + } /* add dct residue */ if(s->encoding || !( s->h263_msmpeg4 || s->codec_id==CODEC_ID_MPEG1VIDEO || s->codec_id==CODEC_ID_MPEG2VIDEO @@ -3884,6 +3890,7 @@ static always_inline void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM bloc }//gray } } +skip_idct: if(!readable){ s->dsp.put_pixels_tab[0][0](s->dest[0], dest_y , linesize,16); s->dsp.put_pixels_tab[s->chroma_x_shift][0](s->dest[1], dest_cb, uvlinesize,16 >> s->chroma_y_shift); @@ -4025,7 +4032,7 @@ void ff_draw_horiz_band(MpegEncContext *s, int y, int h){ } void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename - const int linesize= s->current_picture.linesize[0]; //not s->linesize as this woulnd be wrong for field pics + const int linesize= s->current_picture.linesize[0]; //not s->linesize as this would be wrong for field pics const int uvlinesize= s->current_picture.linesize[1]; const int mb_size= 4 - s->avctx->lowres; |