@ -75,6 +75,33 @@ static int wrapped_avframe_encode(AVCodecContext *avctx, AVPacket *pkt,
return 0 ;
return 0 ;
}
}
static int wrapped_avframe_decode ( AVCodecContext * avctx , void * data ,
int * got_frame , AVPacket * pkt )
{
AVFrame * in , * out ;
int err ;
if ( ! ( pkt - > flags & AV_PKT_FLAG_TRUSTED ) ) {
// This decoder is not usable with untrusted input.
return AVERROR ( EPERM ) ;
}
if ( pkt - > size < sizeof ( AVFrame ) )
return AVERROR ( EINVAL ) ;
in = ( AVFrame * ) pkt - > data ;
out = data ;
err = ff_decode_frame_props ( avctx , out ) ;
if ( err < 0 )
return err ;
av_frame_move_ref ( out , in ) ;
* got_frame = 1 ;
return 0 ;
}
AVCodec ff_wrapped_avframe_encoder = {
AVCodec ff_wrapped_avframe_encoder = {
. name = " wrapped_avframe " ,
. name = " wrapped_avframe " ,
. long_name = NULL_IF_CONFIG_SMALL ( " AVFrame to AVPacket passthrough " ) ,
. long_name = NULL_IF_CONFIG_SMALL ( " AVFrame to AVPacket passthrough " ) ,
@ -83,3 +110,12 @@ AVCodec ff_wrapped_avframe_encoder = {
. encode2 = wrapped_avframe_encode ,
. encode2 = wrapped_avframe_encode ,
. caps_internal = FF_CODEC_CAP_INIT_THREADSAFE ,
. caps_internal = FF_CODEC_CAP_INIT_THREADSAFE ,
} ;
} ;
AVCodec ff_wrapped_avframe_decoder = {
. name = " wrapped_avframe " ,
. long_name = NULL_IF_CONFIG_SMALL ( " AVPacket to AVFrame passthrough " ) ,
. type = AVMEDIA_TYPE_VIDEO ,
. id = AV_CODEC_ID_WRAPPED_AVFRAME ,
. decode = wrapped_avframe_decode ,
. caps_internal = FF_CODEC_CAP_INIT_THREADSAFE ,
} ;