On 07/03/16 07:49, Luca Barbato wrote:
> 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.
> 

No preference; if anyone has a opinion I can change it.  (All the other
functions use the AVBufferRef as the handle, so it seemed easier to just be
consistent even though we don't actually need it in this case.)

>> +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.

min = 0, max = INT_MAX allows you to test against it anyway in the unknown case
without having to check.

> 
> The rest looks fine.
> 
> lu

Thanks,

- Mark

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

Reply via email to