private static unsafe HeifStringEncoderParameter CreateStringParameter(SafeHeifEncoder encoder,
                                                                               heif_encoder_parameter nativeParameter,
                                                                               string name,
                                                                               bool hasDefaultValue)
        {
            string defaultValue = string.Empty;

            if (hasDefaultValue)
            {
                byte[] bytes = new byte[256];

                fixed(byte *ptr = bytes)
                {
                    // The error value is ignored because some encoders return an error
                    // when getting the value of a valid command.
                    _ = LibHeifNative.heif_encoder_get_parameter_string(encoder, name, ptr, bytes.Length);
                }

                int count = bytes.Length;

                // Look for the NUL terminator at the end of the string.
                for (int i = 0; i < bytes.Length; i++)
                {
                    if (bytes[i] == 0)
                    {
                        count = i;
                        break;
                    }
                }

                defaultValue = System.Text.Encoding.ASCII.GetString(bytes, 0, count);
            }

            var error = LibHeifNative.heif_encoder_parameter_get_valid_string_values(nativeParameter, out var stringArray);

            error.ThrowIfError();

            var validItems = stringArray.ToReadOnlyCollection();

            return(new HeifStringEncoderParameter(name, hasDefaultValue, defaultValue, validItems));
        }