@ -455,6 +455,11 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags)
// and map the frame immediately.
AVFrame * src_frame ;
frame - > format = ctx - > format ;
frame - > hw_frames_ctx = av_buffer_ref ( hwframe_ref ) ;
if ( ! frame - > hw_frames_ctx )
return AVERROR ( ENOMEM ) ;
src_frame = av_frame_alloc ( ) ;
if ( ! src_frame )
return AVERROR ( ENOMEM ) ;
@ -464,7 +469,8 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags)
if ( ret < 0 )
return ret ;
ret = av_hwframe_map ( frame , src_frame , 0 ) ;
ret = av_hwframe_map ( frame , src_frame ,
ctx - > internal - > source_allocation_map_flags ) ;
if ( ret ) {
av_log ( ctx , AV_LOG_ERROR , " Failed to map frame into derived "
" frame context: %d. \n " , ret ) ;
@ -816,6 +822,12 @@ int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx,
goto fail ;
}
dst - > internal - > source_allocation_map_flags =
flags & ( AV_HWFRAME_MAP_READ |
AV_HWFRAME_MAP_WRITE |
AV_HWFRAME_MAP_OVERWRITE |
AV_HWFRAME_MAP_DIRECT ) ;
ret = AVERROR ( ENOSYS ) ;
if ( src - > internal - > hw_type - > frames_derive_from )
ret = src - > internal - > hw_type - > frames_derive_from ( dst , src , flags ) ;