1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
From 5d9cb2ecf129d9640cbb281e1bf8a42422e5ecc7 Mon Sep 17 00:00:00 2001
From: Sanchayan Maity <sanchayan@asymptotic.io>
Date: Mon, 18 Jan 2021 16:42:10 +0530
Subject: [PATCH 3/7] fdkaac: Add support for LOAS
---
.../gst-plugins-bad/ext/fdkaac/gstfdkaacdec.c | 5 ++++-
.../gst-plugins-bad/ext/fdkaac/gstfdkaacenc.c | 17 +++++++++++------
2 files changed, 15 insertions(+), 7 deletions(-)
Index: gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacdec.c
===================================================================
--- gst-plugins-bad1.0-contrib.orig/ext/fdkaac/gstfdkaacdec.c
+++ gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacdec.c
@@ -49,7 +49,8 @@ static GstStaticPadTemplate sink_templat
CHANNELS_CAPS_STR "; "
"audio/mpeg, "
"mpegversion = (int) 4, "
- "stream-format = (string) { latm-mcp0, latm-mcp1 }, " CHANNELS_CAPS_STR)
+ "stream-format = (string) { latm-mcp0, latm-mcp1, loas }, "
+ CHANNELS_CAPS_STR)
);
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
@@ -130,6 +131,8 @@ gst_fdkaacdec_set_format (GstAudioDecode
transport_format = TT_MP4_ADIF;
} else if (strcmp (stream_format, "adts") == 0) {
transport_format = TT_MP4_ADTS;
+ } else if (strcmp (stream_format, "loas") == 0) {
+ transport_format = TT_MP4_LOAS;
} else if (strcmp (stream_format, "latm-mcp0") == 0) {
transport_format = TT_MP4_LATM_MCP0;
} else if (strcmp (stream_format, "latm-mcp1") == 0) {
Index: gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacenc.c
===================================================================
--- gst-plugins-bad1.0-contrib.orig/ext/fdkaac/gstfdkaacenc.c
+++ gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacenc.c
@@ -32,7 +32,6 @@
/* TODO:
* - Add support for other AOT / profiles
* - Signal encoder delay
- * - LOAS / LATM support
*/
enum
@@ -80,7 +79,7 @@ static GstStaticPadTemplate src_template
"mpegversion = (int) 4, "
"rate = (int) { " SAMPLE_RATES " }, "
"channels = (int) {1, 2, 3, 4, 5, 6, 8}, "
- "stream-format = (string) { adts, adif, raw }, latm-mcp0, latm-mcp1 }, "
+ "stream-format = (string) { adts, adif, raw, loas, latm-mcp0, latm-mcp1 }, "
"profile = (string) { lc, he-aac-v1, he-aac-v2, ld }, "
"framed = (boolean) true")
);
@@ -326,6 +325,9 @@ gst_fdkaacenc_set_format (GstAudioEncode
} else if (strcmp (str, "raw") == 0) {
GST_DEBUG_OBJECT (self, "use RAW format for output");
transmux = 0;
+ } else if (strcmp (str, "loas") == 0) {
+ GST_DEBUG_OBJECT (self, "use LOAS format for output");
+ transmux = 10;
} else if (strcmp (str, "latm-mcp1") == 0) {
/*
* Enable TT_MP4_LATM_MCP1. Sets muxConfigPresent = 1. See Section 4.1 of
@@ -588,7 +590,7 @@ gst_fdkaacenc_set_format (GstAudioEncode
} else if (transmux == 2) {
gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "adts",
NULL);
- } else if (transmux == 6 || transmux == 7) {
+ } else if (transmux == 6 || transmux == 7 || transmux == 10) {
GstBitWriter bw;
guint rate = GST_AUDIO_INFO_RATE (info);
guint8 channels = GST_AUDIO_INFO_CHANNELS (info);
@@ -620,20 +622,23 @@ gst_fdkaacenc_set_format (GstAudioEncode
if (transmux == 6)
gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING,
"latm-mcp1", NULL);
- else
+ else if (transmux == 7)
gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER, codec_data,
"stream-format", G_TYPE_STRING, "latm-mcp0", NULL);
+ else
+ gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING,
+ "loas", NULL);
gst_buffer_unref (codec_data);
} else {
g_assert_not_reached ();
}
- if (transmux != 6 && transmux != 7)
+ if (transmux != 6 && transmux != 7 && transmux != 10)
gst_codec_utils_aac_caps_set_level_and_profile (src_caps,
enc_info.confBuf, enc_info.confSize);
else
/*
- * For LATM, confBuf is StreamMuxConfig and not AudioSpecificConfig.
+ * For LATM/LOAS, confBuf is StreamMuxConfig and not AudioSpecificConfig.
* In this case, pass in the manually constructed AudioSpecificConfig
* buffer above.
*/
|