On 07/03/16 00:03, Mark Thompson wrote:
> ---
>  libavutil/hwcontext.c          | 44 +++++++++++++++++++++++++++++++
>  libavutil/hwcontext.h          | 60 
> ++++++++++++++++++++++++++++++++++++++++++
>  libavutil/hwcontext_internal.h | 10 +++++++
>  3 files changed, 114 insertions(+)
> 
> diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c
> index b6d0518..e373504 100644
> --- a/libavutil/hwcontext.c
> +++ b/libavutil/hwcontext.c
> @@ -400,3 +400,47 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, 
> AVFrame *frame, int flags)
> 
>      return 0;
>  }
> +
> +void *av_hwdevice_hwconfig_alloc(AVBufferRef *ref)
> +{
> +    AVHWDeviceContext *ctx = (AVHWDeviceContext*)ref->data;
> +    const HWContextType  *hw_type = ctx->internal->hw_type;
> +
> +    if (hw_type->device_hwconfig_size == 0)
> +        return NULL;
> +
> +    return av_mallocz(hw_type->device_hwconfig_size);
> +}

Not sure using the AVBufferRef is really needed here.


> +AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref,
> +                                                           const void 
> *hwconfig)
> +{
> +    AVHWDeviceContext *ctx = (AVHWDeviceContext*)ref->data;
> +    const HWContextType  *hw_type = ctx->internal->hw_type;
> +    AVHWFramesConstraints *constraints;
> +
> +    if (!hw_type->frames_get_constraints)
> +        return NULL;
> +
> +    constraints = av_mallocz(sizeof(*constraints));
> +    if (!constraints)
> +        return NULL;
> +
> +    constraints->min_width = constraints->min_height = 0;
> +    constraints->max_width = constraints->max_height = INT_MAX;
> +
> +    if (hw_type->frames_get_constraints(ctx, hwconfig, constraints) >= 0) {
> +        return constraints;
> +    } else {
> +        av_hwframe_constraints_free(&constraints);
> +        return NULL;
> +    }
> +}

Same.


> +void av_hwframe_constraints_free(AVHWFramesConstraints **constraints)
> +{
> +    if (*constraints) {
> +        av_freep(&(*constraints)->valid_sw_formats);
> +    }
> +    av_freep(constraints);
> +}
> diff --git a/libavutil/hwcontext.h b/libavutil/hwcontext.h
> index 81ae817..2505330 100644
> --- a/libavutil/hwcontext.h
> +++ b/libavutil/hwcontext.h
> @@ -326,4 +326,64 @@ int av_hwframe_transfer_get_formats(AVBufferRef 
> *hwframe_ctx,
>                                      enum AVPixelFormat **formats, int flags);
> 
> 
> +/**
> + * This struct describes the constraints on hardware frames attached to
> + * a given device with a hardware-specific configuration.  This is returned
> + * by av_hwdevice_get_hwframe_constraints() and must be freed by
> + * av_hwframe_constraints_free() after use.
> + */
> +typedef struct AVHWFramesConstraints {
> +    /**
> +     * A list of possible values for sw_format in the hw_frames_ctx,
> +     * terminated by AV_PIX_FMT_NONE.  Can be NULL if this information is
> +     * not known.
> +     */
> +    enum AVPixelFormat *valid_sw_formats;
> +
> +    /**
> +     * The minimum size of frames in this hw_frames_ctx.
> +     * (Zero if not known.)
> +     */
> +    int min_width;
> +    int min_height;
> +
> +    /**
> +     * The maximum size of frames in this hw_frames_ctx.
> +     * (INT_MAX if not known / no limit.)
> +     */
> +    int max_width;
> +    int max_height;
> +} AVHWFramesConstraints;

Usually we use -1 for not known/unset.

The rest looks fine.

lu
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to