diff options
author | Sreerenj Balachandran <sreerenj.balachandran@intel.com> | 2013-10-09 10:54:14 +0300 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2013-11-06 23:14:22 +0000 |
commit | d844832ec35847db9c8ad5b9b541e6a3e12616db (patch) | |
tree | 9b62d04b157e11e0efb416475b4a6bd951a64f80 /gst/videoparsers/gsth265parse.h | |
parent | 33451e07912f5cc66c82b7278fa3ccd27e435e65 (diff) | |
download | gstreamer-plugins-bad-d844832ec35847db9c8ad5b9b541e6a3e12616db.tar.gz |
videoparsers: add H.265 HEVC video parser element
https://bugzilla.gnome.org/show_bug.cgi?id=708438
Diffstat (limited to 'gst/videoparsers/gsth265parse.h')
-rw-r--r-- | gst/videoparsers/gsth265parse.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gst/videoparsers/gsth265parse.h b/gst/videoparsers/gsth265parse.h new file mode 100644 index 000000000..108739b23 --- /dev/null +++ b/gst/videoparsers/gsth265parse.h @@ -0,0 +1,102 @@ +/* GStreamer H.265 Parser + * Copyright (C) 2013 Intel Corporation + * Contact: Sreerenj Balachandran <sreerenj.balachandran@intel.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. + */ + +#ifndef __GST_H265_PARSE_H__ +#define __GST_H265_PARSE_H__ + +#include <gst/gst.h> +#include <gst/base/gstbaseparse.h> +#include <gst/codecparsers/gsth265parser.h> + +G_BEGIN_DECLS + +#define GST_TYPE_H265_PARSE \ + (gst_h265_parse_get_type()) +#define GST_H265_PARSE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_H265_PARSE,GstH265Parse)) +#define GST_H265_PARSE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_H265_PARSE,GstH265ParseClass)) +#define GST_IS_H265_PARSE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_H265_PARSE)) +#define GST_IS_H265_PARSE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_H265_PARSE)) + +GType gst_h265_parse_get_type (void); + +typedef struct _GstH265Parse GstH265Parse; +typedef struct _GstH265ParseClass GstH265ParseClass; + +struct _GstH265Parse +{ + GstBaseParse baseparse; + + /* stream */ + gint width, height; + gint fps_num, fps_den; + gint upstream_par_n, upstream_par_d; + gint parsed_par_n, parsed_par_d; + /* current codec_data in output caps, if any */ + GstBuffer *codec_data; + /* input codec_data, if any */ + GstBuffer *codec_data_in; + guint nal_length_size; + gboolean packetized; + gboolean split_packetized; + gboolean transform; + + /* state */ + GstH265Parser *nalparser; + guint align; + guint format; + gint current_off; + + GstClockTime last_report; + gboolean push_codec; + gboolean have_vps; + gboolean have_sps; + gboolean have_pps; + + /* collected SPS and PPS NALUs */ + GstBuffer *vps_nals[GST_H265_MAX_VPS_COUNT]; + GstBuffer *sps_nals[GST_H265_MAX_SPS_COUNT]; + GstBuffer *pps_nals[GST_H265_MAX_PPS_COUNT]; + + /* frame parsing */ + gint idr_pos, sei_pos; + gboolean update_caps; + GstAdapter *frame_out; + gboolean keyframe; + /* AU state */ + gboolean picture_start; + + /* props */ + guint interval; + + GstClockTime pending_key_unit_ts; + GstEvent *force_key_unit_event; +}; + +struct _GstH265ParseClass +{ + GstBaseParseClass parent_class; +}; + +G_END_DECLS +#endif |