private static unsafe HeifIntegerEncoderParameter CreateIntegerParameter(SafeHeifEncoder encoder,
                                                                                 heif_encoder_parameter nativeParameter,
                                                                                 string name,
                                                                                 bool hasDefaultValue)
        {
            int defaultValue = 0;

            if (hasDefaultValue)
            {
                // The error value is ignored because some encoders return an error
                // when getting the value of a valid command.
                _ = LibHeifNative.heif_encoder_get_parameter_integer(encoder, name, out defaultValue);
            }

            int minimum = 0;
            int maximum = 0;

            var error = LibHeifNative.heif_encoder_parameter_get_valid_integer_range(nativeParameter,
                                                                                     out bool haveMinimumMaximum,
                                                                                     ref minimum,
                                                                                     ref maximum);

            error.ThrowIfError();

            return(new HeifIntegerEncoderParameter(name, hasDefaultValue, defaultValue, haveMinimumMaximum, minimum, maximum));
        }
        private static unsafe HeifIntegerEncoderParameter CreateIntegerParameter(SafeHeifEncoder encoder,
                                                                                 heif_encoder_parameter nativeParameter,
                                                                                 string name,
                                                                                 bool hasDefaultValue)
        {
            int defaultValue = 0;

            if (hasDefaultValue)
            {
                // The error value is ignored because some encoders return an error
                // when getting the value of a valid command.
                _ = LibHeifNative.heif_encoder_get_parameter_integer(encoder, name, out defaultValue);
            }

            bool haveMinimumMaximum;
            int  minimum     = 0;
            int  maximum     = 0;
            var  validValues = new List <int>();

            if (LibHeifVersion.Is1Point10OrLater)
            {
                var error = LibHeifNative.heif_encoder_parameter_get_valid_integer_values(nativeParameter,
                                                                                          out bool haveMinimum,
                                                                                          out bool haveMaximum,
                                                                                          ref minimum,
                                                                                          ref maximum,
                                                                                          out int numValidValues,
                                                                                          out var validValuesArray);
                error.ThrowIfError();

                haveMinimumMaximum = haveMinimum && haveMaximum;

                if (numValidValues > 0 && validValuesArray != IntPtr.Zero)
                {
                    validValues.Capacity = numValidValues;

                    int *integerArray = (int *)validValuesArray;

                    for (int i = 0; i < numValidValues; i++)
                    {
                        validValues.Add(integerArray[i]);
                    }
                }
            }
            else
            {
                var error = LibHeifNative.heif_encoder_parameter_get_valid_integer_range(nativeParameter,
                                                                                         out haveMinimumMaximum,
                                                                                         ref minimum,
                                                                                         ref maximum);
                error.ThrowIfError();
            }

            return(new HeifIntegerEncoderParameter(name,
                                                   hasDefaultValue,
                                                   defaultValue,
                                                   haveMinimumMaximum,
                                                   minimum,
                                                   maximum,
                                                   validValues.AsReadOnly()));
        }