On Thu, 21 Nov 2024 00:42:23 +0100 Michael Niedermayer <mich...@niedermayer.cc> 
wrote:
> Hi Niklas
>
> On Sat, Nov 16, 2024 at 12:24:59PM +0100, Niklas Haas wrote:
> > From: Niklas Haas <g...@haasn.dev>
> >
> > Following in the footsteps of the work in the previous commit, it's now
> > relatively straightforward to expose the options struct publicly as
> > SwsContext. This is a step towards making this more user friendly, as
> > well as following API conventions established elsewhere.
> >
> > Sponsored-by: Sovereign Tech Fund
> > Signed-off-by: Niklas Haas <g...@haasn.dev>
> > ---
> >  libswscale/swscale.h          |  93 +++++++++++++++++++++++--
> >  libswscale/swscale_internal.h |  45 +------------
> >  libswscale/utils.c            | 123 +++++++++++++++-------------------
> >  3 files changed, 144 insertions(+), 117 deletions(-)
> >
> > diff --git a/libswscale/swscale.h b/libswscale/swscale.h
> > index 50c705ae06..4baef532b6 100644
> > --- a/libswscale/swscale.h
> > +++ b/libswscale/swscale.h
> > @@ -42,8 +42,6 @@
> >  #include "version.h"
> >  #endif
> >
> > -typedef struct SwsContext SwsContext;
> > -
> >  /**
> >   * @defgroup libsws libswscale
> >   * Color conversion and scaling library.
> > @@ -65,17 +63,98 @@ const char *swscale_configuration(void);
> >  const char *swscale_license(void);
> >
> >  /**
> > - * Get the AVClass for swsContext. It can be used in combination with
> > + * Get the AVClass for SwsContext. It can be used in combination with
> >   * AV_OPT_SEARCH_FAKE_OBJ for examining options.
> >   *
> >   * @see av_opt_find().
> >   */
> >  const AVClass *sws_get_class(void);
> >
> > -/**
> > - * Allocate an empty SwsContext. This must be filled and passed to
> > - * sws_init_context(). For filling see AVOptions, options.c and
> > - * sws_setColorspaceDetails().
> > +/******************************
> > + * Flags and quality settings *
> > + ******************************/
> > +
> > +typedef enum SwsDither {
> > +    SWS_DITHER_NONE = 0, /* disable dithering */
> > +    SWS_DITHER_AUTO,     /* auto-select from preset */
> > +    SWS_DITHER_BAYER,    /* ordered dither matrix */
> > +    SWS_DITHER_ED,       /* error diffusion */
> > +    SWS_DITHER_A_DITHER, /* arithmetic addition */
> > +    SWS_DITHER_X_DITHER, /* arithmetic xor */
> > +    SWS_DITHER_NB,       /* not part of the ABI */
> > +} SwsDither;
> > +
> > +typedef enum SwsAlphaBlend {
> > +    SWS_ALPHA_BLEND_NONE = 0,
> > +    SWS_ALPHA_BLEND_UNIFORM,
> > +    SWS_ALPHA_BLEND_CHECKERBOARD,
> > +    SWS_ALPHA_BLEND_NB,  /* not part of the ABI */
> > +} SwsAlphaBlend;
> > +
> > +/***********************************
> > + * Context creation and management *
> > + ***********************************/
> > +
> > +/**
> > + * Main external API structure. New fields can be added to the end with
> > + * minor version bumps. Removal, reordering and changes to existing fields
> > + * require a major version bump. sizeof(SwsContext) is not part of the ABI.
> > + */
> > +typedef struct SwsContext {
> > +    const AVClass *av_class;
> > +
> > +    /**
> > +     * Private data of the user, can be used to carry app specific stuff.
> > +     */
> > +    void *opaque;
> > +
>
> > +    /**
> > +     * Bitmask of SWS_*.
> > +     */
> > +    unsigned flags;
>
> uint64_t seems more future proof
>
>
> > +
> > +    /**
> > +     * Extra parameters for fine-tuning certain scalers.
> > +     */
> > +    double scaler_params[2];
> > +
> > +    /**
> > +     * How many threads to use for processing, or 0 for automatic 
> > selection.
> > +     */
> > +    int threads;
> > +
>
> > +    /**
> > +     * Dither mode.
> > +     */
> > +    SwsDither dither;
> > +
> > +    /**
> > +     * Alpha blending mode. See `SwsAlphaBlend` for details.
> > +     */
> > +    SwsAlphaBlend alpha_blend;
>
> Is this intended to be used with AVOptions ?
> enums as type can be problematic IIRC

AVCodecContext does the same thing with all of its enums, see AVColorSpace for
example. (used as AV_OPT_TYPE_INT in libavcodec/options_table.h)

>
> patch should be ok otherwise
>
> thx
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Dictatorship: All citizens are under surveillance, all their steps and
> actions recorded, for the politicians to enforce control.
> Democracy: All politicians are under surveillance, all their steps and
> actions recorded, for the citizens to enforce control.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to