summaryrefslogtreecommitdiffstats
path: root/ext/faac
diff options
context:
space:
mode:
Diffstat (limited to 'ext/faac')
-rw-r--r--ext/faac/gstfaac.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c
index fb62b336..487777a0 100644
--- a/ext/faac/gstfaac.c
+++ b/ext/faac/gstfaac.c
@@ -356,6 +356,7 @@ gst_faac_configure_source_pad (GstFaac * faac)
gboolean ret = FALSE;
gint n, ver, mpegversion;
faacEncConfiguration *conf;
+ guint maxbitrate;
mpegversion = FAAC_DEFAULT_MPEGVERSION;
@@ -392,6 +393,20 @@ gst_faac_configure_source_pad (GstFaac * faac)
conf->inputFormat = faac->format;
conf->outputFormat = faac->outputformat;
conf->shortctl = faac->shortctl;
+
+ /* check, warn and correct if the max bitrate for the given samplerate is
+ * exceeded. Maximum of 6144 bit for a channel */
+ maxbitrate =
+ (unsigned int) (6144.0 * (double) faac->samplerate / (double) 1024.0 +
+ .5);
+ if (conf->bitRate > maxbitrate) {
+ GST_ELEMENT_WARNING (faac, RESOURCE, SETTINGS, (NULL),
+ ("bitrate %u exceeds maximum allowed bitrate of %u for samplerate %d. "
+ "Setting bitrate to %u", conf->bitRate, maxbitrate,
+ faac->samplerate, maxbitrate));
+ conf->bitRate = maxbitrate;
+ }
+
if (!faacEncSetConfiguration (faac->handle, conf))
goto set_failed;