|  |  | @@ -38,10 +38,8 @@ | 
		
	
		
			
			|  |  |  | void ff_xvmc_init_block(MpegEncContext *s) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | struct xvmc_pixfmt_render *render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; | 
		
	
		
			
			|  |  |  | if (!render || render->magic_id != AV_XVMC_RENDER_MAGIC) { | 
		
	
		
			
			|  |  |  | assert(0); | 
		
	
		
			
			|  |  |  | return; // make sure that this is a render packet | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | assert(render && render->magic_id == AV_XVMC_RENDER_MAGIC); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | s->block = (DCTELEM *)(render->data_blocks + render->next_free_data_block_num * 64); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -67,20 +65,37 @@ void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp) | 
		
	
		
			
			|  |  |  | int ff_xvmc_field_start(MpegEncContext*s, AVCodecContext *avctx) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | struct xvmc_pixfmt_render *last, *next, *render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; | 
		
	
		
			
			|  |  |  | const int mb_block_count = 4 + (1 << s->chroma_format); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | assert(avctx); | 
		
	
		
			
			|  |  |  | if (!render || render->magic_id != AV_XVMC_RENDER_MAGIC) | 
		
	
		
			
			|  |  |  | if (!render || render->magic_id != AV_XVMC_RENDER_MAGIC || | 
		
	
		
			
			|  |  |  | !render->data_blocks || !render->mv_blocks){ | 
		
	
		
			
			|  |  |  | av_log(avctx, AV_LOG_ERROR, | 
		
	
		
			
			|  |  |  | "Render token doesn't look as expected.\n"); | 
		
	
		
			
			|  |  |  | return -1; // make sure that this is a render packet | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | render->picture_structure = s->picture_structure; | 
		
	
		
			
			|  |  |  | render->flags             = s->first_field ? 0 : XVMC_SECOND_FIELD; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (render->filled_mv_blocks_num) { | 
		
	
		
			
			|  |  |  | av_log(avctx, AV_LOG_ERROR, | 
		
	
		
			
			|  |  |  | "Rendering surface contains %i unprocessed blocks\n", | 
		
	
		
			
			|  |  |  | "Rendering surface contains %i unprocessed blocks.\n", | 
		
	
		
			
			|  |  |  | render->filled_mv_blocks_num); | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (render->total_number_of_mv_blocks   < 1 || | 
		
	
		
			
			|  |  |  | render->total_number_of_data_blocks < mb_block_count) { | 
		
	
		
			
			|  |  |  | av_log(avctx, AV_LOG_ERROR, | 
		
	
		
			
			|  |  |  | "Rendering surface doesn't provide enough block structures to work with.\n"); | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (render->total_number_of_mv_blocks   < 1 || | 
		
	
		
			
			|  |  |  | render->total_number_of_data_blocks < mb_block_count) { | 
		
	
		
			
			|  |  |  | av_log(avctx, AV_LOG_ERROR, | 
		
	
		
			
			|  |  |  | "Rendering surface doesn't provide enough block structures to work with.\n"); | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | render->p_future_surface = NULL; | 
		
	
		
			
			|  |  |  | render->p_past_surface   = NULL; | 
		
	
	
		
			
				|  |  | 
 |