codecparsers: h264: add helpers to convert quantization matrices
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>
Wed, 2 Oct 2013 08:24:58 +0000 (11:24 +0300)
committerSebastian Dröge <slomo@circular-chaos.org>
Wed, 2 Oct 2013 08:57:54 +0000 (10:57 +0200)
Add utility functions to convert quantization matrices from zig-zag scan
order into raster scan order and vice-versa

https://bugzilla.gnome.org/show_bug.cgi?id=708629

docs/libs/gst-plugins-bad-libs-sections.txt
gst-libs/gst/codecparsers/gsth264parser.c
gst-libs/gst/codecparsers/gsth264parser.h

index 0d3ee9d1b24fdb5b6dd32f0274862b39257dc226..0a806938339c9cbdf45786375a0bcdccd99d5d89 100644 (file)
@@ -40,6 +40,10 @@ gst_h264_nal_parser_new
 gst_h264_nal_parser_free
 gst_h264_parse_sps
 gst_h264_parse_pps
+gst_h264_video_quant_matrix_8x8_get_zigzag_from_raster
+gst_h264_video_quant_matrix_8x8_get_raster_from_zigzag
+gst_h264_video_quant_matrix_4x4_get_zigzag_from_raster
+gst_h264_video_quant_matrix_4x4_get_raster_from_zigzag
 <SUBSECTION Standard>
 <SUBSECTION Private>
 </SECTION>
index 46785d85d2d9f3fee28e00c2314654f03ceadedf..0020f4015bed0134a31301744d8cc853a9a58f66 100644 (file)
@@ -2018,3 +2018,103 @@ error:
   GST_WARNING ("error parsing \"Sei message\"");
   return GST_H264_PARSER_ERROR;
 }
+
+/**
+ * gst_h264_video_quant_matrix_8x8_get_zigzag_from_raster:
+ * @out_quant: (out): The resulting quantization matrix
+ * @quant: The source quantization matrix
+ *
+ * Converts quantization matrix @quant from raster scan order to
+ * zigzag scan order and store the resulting factors into @out_quant.
+ *
+ * Note: it is an error to pass the same table in both @quant and
+ * @out_quant arguments.
+ *
+ * Since: 1.4
+ */
+void
+gst_h264_video_quant_matrix_8x8_get_zigzag_from_raster (guint8 out_quant[64],
+    const guint8 quant[64])
+{
+  guint i;
+
+  g_return_if_fail (out_quant != quant);
+
+  for (i = 0; i < 64; i++)
+    out_quant[i] = quant[zigzag_8x8[i]];
+}
+
+/**
+ * gst_h264_quant_matrix_8x8_get_raster_from_zigzag:
+ * @out_quant: (out): The resulting quantization matrix
+ * @quant: The source quantization matrix
+ *
+ * Converts quantization matrix @quant from zigzag scan order to
+ * raster scan order and store the resulting factors into @out_quant.
+ *
+ * Note: it is an error to pass the same table in both @quant and
+ * @out_quant arguments.
+ *
+ * Since: 1.4
+ */
+void
+gst_h264_video_quant_matrix_8x8_get_raster_from_zigzag (guint8 out_quant[64],
+    const guint8 quant[64])
+{
+  guint i;
+
+  g_return_if_fail (out_quant != quant);
+
+  for (i = 0; i < 64; i++)
+    out_quant[zigzag_8x8[i]] = quant[i];
+}
+
+/**
+ * gst_h264_video_quant_matrix_4x4_get_zigzag_from_raster:
+ * @out_quant: (out): The resulting quantization matrix
+ * @quant: The source quantization matrix
+ *
+ * Converts quantization matrix @quant from raster scan order to
+ * zigzag scan order and store the resulting factors into @out_quant.
+ *
+ * Note: it is an error to pass the same table in both @quant and
+ * @out_quant arguments.
+ *
+ * Since: 1.4
+ */
+void
+gst_h264_video_quant_matrix_4x4_get_zigzag_from_raster (guint8 out_quant[16],
+    const guint8 quant[16])
+{
+  guint i;
+
+  g_return_if_fail (out_quant != quant);
+
+  for (i = 0; i < 16; i++)
+    out_quant[i] = quant[zigzag_4x4[i]];
+}
+
+/**
+ * gst_h264_quant_matrix_4x4_get_raster_from_zigzag:
+ * @out_quant: (out): The resulting quantization matrix
+ * @quant: The source quantization matrix
+ *
+ * Converts quantization matrix @quant from zigzag scan order to
+ * raster scan order and store the resulting factors into @out_quant.
+ *
+ * Note: it is an error to pass the same table in both @quant and
+ * @out_quant arguments.
+ *
+ * Since: 1.4
+ */
+void
+gst_h264_video_quant_matrix_4x4_get_raster_from_zigzag (guint8 out_quant[16],
+    const guint8 quant[16])
+{
+  guint i;
+
+  g_return_if_fail (out_quant != quant);
+
+  for (i = 0; i < 16; i++)
+    out_quant[zigzag_4x4[i]] = quant[i];
+}
index 72b311997b873bb9e91968da75f6d2755c204d3e..798f3394706061e8ef750452783c07ac5671a7ae 100644 (file)
@@ -759,5 +759,17 @@ GstH264ParserResult gst_h264_parse_sps                (GstH264NalUnit *nalu,
 GstH264ParserResult gst_h264_parse_pps                (GstH264NalParser *nalparser,
                                                        GstH264NalUnit *nalu, GstH264PPS *pps);
 
+void   gst_h264_video_quant_matrix_8x8_get_zigzag_from_raster (guint8 out_quant[64],
+                                                               const guint8 quant[64]);
+
+void   gst_h264_video_quant_matrix_8x8_get_raster_from_zigzag (guint8 out_quant[64],
+                                                               const guint8 quant[64]);
+
+void   gst_h264_video_quant_matrix_4x4_get_zigzag_from_raster (guint8 out_quant[16],
+                                                               const guint8 quant[16]);
+
+void   gst_h264_video_quant_matrix_4x4_get_raster_from_zigzag (guint8 out_quant[16],
+                                                               const guint8 quant[16]);
+
 G_END_DECLS
 #endif