| /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ |
| /* |
| * libdvbsub - DVB subtitle decoding |
| * Copyright (C) Mart Raudsepp 2009 <mart.raudsepp@artecdesign.ee> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 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 |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef _DVB_SUB_H_ |
| #define _DVB_SUB_H_ |
| |
| #include <glib.h> |
| |
| G_BEGIN_DECLS |
| |
| typedef struct _DvbSub DvbSub; |
| |
| /** |
| * DVBSubtitlePicture: |
| * @data: the data in the form of palette indices, each byte represents one pixel |
| * as an index into the @palette. |
| * @palette: the palette used for this subtitle rectangle, up to 256 items depending |
| * on the depth of the subpicture; each palette item is in ARGB form, 8-bits per channel. |
| * @palette_bits_count: the amount of bits used in indeces into @palette in @data. |
| * @rowstride: the number of bytes between the start of a row and the start of the next row. |
| * |
| * A structure representing the contents of a subtitle rectangle. |
| * |
| * FIXME: Expose the depth of the palette, and perhaps also the height in this struct. |
| */ |
| typedef struct DVBSubtitlePicture { |
| guint8 *data; |
| guint32 *palette; |
| guint8 palette_bits_count; |
| int rowstride; |
| } DVBSubtitlePicture; |
| |
| /** |
| * DVBSubtitleRect: |
| * @x: x coordinate of top left corner |
| * @y: y coordinate of top left corner |
| * @w: the width of this subpicture rectangle |
| * @h: the height of this subpicture rectangle |
| * @pict: the content of this subpicture rectangle |
| * |
| * A structure representing one subtitle objects position, dimension and content. |
| */ |
| typedef struct DVBSubtitleRect { |
| int x; |
| int y; |
| int w; |
| int h; |
| |
| DVBSubtitlePicture pict; |
| } DVBSubtitleRect; |
| |
| /** |
| * DVBSubtitleWindow |
| * @version: version |
| * @display_window_flag: window_* are valid |
| * @display_width: assumed width of display |
| * @display_height: assumed height of display |
| * @window_x: x coordinate of top left corner of the subtitle window |
| * @window_y: y coordinate of top left corner of the subtitle window |
| * @window_width: width of the subtitle window |
| * @window_height: height of the subtitle window |
| * |
| * A structure presenting display and window information |
| * display definition segment from ETSI EN 300 743 V1.3.1 |
| */ |
| typedef struct DVBSubtitleWindow { |
| gint version; |
| gint window_flag; |
| |
| gint display_width; |
| gint display_height; |
| |
| gint window_x; |
| gint window_y; |
| gint window_width; |
| gint window_height; |
| } DVBSubtitleWindow; |
| |
| /** |
| * DVBSubtitles: |
| * @num_rects: the number of #DVBSubtitleRect in @rects |
| * @rects: dynamic array of #DVBSubtitleRect |
| * |
| * A structure representing a set of subtitle objects. |
| */ |
| typedef struct DVBSubtitles { |
| guint64 pts; |
| guint8 page_time_out; |
| guint num_rects; |
| DVBSubtitleRect *rects; |
| DVBSubtitleWindow display_def; |
| } DVBSubtitles; |
| |
| /** |
| * DvbSubCallbacks: |
| * @new_data: called when new subpicture data is available for display. @dvb_sub |
| * is the #DvbSub instance this callback originates from; @subs is the set of |
| * subtitle objects that should be display for no more than @page_time_out |
| * seconds at @pts; @user_data is the same user_data as was passed through |
| * dvb_sub_set_callbacks(); The callback handler is responsible for eventually |
| * cleaning up the subpicture data @subs with a call to dvb_subtitles_free() |
| * |
| * A set of callbacks that can be installed on the #DvbSub with |
| * dvb_sub_set_callbacks(). |
| */ |
| typedef struct { |
| void (*new_data) (DvbSub *dvb_sub, DVBSubtitles * subs, gpointer user_data); |
| /*< private >*/ |
| gpointer _dvb_sub_reserved[3]; |
| } DvbSubCallbacks; |
| |
| DvbSub *dvb_sub_new (void); |
| void dvb_sub_free (DvbSub * sub); |
| |
| gint dvb_sub_feed_with_pts (DvbSub *dvb_sub, guint64 pts, guint8 *data, gint len); |
| void dvb_sub_set_callbacks (DvbSub *dvb_sub, DvbSubCallbacks *callbacks, gpointer user_data); |
| void dvb_subtitles_free (DVBSubtitles *sub); |
| |
| G_END_DECLS |
| |
| #endif /* _DVB_SUB_H_ */ |