File: 0004-fdkaacenc-Add-support-for-setting-header-period.patch

package info (click to toggle)
gst-plugins-bad1.0-contrib 1.26.5-2
  • links: PTS, VCS
  • area: contrib
  • in suites: sid
  • size: 69,828 kB
  • sloc: ansic: 722,292; cpp: 278,104; objc: 3,556; xml: 3,351; sh: 1,035; python: 473; makefile: 91; java: 75
file content (98 lines) | stat: -rw-r--r-- 3,726 bytes parent folder | download
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
From b205b62653911ef766198a00a16bb3edb77760f8 Mon Sep 17 00:00:00 2001
From: Sanchayan Maity <sanchayan@asymptotic.io>
Date: Sat, 23 Jan 2021 18:12:39 +0530
Subject: [PATCH 4/7] fdkaacenc: Add support for setting header period

Header period is frame count period for sending in-band configuration buffers
within LATM/LOAS transport layer. Additionally this parameter configures the
Program Config Element (PCE) repetition period in raw data block.
---
 .../gst-plugins-bad/ext/fdkaac/gstfdkaacenc.c | 27 ++++++++++++++++++-
 .../gst-plugins-bad/ext/fdkaac/gstfdkaacenc.h |  2 ++
 2 files changed, 28 insertions(+), 1 deletion(-)

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
@@ -39,6 +39,7 @@ enum
   PROP_0,
   PROP_AFTERBURNER,
   PROP_BITRATE,
+  PROP_HEADER_PERIOD,
   PROP_PEAK_BITRATE,
   PROP_RATE_CONTROL,
   PROP_VBR_PRESET,
@@ -167,6 +168,9 @@ gst_fdkaacenc_set_property (GObject * ob
     case PROP_VBR_PRESET:
       self->vbr_preset = g_value_get_enum (value);
       break;
+    case PROP_HEADER_PERIOD:
+      self->header_period = g_value_get_uint (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -196,6 +200,9 @@ gst_fdkaacenc_get_property (GObject * ob
     case PROP_VBR_PRESET:
       g_value_set_enum (value, self->vbr_preset);
       break;
+    case PROP_HEADER_PERIOD:
+      g_value_set_uint (value, self->header_period);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -554,6 +561,14 @@ gst_fdkaacenc_set_format (GstAudioEncode
 
     GST_INFO_OBJECT (self, "Afterburner enabled");
   }
+
+  if ((err = aacEncoder_SetParam (self->enc, AACENC_HEADER_PERIOD,
+              self->header_period)) != AACENC_OK) {
+    GST_ERROR_OBJECT (self, "Unable to set header period %d: %d",
+        self->header_period, err);
+    return FALSE;
+  }
+
   if ((err = aacEncEncode (self->enc, NULL, NULL, NULL, NULL)) != AACENC_OK) {
     GST_ERROR_OBJECT (self, "Unable to initialize encoder: %d", err);
     return FALSE;
@@ -777,6 +792,11 @@ gst_fdkaacenc_flush (GstAudioEncoder * e
   aacEncClose (&self->enc);
   self->enc = NULL;
   self->is_drained = TRUE;
+  /*
+   * 0xFF: auto-mode. Default 10 for TT_MP4_ADTS, TT_MP4_LOAS and
+   * TT_MP4_LATM_MCP1 otherwise 0.
+   */
+  self->header_period = 255;
 
   if (GST_AUDIO_INFO_IS_VALID (info))
     gst_fdkaacenc_set_format (enc, info);
@@ -874,6 +894,12 @@ gst_fdkaacenc_class_init (GstFdkAacEncCl
           GST_FDK_AAC_VBR_PRESET, DEFAULT_VBR_PRESET,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (object_class, PROP_HEADER_PERIOD,
+      g_param_spec_uint ("header-period", "Frame count period",
+          "Frame count period for sending in-band configuration buffers",
+          0, 255, 255 /* auto-mode */ ,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_element_class_add_static_pad_template (element_class, &sink_template);
   gst_element_class_add_static_pad_template (element_class, &src_template);
 
Index: gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacenc.h
===================================================================
--- gst-plugins-bad1.0-contrib.orig/ext/fdkaac/gstfdkaacenc.h
+++ gst-plugins-bad1.0-contrib/ext/fdkaac/gstfdkaacenc.h
@@ -84,6 +84,8 @@ struct _GstFdkAacEnc {
   const GstAudioChannelPosition *aac_positions;
   gboolean is_drained;
 
+  guint header_period;
+
   guint peak_bitrate;
   gboolean afterburner;