Merge branch 'upstream/1.16' into tizen_gst_1.16.2
[platform/upstream/gst-plugins-good.git] / gst / audioparsers / gstaacparse.c
index 755b8a9..1e6338d 100644 (file)
@@ -68,6 +68,7 @@ GST_DEBUG_CATEGORY_STATIC (aacparse_debug);
 #define ADIF_MAX_SIZE 40        /* Should be enough */
 #define ADTS_MAX_SIZE 10        /* Should be enough */
 #define LOAS_MAX_SIZE 3         /* Should be enough */
+#define RAW_MAX_SIZE  1         /* Correct framing is required */
 
 #define ADTS_HEADERS_LENGTH 7UL /* Total byte-length of fixed and variable
                                    headers prepended during raw to ADTS
@@ -115,8 +116,6 @@ static gboolean gst_aac_parse_read_audio_specific_config (GstAacParse *
 
 #ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
 static guint gst_aac_parse_adts_get_fast_frame_len (const guint8 * data);
-static gboolean gst_aac_parse_src_eventfunc (GstBaseParse * parse,
-    GstEvent * event);
 /* make full aac(adts) index table when seek */
 static gboolean gst_aac_parse_adts_src_eventfunc (GstBaseParse * parse,
     GstEvent * event);
@@ -171,11 +170,6 @@ gst_aac_parse_class_init (GstAacParseClass * klass)
   parse_class->pre_push_frame =
       GST_DEBUG_FUNCPTR (gst_aac_parse_pre_push_frame);
   parse_class->src_event = GST_DEBUG_FUNCPTR (gst_aac_parse_src_event);
-
-//#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION // FIXME
-  /* make full aac(adts) index table when seek */
-//  parse_class->src_event = GST_DEBUG_FUNCPTR (gst_aac_parse_src_eventfunc);
-//#endif
 }
 
 
@@ -290,6 +284,7 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps)
         gst_buffer_fill (codec_data_buffer, 0, codec_data, 2);
         gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER,
             codec_data_buffer, NULL);
+        gst_buffer_unref (codec_data_buffer);
       }
     } else if (aacparse->header_type == DSPAAC_HEADER_NONE) {
       GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad,
@@ -377,6 +372,9 @@ gst_aac_parse_sink_setcaps (GstBaseParse * parse, GstCaps * caps)
       gst_aac_parse_set_src_caps (aacparse, caps);
       if (aacparse->header_type == aacparse->output_header_type)
         gst_base_parse_set_passthrough (parse, TRUE);
+
+      /* input is already correctly framed */
+      gst_base_parse_set_min_frame_size (parse, RAW_MAX_SIZE);
     } else {
       return FALSE;
     }
@@ -1275,7 +1273,7 @@ gst_aac_parse_prepend_adts_headers (GstAacParse * aacparse,
   adts_headers[0] = 0xFFU;
   adts_headers[1] = 0xF0U | (id << 3) | 0x1U;
   adts_headers[2] = (profile << 6) | (sampling_frequency_index << 2) | 0x2U |
-      (channel_configuration & 0x4U);
+      ((channel_configuration & 0x4U) >> 2);
   adts_headers[3] = ((channel_configuration & 0x3U) << 6) | 0x30U |
       (guint8) (frame_size >> 11);
   adts_headers[4] = (guint8) ((frame_size >> 3) & 0x00FF);
@@ -1730,8 +1728,14 @@ gst_aac_parse_src_event (GstBaseParse * parse, GstEvent * event)
     aacparse->last_parsed_channels = 0;
     aacparse->last_parsed_sample_rate = 0;
   }
-
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  GST_DEBUG ("Entering gst_aac_parse_src_event header type = %d",
+      aacparse->header_type);
+  if (aacparse->header_type == DSPAAC_HEADER_ADTS)
+    return gst_aac_parse_adts_src_eventfunc (parse, event);
+#endif
   return GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
+
 }
 
 #ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
@@ -2088,26 +2092,6 @@ gst_aac_parse_adts_get_fast_frame_len (const guint8 * data)
   return length;
 }
 
-static gboolean
-gst_aac_parse_src_eventfunc (GstBaseParse * parse, GstEvent * event)
-{
-  gboolean handled = FALSE;
-  GstAacParse *aacparse;
-  aacparse = GST_AAC_PARSE (parse);
-
-  GST_DEBUG ("Entering gst_aac_parse_src_eventfunc header type = %d",
-      aacparse->header_type);
-  if (aacparse->header_type == DSPAAC_HEADER_ADTS)
-    return gst_aac_parse_adts_src_eventfunc (parse, event);
-  else
-    goto aac_seek_null_exit;
-aac_seek_null_exit:
-
-  /* call baseparse src_event function to handle event */
-  handled = GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
-  return handled;
-}
-
 /**
  * gst_aac_parse_adts_src_eventfunc:
  * @parse: #GstBaseParse. #event
@@ -2330,4 +2314,4 @@ aac_seek_null_exit:
   handled = GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
   return handled;
 }
-#endif //end of #ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+#endif /* TIZEN_FEATURE_AACPARSE_MODIFICATION */