summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-07-04 11:00:51 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-07-25 13:15:17 +0300
commit6b2fb826676583a506a726ba133c234c8e9227ba (patch)
treed89ea26702f6a7fd5a26b010fb6e2a11a3fec423
parentf1c8a0b31c28f815a6e48f4f5965eba96eee6b90 (diff)
downloadgstreamer-plugins-base-6b2fb826676583a506a726ba133c234c8e9227ba.tar.gz
audioencoder/decoder: Move encoded audio conversion function to a common place
No need to duplicate this non-trivial function.
-rw-r--r--gst-libs/gst/audio/gstaudiodecoder.c73
-rw-r--r--gst-libs/gst/audio/gstaudioencoder.c73
-rw-r--r--gst-libs/gst/audio/gstaudioutilsprivate.c70
-rw-r--r--gst-libs/gst/audio/gstaudioutilsprivate.h6
4 files changed, 78 insertions, 144 deletions
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
index 5cd265567..d672663e3 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.c
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -2526,77 +2526,6 @@ gst_audio_decoder_propose_allocation_default (GstAudioDecoder * dec,
return TRUE;
}
-/*
- * gst_audio_encoded_audio_convert:
- * @fmt: audio format of the encoded audio
- * @bytes: number of encoded bytes
- * @samples: number of encoded samples
- * @src_format: source format
- * @src_value: source value
- * @dest_format: destination format
- * @dest_value: destination format
- *
- * Helper function to convert @src_value in @src_format to @dest_value in
- * @dest_format for encoded audio data. Conversion is possible between
- * BYTE and TIME format by using estimated bitrate based on
- * @samples and @bytes (and @fmt).
- */
-/* FIXME: make gst_audio_encoded_audio_convert() public? */
-static gboolean
-gst_audio_encoded_audio_convert (GstAudioInfo * fmt,
- gint64 bytes, gint64 samples, GstFormat src_format,
- gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
-{
- gboolean res = FALSE;
-
- g_return_val_if_fail (dest_format != NULL, FALSE);
- g_return_val_if_fail (dest_value != NULL, FALSE);
-
- if (G_UNLIKELY (src_format == *dest_format || src_value == 0 ||
- src_value == -1)) {
- if (dest_value)
- *dest_value = src_value;
- return TRUE;
- }
-
- if (samples == 0 || bytes == 0 || fmt->rate == 0) {
- GST_DEBUG ("not enough metadata yet to convert");
- goto exit;
- }
-
- bytes *= fmt->rate;
-
- switch (src_format) {
- case GST_FORMAT_BYTES:
- switch (*dest_format) {
- case GST_FORMAT_TIME:
- *dest_value = gst_util_uint64_scale (src_value,
- GST_SECOND * samples, bytes);
- res = TRUE;
- break;
- default:
- res = FALSE;
- }
- break;
- case GST_FORMAT_TIME:
- switch (*dest_format) {
- case GST_FORMAT_BYTES:
- *dest_value = gst_util_uint64_scale (src_value, bytes,
- samples * GST_SECOND);
- res = TRUE;
- break;
- default:
- res = FALSE;
- }
- break;
- default:
- res = FALSE;
- }
-
-exit:
- return res;
-}
-
/**
* gst_audio_decoder_proxy_getcaps:
* @decoder: a #GstAudioDecoder
@@ -2659,7 +2588,7 @@ gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, GstQuery * query)
gint64 src_val, dest_val;
gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
- if (!(res = gst_audio_encoded_audio_convert (&dec->priv->ctx.info,
+ if (!(res = __gst_audio_encoded_audio_convert (&dec->priv->ctx.info,
dec->priv->bytes_in, dec->priv->samples_out,
src_fmt, src_val, &dest_fmt, &dest_val)))
goto error;
diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c
index bdabaabcd..b65644551 100644
--- a/gst-libs/gst/audio/gstaudioencoder.c
+++ b/gst-libs/gst/audio/gstaudioencoder.c
@@ -1848,77 +1848,6 @@ gst_audio_encoder_propose_allocation_default (GstAudioEncoder * enc,
return TRUE;
}
-/*
- * gst_audio_encoded_audio_convert:
- * @fmt: audio format of the encoded audio
- * @bytes: number of encoded bytes
- * @samples: number of encoded samples
- * @src_format: source format
- * @src_value: source value
- * @dest_format: destination format
- * @dest_value: destination format
- *
- * Helper function to convert @src_value in @src_format to @dest_value in
- * @dest_format for encoded audio data. Conversion is possible between
- * BYTE and TIME format by using estimated bitrate based on
- * @samples and @bytes (and @fmt).
- */
-/* FIXME: make gst_audio_encoded_audio_convert() public? */
-static gboolean
-gst_audio_encoded_audio_convert (GstAudioInfo * fmt,
- gint64 bytes, gint64 samples, GstFormat src_format,
- gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
-{
- gboolean res = FALSE;
-
- g_return_val_if_fail (dest_format != NULL, FALSE);
- g_return_val_if_fail (dest_value != NULL, FALSE);
-
- if (G_UNLIKELY (src_format == *dest_format || src_value == 0 ||
- src_value == -1)) {
- if (dest_value)
- *dest_value = src_value;
- return TRUE;
- }
-
- if (samples == 0 || bytes == 0 || fmt->rate == 0) {
- GST_DEBUG ("not enough metadata yet to convert");
- goto exit;
- }
-
- bytes *= fmt->rate;
-
- switch (src_format) {
- case GST_FORMAT_BYTES:
- switch (*dest_format) {
- case GST_FORMAT_TIME:
- *dest_value = gst_util_uint64_scale (src_value,
- GST_SECOND * samples, bytes);
- res = TRUE;
- break;
- default:
- res = FALSE;
- }
- break;
- case GST_FORMAT_TIME:
- switch (*dest_format) {
- case GST_FORMAT_BYTES:
- *dest_value = gst_util_uint64_scale (src_value, bytes,
- samples * GST_SECOND);
- res = TRUE;
- break;
- default:
- res = FALSE;
- }
- break;
- default:
- res = FALSE;
- }
-
-exit:
- return res;
-}
-
/* FIXME ? are any of these queries (other than latency) an encoder's business
* also, the conversion stuff might seem to make sense, but seems to not mind
* segment stuff etc at all
@@ -1988,7 +1917,7 @@ gst_audio_encoder_src_query_default (GstAudioEncoder * enc, GstQuery * query)
gint64 src_val, dest_val;
gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
- if (!(res = gst_audio_encoded_audio_convert (&enc->priv->ctx.info,
+ if (!(res = __gst_audio_encoded_audio_convert (&enc->priv->ctx.info,
enc->priv->bytes_out, enc->priv->samples_in, src_fmt, src_val,
&dest_fmt, &dest_val)))
break;
diff --git a/gst-libs/gst/audio/gstaudioutilsprivate.c b/gst-libs/gst/audio/gstaudioutilsprivate.c
index 870bcd6b3..27b056bcb 100644
--- a/gst-libs/gst/audio/gstaudioutilsprivate.c
+++ b/gst-libs/gst/audio/gstaudioutilsprivate.c
@@ -142,3 +142,73 @@ done:
return fcaps;
}
+
+/**
+ * __gst_audio_encoded_audio_convert:
+ * @fmt: audio format of the encoded audio
+ * @bytes: number of encoded bytes
+ * @samples: number of encoded samples
+ * @src_format: source format
+ * @src_value: source value
+ * @dest_format: destination format
+ * @dest_value: destination format
+ *
+ * Helper function to convert @src_value in @src_format to @dest_value in
+ * @dest_format for encoded audio data. Conversion is possible between
+ * BYTE and TIME format by using estimated bitrate based on
+ * @samples and @bytes (and @fmt).
+ */
+gboolean
+__gst_audio_encoded_audio_convert (GstAudioInfo * fmt,
+ gint64 bytes, gint64 samples, GstFormat src_format,
+ gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
+{
+ gboolean res = FALSE;
+
+ g_return_val_if_fail (dest_format != NULL, FALSE);
+ g_return_val_if_fail (dest_value != NULL, FALSE);
+
+ if (G_UNLIKELY (src_format == *dest_format || src_value == 0 ||
+ src_value == -1)) {
+ if (dest_value)
+ *dest_value = src_value;
+ return TRUE;
+ }
+
+ if (samples == 0 || bytes == 0 || fmt->rate == 0) {
+ GST_DEBUG ("not enough metadata yet to convert");
+ goto exit;
+ }
+
+ bytes *= fmt->rate;
+
+ switch (src_format) {
+ case GST_FORMAT_BYTES:
+ switch (*dest_format) {
+ case GST_FORMAT_TIME:
+ *dest_value = gst_util_uint64_scale (src_value,
+ GST_SECOND * samples, bytes);
+ res = TRUE;
+ break;
+ default:
+ res = FALSE;
+ }
+ break;
+ case GST_FORMAT_TIME:
+ switch (*dest_format) {
+ case GST_FORMAT_BYTES:
+ *dest_value = gst_util_uint64_scale (src_value, bytes,
+ samples * GST_SECOND);
+ res = TRUE;
+ break;
+ default:
+ res = FALSE;
+ }
+ break;
+ default:
+ res = FALSE;
+ }
+
+exit:
+ return res;
+}
diff --git a/gst-libs/gst/audio/gstaudioutilsprivate.h b/gst-libs/gst/audio/gstaudioutilsprivate.h
index a7cf96b02..976765fa0 100644
--- a/gst-libs/gst/audio/gstaudioutilsprivate.h
+++ b/gst-libs/gst/audio/gstaudioutilsprivate.h
@@ -36,6 +36,12 @@ GstCaps *__gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkp
GstPad * srcpad, GstCaps * initial_caps,
GstCaps * filter);
+G_GNUC_INTERNAL
+gboolean __gst_audio_encoded_audio_convert (GstAudioInfo * fmt, gint64 bytes,
+ gint64 samples, GstFormat src_format,
+ gint64 src_value, GstFormat * dest_format,
+ gint64 * dest_value);
+
G_END_DECLS
#endif