Merge commit '5a1d605ceae448b476a525f7368ec452000d1f26'
* commit '5a1d605ceae448b476a525f7368ec452000d1f26': hwcontext_dxva2: split transfer_data() into upload/download functions Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
This commit is contained in:
		
						commit
						0f9ce9c5fc
					
				| @ -325,12 +325,34 @@ fail: | ||||
|     return err; | ||||
| } | ||||
| 
 | ||||
| static int dxva2_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, | ||||
|                                const AVFrame *src) | ||||
| static int dxva2_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst, | ||||
|                                   const AVFrame *src) | ||||
| { | ||||
|     int download = !!src->hw_frames_ctx; | ||||
| 
 | ||||
|     AVFrame *map; | ||||
|     int ret; | ||||
| 
 | ||||
|     map = av_frame_alloc(); | ||||
|     if (!map) | ||||
|         return AVERROR(ENOMEM); | ||||
|     map->format = dst->format; | ||||
| 
 | ||||
|     ret = dxva2_map_frame(ctx, map, dst, AV_HWFRAME_MAP_WRITE | AV_HWFRAME_MAP_OVERWRITE); | ||||
|     if (ret < 0) | ||||
|         goto fail; | ||||
| 
 | ||||
|     av_image_copy(map->data, map->linesize, src->data, src->linesize, | ||||
|                   ctx->sw_format, src->width, src->height); | ||||
| 
 | ||||
| fail: | ||||
|     av_frame_free(&map); | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static int dxva2_transfer_data_from(AVHWFramesContext *ctx, AVFrame *dst, | ||||
|                                     const AVFrame *src) | ||||
| { | ||||
|     AVFrame *map; | ||||
|     ptrdiff_t src_linesize[4], dst_linesize[4]; | ||||
|     int ret, i; | ||||
| 
 | ||||
|     map = av_frame_alloc(); | ||||
| @ -338,25 +360,16 @@ static int dxva2_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, | ||||
|         return AVERROR(ENOMEM); | ||||
|     map->format = dst->format; | ||||
| 
 | ||||
|     ret = dxva2_map_frame(ctx, map, download ? src : dst, | ||||
|                           download ? AV_HWFRAME_MAP_READ : | ||||
|                                      AV_HWFRAME_MAP_WRITE | AV_HWFRAME_MAP_OVERWRITE); | ||||
|     ret = dxva2_map_frame(ctx, map, src, AV_HWFRAME_MAP_READ); | ||||
|     if (ret < 0) | ||||
|         goto fail; | ||||
| 
 | ||||
|     if (download) { | ||||
|         ptrdiff_t src_linesize[4], dst_linesize[4]; | ||||
|         for (i = 0; i < 4; i++) { | ||||
|             dst_linesize[i] = dst->linesize[i]; | ||||
|             src_linesize[i] = map->linesize[i]; | ||||
|         } | ||||
|         av_image_copy_uc_from(dst->data, dst_linesize, map->data, src_linesize, | ||||
|                               ctx->sw_format, src->width, src->height); | ||||
|     } else { | ||||
|         av_image_copy(map->data, map->linesize, src->data, src->linesize, | ||||
|                       ctx->sw_format, src->width, src->height); | ||||
|     for (i = 0; i < 4; i++) { | ||||
|         dst_linesize[i] = dst->linesize[i]; | ||||
|         src_linesize[i] = map->linesize[i]; | ||||
|     } | ||||
| 
 | ||||
|     av_image_copy_uc_from(dst->data, dst_linesize, map->data, src_linesize, | ||||
|                           ctx->sw_format, src->width, src->height); | ||||
| fail: | ||||
|     av_frame_free(&map); | ||||
|     return ret; | ||||
| @ -557,8 +570,8 @@ const HWContextType ff_hwcontext_type_dxva2 = { | ||||
|     .frames_uninit        = dxva2_frames_uninit, | ||||
|     .frames_get_buffer    = dxva2_get_buffer, | ||||
|     .transfer_get_formats = dxva2_transfer_get_formats, | ||||
|     .transfer_data_to     = dxva2_transfer_data, | ||||
|     .transfer_data_from   = dxva2_transfer_data, | ||||
|     .transfer_data_to     = dxva2_transfer_data_to, | ||||
|     .transfer_data_from   = dxva2_transfer_data_from, | ||||
|     .map_from             = dxva2_map_from, | ||||
| 
 | ||||
|     .pix_fmts             = (const enum AVPixelFormat[]){ AV_PIX_FMT_DXVA2_VLD, AV_PIX_FMT_NONE }, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user