On Thu, Mar 24, 2016 at 12:54:07AM -0500, Rodger Combs wrote:
> - size variables were used in a confusing way
> - incorrect size var use led to channel layouts not being set properly
> - channel layouts were incorrectly mapped for >2-channel AAC
> - bitrates not accepted by the encoder were discarded instead of being clamped
> - some minor style/indentation fixes
> ---
>  libavcodec/audiotoolboxenc.c | 194 
> ++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 172 insertions(+), 22 deletions(-)
[...]
> @@ -220,16 +321,49 @@ static av_cold int ffat_init_encoder(AVCodecContext 
> *avctx)
>          }
>          q = 127 - q * 9;
>          AudioConverterSetProperty(at->converter, 
> kAudioCodecPropertySoundQualityForVBR,
> -                                  size, &q);
> +                                  sizeof(q), &q);
>      } else if (avctx->bit_rate > 0) {
>          UInt32 rate = avctx->bit_rate;
> +        UInt32 size;
> +        status = AudioConverterGetPropertyInfo(at->converter,
> +                                               
> kAudioConverterApplicableEncodeBitRates,
> +                                               &size, NULL);

> +        if (!status && size) {
> +            UInt32 new_rate = rate;
> +            int count;
> +            int i;
> +            AudioValueRange *ranges = malloc(size);
> +            if (!ranges)
> +                return AVERROR(ENOMEM);
> +            AudioConverterGetProperty(at->converter,
> +                                      
> kAudioConverterApplicableEncodeBitRates,
> +                                      &size, ranges);
> +            count = size / sizeof(AudioValueRange);
> +            for (i = 0; i < count; i++) {
> +                AudioValueRange *range = &ranges[i];
> +                if (rate >= range->mMinimum && rate <= range->mMaximum) {
> +                    new_rate = rate;
> +                    break;
> +                } else if (rate > range->mMaximum) {
> +                    new_rate = range->mMaximum;
> +                } else {
> +                    new_rate = range->mMinimum;
> +                    break;
> +                }
> +            }
> +            if (new_rate != rate) {
> +                av_log(avctx, AV_LOG_WARNING,
> +                       "Bitrate %u not allowed; changing to %u\n", rate, 
> new_rate);
> +                rate = new_rate;
> +            }
> +        }

is it intended to use malloc() instead of av_malloc() here ?
and not free it ? or maybe i miss where its freed ...

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Avoid a single point of failure, be that a person or equipment.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to