mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping...
Original commit message from CVS: * configure.ac: * gst/asfdemux/asfheaders.c: (gst_asf_identify_guid), (gst_asf_get_guid_nick): * gst/asfdemux/asfheaders.h: * gst/asfdemux/gstasf.c: (plugin_init): * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init), (gst_asf_demux_class_init), (gst_asf_demux_init), (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event), (gst_asf_demux_handle_src_event), (gst_asf_demux_get_current_offset), (gst_asf_demux_chain), (gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid), (gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16), (gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64), (gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer), (gst_asf_demux_get_bytes), (gst_asf_demux_get_string), (gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file), (gst_asf_demux_get_bitrate_record), (gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header), (gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream), (gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data), (gst_asf_demux_get_obj_data_correction), (gst_asf_demux_get_stream_audio), (gst_asf_demux_get_stream_correction), (gst_asf_demux_get_stream_video), (gst_asf_demux_get_stream_video_format), (gst_asf_demux_get_stream), (gst_asf_demux_setup_pad), (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream), (gst_asf_demux_process_stream), (gst_asf_demux_get_gst_tag_from_tag_name), (gst_asf_demux_commit_taglist), (gst_asf_demux_process_ext_content_desc), (gst_asf_demux_get_object_header), (gst_asf_demux_process_data), (gst_asf_demux_process_header), (gst_asf_demux_process_file), (gst_asf_demux_process_comment), (gst_asf_demux_process_bitrate_props_object), (gst_asf_demux_process_header_ext), (gst_asf_demux_process_object), (gst_asf_demux_descramble_segment), (gst_asf_demux_element_send_event), (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer), (gst_asf_demux_process_chunk), (gst_asf_demux_process_segment), (gst_asf_demux_handle_data), (gst_asf_demux_parse_data), (gst_asf_demux_get_src_query_types), (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state): * gst/asfdemux/gstasfdemux.h: asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping video frames). The seeking code is likely to make Wim cry, but hey, at least it compiles.
This commit is contained in:
parent
2c813b4b21
commit
366b006b7d
7 changed files with 2353 additions and 1599 deletions
51
ChangeLog
51
ChangeLog
|
@ -1,3 +1,54 @@
|
|||
2006-02-15 Tim-Philipp Müller <tim at centricular dot net>
|
||||
|
||||
* configure.ac:
|
||||
* gst/asfdemux/asfheaders.c: (gst_asf_identify_guid),
|
||||
(gst_asf_get_guid_nick):
|
||||
* gst/asfdemux/asfheaders.h:
|
||||
* gst/asfdemux/gstasf.c: (plugin_init):
|
||||
* gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
|
||||
(gst_asf_demux_class_init), (gst_asf_demux_init),
|
||||
(gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
|
||||
(gst_asf_demux_handle_src_event),
|
||||
(gst_asf_demux_get_current_offset), (gst_asf_demux_chain),
|
||||
(gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid),
|
||||
(gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16),
|
||||
(gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64),
|
||||
(gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer),
|
||||
(gst_asf_demux_get_bytes), (gst_asf_demux_get_string),
|
||||
(gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file),
|
||||
(gst_asf_demux_get_bitrate_record),
|
||||
(gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header),
|
||||
(gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream),
|
||||
(gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data),
|
||||
(gst_asf_demux_get_obj_data_correction),
|
||||
(gst_asf_demux_get_stream_audio),
|
||||
(gst_asf_demux_get_stream_correction),
|
||||
(gst_asf_demux_get_stream_video),
|
||||
(gst_asf_demux_get_stream_video_format),
|
||||
(gst_asf_demux_get_stream), (gst_asf_demux_setup_pad),
|
||||
(gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
|
||||
(gst_asf_demux_process_stream),
|
||||
(gst_asf_demux_get_gst_tag_from_tag_name),
|
||||
(gst_asf_demux_commit_taglist),
|
||||
(gst_asf_demux_process_ext_content_desc),
|
||||
(gst_asf_demux_get_object_header), (gst_asf_demux_process_data),
|
||||
(gst_asf_demux_process_header), (gst_asf_demux_process_file),
|
||||
(gst_asf_demux_process_comment),
|
||||
(gst_asf_demux_process_bitrate_props_object),
|
||||
(gst_asf_demux_process_header_ext), (gst_asf_demux_process_object),
|
||||
(gst_asf_demux_descramble_segment),
|
||||
(gst_asf_demux_element_send_event),
|
||||
(gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
|
||||
(gst_asf_demux_process_chunk), (gst_asf_demux_process_segment),
|
||||
(gst_asf_demux_handle_data), (gst_asf_demux_parse_data),
|
||||
(gst_asf_demux_get_src_query_types),
|
||||
(gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
|
||||
* gst/asfdemux/gstasfdemux.h:
|
||||
asfdemux ported to 0.10. Does still need a bit of work (seems like
|
||||
there's something funky going on when timestamping video frames).
|
||||
The seeking code is likely to make Wim cry, but hey, at least it
|
||||
compiles.
|
||||
|
||||
2006-02-15 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* ext/amrnb/amrnbdec.c: (gst_amrnbdec_setcaps),
|
||||
|
|
|
@ -208,6 +208,7 @@ AC_SUBST(GST_PLUGIN_LDFLAGS)
|
|||
|
||||
dnl these are all the gst plug-ins, compilable without additional libs
|
||||
GST_PLUGINS_ALL="\
|
||||
asfdemux \
|
||||
dvdlpcmdec \
|
||||
iec958 \
|
||||
mpegaudioparse \
|
||||
|
@ -390,6 +391,7 @@ dnl po/Makefile.in
|
|||
AC_CONFIG_FILES(
|
||||
Makefile
|
||||
gst/Makefile
|
||||
gst/asfdemux/Makefile
|
||||
gst/dvdlpcmdec/Makefile
|
||||
gst/iec958/Makefile
|
||||
gst/mpegaudioparse/Makefile
|
||||
|
|
|
@ -21,29 +21,33 @@
|
|||
|
||||
#include "asfheaders.h"
|
||||
|
||||
ASFGuidHash asf_correction_guids[] = {
|
||||
{ASF_CORRECTION_ON, {0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
|
||||
const ASFGuidHash asf_correction_guids[] = {
|
||||
{ASF_CORRECTION_ON, "ASF_CORRECTION_ON",
|
||||
{0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
|
||||
},
|
||||
/*
|
||||
{ ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
|
||||
{0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F}
|
||||
},
|
||||
*/
|
||||
{ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
|
||||
{0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
|
||||
},
|
||||
{ASF_CORRECTION_UNDEFINED, "ASF_CORRECTION_UNDEFINED",
|
||||
{0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
/* { ASF_CORRECTION_OFF, { 0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F }},*/
|
||||
{ASF_CORRECTION_OFF, {0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
|
||||
}
|
||||
,
|
||||
{ASF_CORRECTION_UNDEFINED, {0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
};
|
||||
|
||||
ASFGuidHash asf_stream_guids[] = {
|
||||
{ASF_STREAM_VIDEO, {0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
|
||||
const ASFGuidHash asf_stream_guids[] = {
|
||||
{ASF_STREAM_VIDEO, "ASF_STREAM_VIDEO",
|
||||
{0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
|
||||
},
|
||||
{ASF_STREAM_AUDIO, "ASF_STREAM_AUDIO",
|
||||
{0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
|
||||
},
|
||||
{ASF_STREAM_UNDEFINED, "ASF_STREAM_UNDEFINED",
|
||||
{0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
{ASF_STREAM_AUDIO, {0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
|
||||
}
|
||||
,
|
||||
{ASF_STREAM_UNDEFINED, {0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -55,63 +59,94 @@ ASFGuidHash asf_stream_guids[] = {
|
|||
|
||||
*/
|
||||
|
||||
ASFGuidHash asf_object_guids[] = {
|
||||
{ASF_OBJ_STREAM, {0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
|
||||
const ASFGuidHash asf_object_guids[] = {
|
||||
{ASF_OBJ_STREAM, "ASF_OBJ_STREAM",
|
||||
{0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
|
||||
},
|
||||
{ASF_OBJ_DATA, "ASF_OBJ_DATA",
|
||||
{0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
|
||||
},
|
||||
{ASF_OBJ_FILE, "ASF_OBJ_FILE",
|
||||
{0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
|
||||
},
|
||||
{ASF_OBJ_HEADER, "ASF_OBJ_HEADER",
|
||||
{0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
|
||||
},
|
||||
{ASF_OBJ_CONCEAL_NONE, "ASF_OBJ_CONCEAL_NONE",
|
||||
{0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
|
||||
},
|
||||
{ASF_OBJ_COMMENT, "ASF_OBJ_COMMENT",
|
||||
{0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
|
||||
},
|
||||
{ASF_OBJ_CODEC_COMMENT, "ASF_OBJ_CODEC_COMMENT",
|
||||
{0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
|
||||
},
|
||||
{ASF_OBJ_CODEC_COMMENT1, "ASF_OBJ_CODEC_COMMENT1",
|
||||
{0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
|
||||
},
|
||||
{ASF_OBJ_INDEX, "ASF_OBJ_INDEX",
|
||||
{0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
|
||||
},
|
||||
{ASF_OBJ_HEAD1, "ASF_OBJ_HEAD1",
|
||||
{0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
|
||||
},
|
||||
{ASF_OBJ_HEAD2, "ASF_OBJ_HEAD2",
|
||||
{0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
|
||||
},
|
||||
{ASF_OBJ_PADDING, "ASF_OBJ_PADDING",
|
||||
{0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
|
||||
},
|
||||
{ASF_OBJ_BITRATE_PROPS, "ASF_OBJ_BITRATE_PROPS",
|
||||
{0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
|
||||
},
|
||||
{ASF_OBJ_EXT_CONTENT_DESC, "ASF_OBJ_EXT_CONTENT_DESC",
|
||||
{0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
|
||||
},
|
||||
{ASF_OBJ_BITRATE_MUTEX, "ASF_OBJ_BITRATE_MUTEX",
|
||||
{0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
|
||||
},
|
||||
{ASF_OBJ_LANGUAGE_LIST, "ASF_OBJ_LANGUAGE_LIST",
|
||||
{0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
|
||||
},
|
||||
{ASF_OBJ_METADATA_OBJECT, "ASF_OBJ_METADATA_OBJECT",
|
||||
{0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
|
||||
},
|
||||
{ASF_OBJ_EXTENDED_STREAM_PROPS, "ASF_OBJ_EXTENDED_STREAM_PROPS",
|
||||
{0x14e6a5cb, 0x4332c672, 0x69a99983, 0x5a5b0652}
|
||||
},
|
||||
{ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
|
||||
{0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_DATA, {0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_FILE, {0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_HEADER, {0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_CONCEAL_NONE, {0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_COMMENT, {0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_CODEC_COMMENT, {0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_CODEC_COMMENT1, {0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_INDEX, {0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_HEAD1, {0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_HEAD2, {0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_PADDING, {0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_BITRATE_PROPS, {0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_EXT_CONTENT_DESC, {0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_BITRATE_MUTEX, {0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_LANGUAGE_LIST, {0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_METADATA_OBJECT, {0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_EXTENDED_STREAM_PROPS, {0x14e6a5cb, 0x4332c672, 0x69a99983,
|
||||
0x5a5b0652}
|
||||
}
|
||||
,
|
||||
{ASF_OBJ_UNDEFINED, {0, 0, 0, 0}
|
||||
}
|
||||
,
|
||||
};
|
||||
|
||||
guint32
|
||||
gst_asf_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
|
||||
if (guids[i].guid.v1 == guid->v1 &&
|
||||
guids[i].guid.v2 == guid->v2 &&
|
||||
guids[i].guid.v3 == guid->v3 && guids[i].guid.v4 == guid->v4) {
|
||||
return guids[i].obj_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* The base case if none is found */
|
||||
return ASF_OBJ_UNDEFINED;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gst_asf_get_guid_nick (const ASFGuidHash * guids, guint32 obj_id)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
|
||||
if (guids[i].obj_id == obj_id) {
|
||||
return guids[i].obj_id_str;
|
||||
}
|
||||
}
|
||||
|
||||
/* The base case if none is found */
|
||||
return "ASF_OBJ_UNDEFINED";
|
||||
}
|
||||
|
|
|
@ -30,8 +30,9 @@ typedef struct {
|
|||
|
||||
|
||||
typedef struct {
|
||||
guint8 obj_id;
|
||||
ASFGuid guid;
|
||||
guint8 obj_id;
|
||||
const gchar *obj_id_str;
|
||||
ASFGuid guid;
|
||||
} ASFGuidHash;
|
||||
|
||||
enum {
|
||||
|
@ -53,24 +54,34 @@ enum {
|
|||
ASF_OBJ_BITRATE_MUTEX,
|
||||
ASF_OBJ_LANGUAGE_LIST,
|
||||
ASF_OBJ_METADATA_OBJECT,
|
||||
ASF_OBJ_EXTENDED_STREAM_PROPS,
|
||||
ASF_OBJ_EXTENDED_STREAM_PROPS
|
||||
};
|
||||
|
||||
enum {
|
||||
ASF_STREAM_UNDEFINED = 0,
|
||||
ASF_STREAM_VIDEO,
|
||||
ASF_STREAM_AUDIO,
|
||||
ASF_STREAM_AUDIO
|
||||
};
|
||||
|
||||
enum {
|
||||
ASF_CORRECTION_UNDEFINED = 0,
|
||||
ASF_CORRECTION_ON,
|
||||
ASF_CORRECTION_OFF,
|
||||
ASF_CORRECTION_OFF
|
||||
};
|
||||
|
||||
extern ASFGuidHash asf_correction_guids[];
|
||||
extern const ASFGuidHash asf_correction_guids[];
|
||||
|
||||
extern const ASFGuidHash asf_stream_guids[];
|
||||
|
||||
extern const ASFGuidHash asf_object_guids[];
|
||||
|
||||
/* GUID utilities */
|
||||
guint32 gst_asf_identify_guid (const ASFGuidHash * guids,
|
||||
ASFGuid * guid);
|
||||
|
||||
const gchar *gst_asf_get_guid_nick (const ASFGuidHash * guids,
|
||||
guint32 obj_id);
|
||||
|
||||
extern ASFGuidHash asf_stream_guids[];
|
||||
|
||||
struct _asf_obj_header {
|
||||
guint32 num_objects;
|
||||
|
@ -235,6 +246,4 @@ struct _asf_bitrate_record {
|
|||
|
||||
typedef struct _asf_bitrate_record asf_bitrate_record;
|
||||
|
||||
extern ASFGuidHash asf_object_guids[];
|
||||
|
||||
#endif /* __ASFHEADERS_H__ */
|
||||
|
|
|
@ -24,18 +24,15 @@
|
|||
#include <gst/gst.h>
|
||||
|
||||
#include "gstasfdemux.h"
|
||||
#include "gstasfmux.h"
|
||||
/* #include "gstasfmux.h" */
|
||||
|
||||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
if (!gst_library_load ("gstbytestream") || !gst_library_load ("riff"))
|
||||
return FALSE;
|
||||
|
||||
if (!gst_element_register (plugin, "asfdemux", GST_RANK_PRIMARY,
|
||||
GST_TYPE_ASF_DEMUX)
|
||||
|| !gst_element_register (plugin, "asfmux", GST_RANK_NONE,
|
||||
GST_TYPE_ASFMUX))
|
||||
if (!gst_element_register (plugin, "asfdemux", GST_RANK_PRIMARY, GST_TYPE_ASF_DEMUX)) /*
|
||||
|| !gst_element_register (plugin, "asfmux", GST_RANK_NONE,
|
||||
GST_TYPE_ASFMUX))
|
||||
*/
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
|
@ -45,4 +42,4 @@ GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
|||
GST_VERSION_MINOR,
|
||||
"asf",
|
||||
"Demuxes and muxes audio and video in Microsofts ASF format",
|
||||
plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN)
|
||||
plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -22,7 +22,7 @@
|
|||
#define __ASF_DEMUX_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/bytestream/bytestream.h>
|
||||
#include <gst/base/gstadapter.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
@ -34,26 +34,31 @@ G_BEGIN_DECLS
|
|||
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ASF_DEMUX,GstASFDemux))
|
||||
#define GST_IS_ASF_DEMUX(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ASF_DEMUX))
|
||||
#define GST_IS_ASF_DEMUX_CLASS(obj) \
|
||||
#define GST_IS_ASF_DEMUX_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX))
|
||||
|
||||
typedef struct _GstASFDemux GstASFDemux;
|
||||
typedef struct _GstASFDemuxClass GstASFDemuxClass;
|
||||
|
||||
struct _GstASFStreamContext {
|
||||
GstPad *pad;
|
||||
guint64 pts;
|
||||
};
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GstPad *pad;
|
||||
guint16 id;
|
||||
guint32 frag_offset;
|
||||
guint32 sequence;
|
||||
guint64 delay;
|
||||
GstBuffer *payload;
|
||||
GstPad *pad;
|
||||
guint16 id;
|
||||
guint32 frag_offset;
|
||||
guint32 sequence;
|
||||
guint64 delay;
|
||||
guint64 last_pts;
|
||||
GstBuffer *payload;
|
||||
|
||||
gboolean need_newsegment; /* do we need to send a new-segment event? */
|
||||
|
||||
/* video-only */
|
||||
guint64 last_buffer_timestamp; /* timestamp of last buffer sent out */
|
||||
gboolean is_video;
|
||||
gboolean fps_known;
|
||||
GstBuffer *cache;
|
||||
|
||||
GstCaps *caps;
|
||||
} asf_stream_context;
|
||||
|
||||
typedef enum {
|
||||
|
@ -62,55 +67,60 @@ typedef enum {
|
|||
GST_ASF_DEMUX_STATE_EOS
|
||||
} GstAsfDemuxState;
|
||||
|
||||
#define GST_ASF_DEMUX_NUM_VIDEO_PADS 16
|
||||
#define GST_ASF_DEMUX_NUM_AUDIO_PADS 32
|
||||
#define GST_ASF_DEMUX_NUM_STREAMS 32
|
||||
#define GST_ASF_DEMUX_NUM_STREAM_IDS 127
|
||||
|
||||
struct _GstASFDemux {
|
||||
GstElement element;
|
||||
GstElement element;
|
||||
|
||||
/* pads */
|
||||
GstPad *sinkpad;
|
||||
GstPad *sinkpad;
|
||||
|
||||
GstByteStream *bs;
|
||||
GstAdapter *adapter;
|
||||
GstTagList *taglist;
|
||||
GstAsfDemuxState state;
|
||||
|
||||
/* The number of bytes needed for the next parsing unit. Set by
|
||||
* parsing functions when they return ASF_FLOW_NEED_MORE_DATA.
|
||||
* if not set after an ASF_FLOW_NEED_MORE_DATA, this indicates
|
||||
* that we are parsing broken data and want to parse beyond an
|
||||
* object or packet boundary. */
|
||||
guint bytes_needed;
|
||||
|
||||
GstTagList *taglist;
|
||||
GstAsfDemuxState state;
|
||||
guint64 data_offset, num_packets, packet, data_size;
|
||||
guint64 seek_pending;
|
||||
gboolean seek_flush, seek_discont;
|
||||
guint64 data_offset; /* byte offset where packets start */
|
||||
guint64 data_size; /* total size of packet data in bytes */
|
||||
guint64 num_packets; /* total number of data packets */
|
||||
guint64 packet; /* current packet */
|
||||
|
||||
#define GST_ASF_DEMUX_NUM_VIDEO_PADS 16
|
||||
#define GST_ASF_DEMUX_NUM_AUDIO_PADS 32
|
||||
#define GST_ASF_DEMUX_NUM_STREAMS 23
|
||||
#define GST_ASF_DEMUX_NUM_STREAM_IDS 127
|
||||
/* bitrates are unused at the moment */
|
||||
guint32 bitrate[GST_ASF_DEMUX_NUM_STREAM_IDS];
|
||||
|
||||
/* stream output pads */
|
||||
GstPad *video_pad[GST_ASF_DEMUX_NUM_VIDEO_PADS];
|
||||
gint64 video_PTS[GST_ASF_DEMUX_NUM_VIDEO_PADS];
|
||||
guint32 num_audio_streams;
|
||||
guint32 num_video_streams;
|
||||
guint32 num_streams;
|
||||
asf_stream_context stream[GST_ASF_DEMUX_NUM_STREAMS];
|
||||
|
||||
GstPad *audio_pad[GST_ASF_DEMUX_NUM_AUDIO_PADS];
|
||||
gint64 audio_PTS[GST_ASF_DEMUX_NUM_AUDIO_PADS];
|
||||
guint32 packet_size; /* -1 if not fixed or not known */
|
||||
guint32 timestamp; /* in milliseconds */
|
||||
guint64 play_time;
|
||||
|
||||
guint64 last_seek;
|
||||
gboolean restart;
|
||||
guint64 preroll;
|
||||
guint64 pts;
|
||||
|
||||
guint32 bitrate[GST_ASF_DEMUX_NUM_STREAM_IDS];
|
||||
/* expected byte offset of next buffer to be received by chain
|
||||
* function. Used to calculate the current byte offset into the
|
||||
* file from the adapter state and the data parser state */
|
||||
gint64 next_byte_offset;
|
||||
|
||||
/* Demuxing state */
|
||||
guint32 num_audio_streams;
|
||||
guint32 num_video_streams;
|
||||
guint32 num_streams;
|
||||
asf_stream_context stream[GST_ASF_DEMUX_NUM_STREAMS];
|
||||
|
||||
guint32 packet_size;
|
||||
guint32 timestamp;
|
||||
guint64 play_time;
|
||||
|
||||
guint64 preroll;
|
||||
guint64 pts;
|
||||
|
||||
GstSegment segment; /* configured play segment */
|
||||
|
||||
/* Descrambler settings */
|
||||
guint8 span;
|
||||
guint16 ds_packet_size;
|
||||
guint16 ds_chunk_size;
|
||||
guint16 ds_data_size;
|
||||
guint8 span;
|
||||
guint16 ds_packet_size;
|
||||
guint16 ds_chunk_size;
|
||||
guint16 ds_data_size;
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue