| /* |
| * GStreamer |
| * |
| * unit test for (audio) parser |
| * |
| * Copyright (C) 2008 Nokia Corporation. All rights reserved. |
| * |
| * Contact: Stefan Kost <stefan.kost@nokia.com> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include <gst/check/gstcheck.h> |
| |
| #define MAX_HEADERS 10 |
| |
| typedef struct |
| { |
| guint discard; |
| guint buffers_before_offset_skip; |
| guint offset_skip_amount; |
| const guint8 *data_to_verify; |
| guint data_to_verify_size; |
| GstCaps *caps; |
| gboolean no_metadata; |
| |
| GstClockTime ts_counter; |
| gint64 offset_counter; |
| guint buffer_counter; |
| } buffer_verify_data_s; |
| |
| typedef struct { |
| guint8 *data; |
| guint size; |
| } datablob; |
| |
| typedef gboolean (*VerifyBuffer) (buffer_verify_data_s * vdata, GstBuffer * buf); |
| typedef GstElement* (*ElementSetup) (const gchar * desc); |
| |
| /* context state variables; to be set by test using this helper */ |
| /* mandatory */ |
| extern const gchar *ctx_factory; |
| extern GstStaticPadTemplate *ctx_sink_template; |
| extern GstStaticPadTemplate *ctx_src_template; |
| /* optional */ |
| extern GstCaps *ctx_input_caps; |
| extern GstCaps *ctx_output_caps; |
| extern guint ctx_discard; |
| extern datablob ctx_headers[MAX_HEADERS]; |
| extern gboolean ctx_no_metadata; |
| |
| extern VerifyBuffer ctx_verify_buffer; |
| extern ElementSetup ctx_setup; |
| |
| /* no refs taken/kept, all up to caller */ |
| typedef struct |
| { |
| const gchar *factory; |
| ElementSetup factory_setup; |
| GstStaticPadTemplate *sink_template; |
| GstStaticPadTemplate *src_template; |
| /* caps that go into element */ |
| GstCaps *src_caps; |
| /* optional: output caps to verify */ |
| GstCaps *sink_caps; |
| /* initial headers */ |
| datablob headers[MAX_HEADERS]; |
| /* initial (header) output to forego checking */ |
| guint discard; |
| /* series of buffers; middle series considered garbage */ |
| struct { |
| /* data and size */ |
| guint8 *data; |
| guint size; |
| /* num of frames with above data per buffer */ |
| guint fpb; |
| /* num of buffers */ |
| guint num; |
| } series[3]; |
| /* sigh, weird cases */ |
| gboolean framed; |
| guint dropped; |
| gboolean no_metadata; |
| } GstParserTest; |
| |
| void gst_parser_test_init (GstParserTest * ptest, guint8 * data, guint size, guint num); |
| |
| void gst_parser_test_run (GstParserTest * test, GstCaps ** out_caps); |
| |
| void gst_parser_test_normal (guint8 *data, guint size); |
| |
| void gst_parser_test_drain_single (guint8 *data, guint size); |
| |
| void gst_parser_test_drain_garbage (guint8 *data, guint size, guint8 *garbage, guint gsize); |
| |
| void gst_parser_test_split (guint8 *data, guint size); |
| |
| void gst_parser_test_skip_garbage (guint8 *data, guint size, guint8 *garbage, guint gsize); |
| |
| void gst_parser_test_output_caps (guint8 *data, guint size, const gchar * input_caps, |
| const gchar * output_caps); |
| |
| GstCaps *gst_parser_test_get_output_caps (guint8 *data, guint size, const gchar * input_caps); |
| |