vaapi_encode: Allocate picture-private data in generic code
This commit is contained in:
		
							parent
							
								
									8ca55a2b9e
								
							
						
					
					
						commit
						26ce3a43a3
					
				@ -570,14 +570,23 @@ static int vaapi_encode_discard(AVCodecContext *avctx,
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static VAAPIEncodePicture *vaapi_encode_alloc(void)
 | 
			
		||||
static VAAPIEncodePicture *vaapi_encode_alloc(AVCodecContext *avctx)
 | 
			
		||||
{
 | 
			
		||||
    VAAPIEncodeContext *ctx = avctx->priv_data;
 | 
			
		||||
    VAAPIEncodePicture *pic;
 | 
			
		||||
 | 
			
		||||
    pic = av_mallocz(sizeof(*pic));
 | 
			
		||||
    if (!pic)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    if (ctx->codec->picture_priv_data_size > 0) {
 | 
			
		||||
        pic->priv_data = av_mallocz(ctx->codec->picture_priv_data_size);
 | 
			
		||||
        if (!pic->priv_data) {
 | 
			
		||||
            av_freep(&pic);
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pic->input_surface = VA_INVALID_ID;
 | 
			
		||||
    pic->recon_surface = VA_INVALID_ID;
 | 
			
		||||
    pic->output_buffer = VA_INVALID_ID;
 | 
			
		||||
@ -710,7 +719,7 @@ static int vaapi_encode_get_next(AVCodecContext *avctx,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pic = vaapi_encode_alloc();
 | 
			
		||||
    pic = vaapi_encode_alloc(avctx);
 | 
			
		||||
    if (!pic)
 | 
			
		||||
        return AVERROR(ENOMEM);
 | 
			
		||||
 | 
			
		||||
@ -739,7 +748,7 @@ static int vaapi_encode_get_next(AVCodecContext *avctx,
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < ctx->b_per_p &&
 | 
			
		||||
             ctx->gop_counter < ctx->gop_size; i++) {
 | 
			
		||||
            pic = vaapi_encode_alloc();
 | 
			
		||||
            pic = vaapi_encode_alloc(avctx);
 | 
			
		||||
            if (!pic)
 | 
			
		||||
                goto fail;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -268,6 +268,10 @@ typedef struct VAAPIEncodeType {
 | 
			
		||||
    // add any necessary global parameters).
 | 
			
		||||
    int (*configure)(AVCodecContext *avctx);
 | 
			
		||||
 | 
			
		||||
    // The size of any private data structure associated with each
 | 
			
		||||
    // picture (can be zero if not required).
 | 
			
		||||
    size_t picture_priv_data_size;
 | 
			
		||||
 | 
			
		||||
    // The size of the parameter structures:
 | 
			
		||||
    // sizeof(VAEnc{type}ParameterBuffer{codec}).
 | 
			
		||||
    size_t sequence_params_size;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user