Commit graph

38 commits

Author SHA1 Message Date
Sebastian Dröge ce01236e32 mxf: Source files and #include cleanup 2009-03-26 12:46:22 +01:00
Sebastian Dröge da27eb2380 mxf: Move some static const variables into functions 2009-03-23 15:06:11 +01:00
Sebastian Dröge b409f71f49 mxf: Start implementing a central UL database and add some helper functions and use them 2009-03-21 10:19:49 +01:00
Sebastian Dröge e50039897b mxf: Add MXF muxer
This muxer currently only supports OP1a and is
probably not yet 100% complying to the standards.
2009-03-21 10:19:47 +01:00
Sebastian Dröge 636b535e4a mxfdemux: Add helper function to convert MXFraction to gdouble and use it 2009-02-21 16:16:32 +01:00
Sebastian Dröge 61b284de0d mxfdemux: Parse MXFTimestamp's milliseconds and add _to_string() function 2009-02-12 11:00:07 +01:00
Sebastian Dröge 8dc9f2ea4d mxfdemux: Add support for non-standard Avid MXF files containing DNxHD essence
Avid uses a custom essence container UL and custom essence element keys
that are fortunately compatible with the generic container essence
elements. Partially fixes bug #561922.
2009-02-07 10:38:26 +01:00
Sebastian Dröge 6e392318c0 mxfdemux: Add support for non-standard Avid MXF files containing DV essence
Avid usually uses a custom essence container label for the essence
descriptors and stores the actual codec that is used inside the
picture essence coding field (and for sound probably in the sound
essence coding field but I have no sample files with sound).
Partially fixes bug #561922.
2009-02-07 09:27:13 +01:00
Sebastian Dröge afbec8ab9b Allow index table segments without primer pack
When parsing an index table segment without a valid
primer pack in this partition only parse the static
local tags and ignore all dynamic ones.

This allows us to use index table segments in some
broken files.
2009-01-31 11:02:24 +01:00
Sebastian Dröge 914b108db9 Fix parsing of index table segments
Allocate memory for the pos tables and slice offsets
of the index entries separately to a) fix alignment in
weird cases and b) to actually have something to free()
in the index table segment reset function.
2009-01-31 11:02:24 +01:00
Sebastian Dröge 7ce5b5a2d6 Store all partitions & primer packs in memory for faster access
Store all partitions & primer packs in memory for faster access.
This is later needed for fast seeking.

Pre-fill the list of partitions with the content of the random
index pack.

Don't parse metadata of an partition twice.
2009-01-23 10:09:01 +01:00
Sebastian Dröge 716ce72e46 Store MXF metadata in a hash table, keyed by UID
Store the MXF metadata in a hash table, keyed by the
instance UID. This simplifies resolval of the metadata
and makes looping over all metadata sets unnecessary
in most cases.

Additionally parse metadata always. If we already have
a metadata set with the same UID replace it only if
the new metadata set is from a later offset. This
fixes metadata parsing of files where following partitions
don't have a complete copy of the previous metadata.
2009-01-22 13:13:00 +01:00
Sebastian Dröge fc4be0acca Update copyrights for 2009 2009-01-22 13:13:00 +01:00
Sebastian Dröge 100dfc34d6 Simplify parsing of UL/UUID arrays
Simplify parsing of UL/UUID arrays by abstracting it
into a separate function.
2009-01-22 13:13:00 +01:00
Sebastian Dröge 8fcdca999a gst/mxf/: Fix compilation with debugging disabled.
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_handle_tag),
(mxf_bwf_create_caps):
* gst/mxf/mxfdemux.c: (gst_mxf_demux_handle_klv_packet):
* gst/mxf/mxfmetadata.c: (mxf_metadata_handle_tag),
(mxf_metadata_preface_handle_tag),
(mxf_metadata_identification_handle_tag),
(mxf_metadata_content_storage_handle_tag),
(mxf_metadata_essence_container_data_handle_tag),
(mxf_metadata_generic_package_handle_tag),
(mxf_metadata_source_package_handle_tag),
(mxf_metadata_track_handle_tag),
(mxf_metadata_sequence_handle_tag),
(mxf_metadata_structural_component_handle_tag),
(mxf_metadata_source_clip_handle_tag),
(mxf_metadata_dm_segment_handle_tag),
(mxf_metadata_generic_descriptor_handle_tag),
(mxf_metadata_file_descriptor_handle_tag),
(mxf_metadata_generic_picture_essence_descriptor_handle_tag),
(mxf_metadata_generic_sound_essence_descriptor_handle_tag),
(mxf_metadata_generic_data_essence_descriptor_handle_tag),
(mxf_metadata_multiple_descriptor_handle_tag):
* gst/mxf/mxfparse.c: (mxf_partition_pack_parse),
(mxf_index_table_segment_parse), (mxf_primer_pack_parse),
(mxf_local_tag_add_to_hash_table):
Fix compilation with debugging disabled.
2009-01-05 10:22:29 +00:00
Sebastian Dröge 5587f91210 gst/mxf/: Implement an essence element handling registry and use this instead of an hardcoded, large if-then-else block.
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c: (mxf_is_aes_bwf_essence_track),
(mxf_bwf_handle_essence_element),
(mxf_aes3_handle_essence_element), (mxf_bwf_create_caps),
(mxf_aes3_create_caps), (mxf_aes_bwf_create_caps),
(mxf_aes_bwf_init):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfalaw.c: (mxf_is_alaw_essence_track),
(mxf_alaw_handle_essence_element), (mxf_alaw_create_caps),
(mxf_alaw_init):
* gst/mxf/mxfalaw.h:
* gst/mxf/mxfd10.c: (mxf_is_d10_essence_track),
(mxf_d10_picture_handle_essence_element),
(mxf_d10_sound_handle_essence_element), (mxf_d10_create_caps),
(mxf_d10_init):
* gst/mxf/mxfd10.h:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_header_metadata_update_streams),
(gst_mxf_demux_handle_generic_container_essence_element):
* gst/mxf/mxfdv-dif.c: (mxf_is_dv_dif_essence_track),
(mxf_dv_dif_handle_essence_element), (mxf_dv_dif_create_caps),
(mxf_dv_dif_init):
* gst/mxf/mxfdv-dif.h:
* gst/mxf/mxfjpeg2000.c: (mxf_is_jpeg2000_essence_track),
(mxf_jpeg2000_handle_essence_element), (mxf_jpeg2000_create_caps),
(mxf_jpeg2000_init):
* gst/mxf/mxfjpeg2000.h:
* gst/mxf/mxfmpeg.c: (mxf_is_mpeg_essence_track),
(mxf_mpeg_video_handle_essence_element),
(mxf_mpeg_audio_handle_essence_element), (mxf_mpeg_es_create_caps),
(mxf_mpeg_create_caps), (mxf_mpeg_init):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_essence_element_handler_register),
(mxf_essence_element_handler_find):
* gst/mxf/mxfparse.h:
* gst/mxf/mxfup.c: (mxf_is_up_essence_track),
(mxf_up_handle_essence_element), (mxf_up_rgba_create_caps),
(mxf_up_create_caps), (mxf_up_init):
* gst/mxf/mxfup.h:
Implement an essence element handling registry and use this instead
of an hardcoded, large if-then-else block.
2008-12-16 12:30:34 +00:00
Sebastian Dröge bc93b81dd5 gst/mxf/: Convert the structural metadata to GstMiniObjects to make a lot of code easier and to make everything bette...
Original commit message from CVS:
* gst/mxf/Makefile.am:
* gst/mxf/mxf.c: (plugin_init):
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_handle_tag),
(mxf_metadata_wave_audio_essence_descriptor_init),
(mxf_metadata_wave_audio_essence_descriptor_class_init),
(mxf_metadata_aes3_audio_essence_descriptor_finalize),
(mxf_metadata_aes3_audio_essence_descriptor_handle_tag),
(mxf_metadata_aes3_audio_essence_descriptor_init),
(mxf_metadata_aes3_audio_essence_descriptor_class_init),
(mxf_is_aes_bwf_essence_track), (mxf_bwf_create_caps),
(mxf_aes3_create_caps), (mxf_aes_bwf_create_caps),
(mxf_aes_bwf_init):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfalaw.c: (mxf_is_alaw_essence_track),
(mxf_alaw_create_caps), (mxf_alaw_init):
* gst/mxf/mxfalaw.h:
* gst/mxf/mxfd10.c: (mxf_is_d10_essence_track),
(mxf_d10_create_caps), (mxf_d10_init):
* gst/mxf/mxfd10.h:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_find_package), (gst_mxf_demux_choose_package),
(gst_mxf_demux_handle_header_metadata_update_streams),
(gst_mxf_demux_handle_metadata),
(gst_mxf_demux_handle_generic_container_essence_element),
(gst_mxf_demux_handle_klv_packet), (gst_mxf_demux_src_query):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfdv-dif.c: (mxf_is_dv_dif_essence_track),
(mxf_dv_dif_create_caps), (mxf_dv_dif_init):
* gst/mxf/mxfdv-dif.h:
* gst/mxf/mxfjpeg2000.c: (mxf_is_jpeg2000_essence_track),
(mxf_jpeg2000_create_caps), (mxf_jpeg2000_init):
* gst/mxf/mxfjpeg2000.h:
* gst/mxf/mxfmetadata.c: (mxf_metadata_base_finalize),
(mxf_metadata_base_handle_tag), (mxf_metadata_base_resolve),
(mxf_metadata_base_init), (mxf_metadata_base_class_init),
(mxf_metadata_parse), (mxf_metadata_resolve),
(mxf_metadata_handle_tag), (mxf_metadata_class_init),
(mxf_metadata_init), (mxf_metadata_init_types),
(mxf_metadata_register), (mxf_metadata_new),
(mxf_metadata_preface_finalize), (mxf_metadata_preface_handle_tag),
(mxf_metadata_preface_resolve), (mxf_metadata_preface_init),
(mxf_metadata_preface_class_init),
(mxf_metadata_identification_finalize),
(mxf_metadata_identification_handle_tag),
(mxf_metadata_identification_init),
(mxf_metadata_identification_class_init),
(mxf_metadata_content_storage_finalize),
(mxf_metadata_content_storage_handle_tag),
(mxf_metadata_content_storage_resolve),
(mxf_metadata_content_storage_init),
(mxf_metadata_content_storage_class_init),
(mxf_metadata_essence_container_data_handle_tag),
(mxf_metadata_essence_container_data_resolve),
(mxf_metadata_essence_container_data_init),
(mxf_metadata_essence_container_data_class_init),
(mxf_metadata_generic_package_finalize),
(mxf_metadata_generic_package_handle_tag),
(mxf_metadata_generic_package_resolve),
(mxf_metadata_generic_package_init),
(mxf_metadata_generic_package_class_init),
(mxf_metadata_material_package_resolve),
(mxf_metadata_material_package_init),
(mxf_metadata_material_package_class_init),
(mxf_metadata_source_package_finalize),
(mxf_metadata_source_package_handle_tag),
(mxf_metadata_source_package_resolve),
(mxf_metadata_source_package_init),
(mxf_metadata_source_package_class_init),
(mxf_metadata_track_finalize), (mxf_metadata_track_handle_tag),
(mxf_metadata_track_resolve), (mxf_metadata_track_init),
(mxf_metadata_track_class_init),
(mxf_metadata_track_identifier_parse),
(mxf_metadata_timeline_track_handle_tag),
(mxf_metadata_timeline_track_init),
(mxf_metadata_timeline_track_class_init),
(mxf_metadata_event_track_handle_tag),
(mxf_metadata_event_track_init),
(mxf_metadata_event_track_class_init),
(mxf_metadata_static_track_init),
(mxf_metadata_static_track_class_init),
(mxf_metadata_sequence_finalize),
(mxf_metadata_sequence_handle_tag),
(mxf_metadata_sequence_resolve), (mxf_metadata_sequence_init),
(mxf_metadata_sequence_class_init),
(mxf_metadata_structural_component_handle_tag),
(mxf_metadata_structural_component_init),
(mxf_metadata_structural_component_class_init),
(mxf_metadata_timecode_component_handle_tag),
(mxf_metadata_timecode_component_init),
(mxf_metadata_timecode_component_class_init),
(mxf_metadata_source_clip_handle_tag),
(mxf_metadata_source_clip_resolve),
(mxf_metadata_source_clip_init),
(mxf_metadata_source_clip_class_init),
(mxf_metadata_dm_source_clip_finalize),
(mxf_metadata_dm_source_clip_handle_tag),
(mxf_metadata_dm_source_clip_init),
(mxf_metadata_dm_source_clip_class_init),
(mxf_metadata_dm_segment_finalize),
(mxf_metadata_dm_segment_handle_tag),
(mxf_metadata_dm_segment_resolve), (mxf_metadata_dm_segment_init),
(mxf_metadata_dm_segment_class_init),
(mxf_metadata_generic_descriptor_finalize),
(mxf_metadata_generic_descriptor_handle_tag),
(mxf_metadata_generic_descriptor_resolve),
(mxf_metadata_generic_descriptor_init),
(mxf_metadata_generic_descriptor_class_init),
(mxf_metadata_file_descriptor_handle_tag),
(mxf_metadata_file_descriptor_init),
(mxf_metadata_file_descriptor_class_init),
(mxf_metadata_generic_picture_essence_descriptor_handle_tag),
(mxf_metadata_generic_picture_essence_descriptor_init),
(mxf_metadata_generic_picture_essence_descriptor_class_init),
(mxf_metadata_generic_picture_essence_descriptor_set_caps),
(mxf_metadata_generic_sound_essence_descriptor_handle_tag),
(mxf_metadata_generic_sound_essence_descriptor_init),
(mxf_metadata_generic_sound_essence_descriptor_class_init),
(mxf_metadata_cdci_picture_essence_descriptor_handle_tag),
(mxf_metadata_cdci_picture_essence_descriptor_init),
(mxf_metadata_cdci_picture_essence_descriptor_class_init),
(mxf_metadata_rgba_picture_essence_descriptor_finalize),
(mxf_metadata_rgba_picture_essence_descriptor_handle_tag),
(mxf_metadata_rgba_picture_essence_descriptor_init),
(mxf_metadata_rgba_picture_essence_descriptor_class_init),
(mxf_metadata_generic_data_essence_descriptor_handle_tag),
(mxf_metadata_generic_data_essence_descriptor_init),
(mxf_metadata_generic_data_essence_descriptor_class_init),
(mxf_metadata_multiple_descriptor_finalize),
(mxf_metadata_multiple_descriptor_handle_tag),
(mxf_metadata_multiple_descriptor_resolve),
(mxf_metadata_multiple_descriptor_init),
(mxf_metadata_multiple_descriptor_class_init),
(mxf_metadata_locator_init), (mxf_metadata_locator_class_init),
(mxf_metadata_text_locator_finalize),
(mxf_metadata_text_locator_handle_tag),
(mxf_metadata_text_locator_init),
(mxf_metadata_text_locator_class_init),
(mxf_metadata_network_locator_finalize),
(mxf_metadata_network_locator_handle_tag),
(mxf_metadata_network_locator_init),
(mxf_metadata_network_locator_class_init):
* gst/mxf/mxfmetadata.h:
* gst/mxf/mxfmpeg.c:
(mxf_metadata_mpeg_video_descriptor_handle_tag),
(mxf_metadata_mpeg_video_descriptor_init),
(mxf_metadata_mpeg_video_descriptor_class_init),
(mxf_is_mpeg_essence_track), (mxf_mpeg_es_create_caps),
(mxf_mpeg_create_caps), (mxf_mpeg_init):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_index_table_segment_parse),
(mxf_local_tag_add_to_hash_table):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
* gst/mxf/mxfup.c: (mxf_is_up_essence_track), (mxf_up_create_caps),
(mxf_up_init):
* gst/mxf/mxfup.h:
Convert the structural metadata to GstMiniObjects to make a lot of
code easier and to make everything better extensible.
Add a "registry" for metadata handlers to improve extensibility even
more and to remove metadata type specifics from mxfdemux.
Clean up a lot of parts and add some more NULL checks.
2008-12-15 17:27:00 +00:00
Sebastian Dröge 1fe82925f5 gst/mxf/: Implement parsing of Event Tracks, Static Tracks, DM Segments and DM Source Clips as a preparation for desc...
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_handle_metadata_track),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfparse.c: (mxf_metadata_track_parse),
(mxf_metadata_structural_component_parse),
(mxf_metadata_structural_component_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Implement parsing of Event Tracks, Static Tracks, DM Segments
and DM Source Clips as a preparation for descriptive metadata
support. Next step is to implement SMPTE S380M, "Descriptive
Metadata Scheme-1".
2008-12-11 14:35:08 +00:00
Sebastian Dröge d23484c483 gst/mxf/mxfparse.c: All frame layout values except 0 are for interlaced video, not only 1 and 2.
Original commit message from CVS:
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_picture_essence_descriptor_set_caps):
All frame layout values except 0 are for interlaced video,
not only 1 and 2.
2008-12-08 15:46:13 +00:00
Sebastian Dröge abcc855497 gst/mxf/: Add initial support for uncompressed video essence (SMPTE S384M).
Original commit message from CVS:
* gst/mxf/Makefile.am:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams):
* gst/mxf/mxftypes.h:
* gst/mxf/mxfup.c: (mxf_is_up_essence_track),
(mxf_up_handle_essence_element), (mxf_up_rgba_create_caps),
(mxf_up_create_caps):
* gst/mxf/mxfup.h:
Add initial support for uncompressed video essence (SMPTE S384M).
* gst/mxf/mxfparse.c:
(mxf_metadata_rgba_picture_essence_descriptor_handle_tag),
(mxf_metadata_rgba_picture_essence_descriptor_reset):
Fix parsing of the RGBA descriptor and add support for parsing
the pixel layout.
2008-12-07 17:16:29 +00:00
Sebastian Dröge 6f15343df1 gst/mxf/: Implement parsing of the generic data essence descriptor.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_metadata_generic_data_essence_descriptor),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_data_essence_descriptor_handle_tag),
(mxf_metadata_generic_data_essence_descriptor_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Implement parsing of the generic data essence descriptor.
2008-12-05 12:26:02 +00:00
Sebastian Dröge fff48b08f6 gst/mxf/mxfparse.c: Fix setting of the height/width and PAR of video streams.
Original commit message from CVS:
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_picture_essence_descriptor_set_caps):
Fix setting of the height/width and PAR of video streams.
2008-12-04 08:50:48 +00:00
Sebastian Dröge 8201937c54 gst/mxf/: Add support for SMPTE D10 essence (SMPTE 386M).
Original commit message from CVS:
* gst/mxf/Makefile.am:
* gst/mxf/mxfd10.c: (mxf_is_d10_essence_track),
(mxf_d10_picture_handle_essence_element),
(mxf_d10_sound_handle_essence_element), (mxf_d10_create_caps):
* gst/mxf/mxfd10.h:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams):
Add support for SMPTE D10 essence (SMPTE 386M).
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_picture_essence_descriptor_set_caps):
Don't set width/height and PAR on the caps as those values are
wrong for most files (height is sometimes the height of a field
and aspect ratio is some random value).
* gst/mxf/mxfaes-bwf.c: (mxf_bwf_create_caps),
(mxf_aes3_create_caps):
Fix calculation of block align if it isn't set in the descriptor.
2008-12-04 08:37:18 +00:00
Sebastian Dröge 19ae0cf61d gst/mxf/mxfparse.c: Remove FIXME, zero-ULs and UMIDs are really invalid and we can use them as "unset" value.
Original commit message from CVS:
* gst/mxf/mxfparse.c:
Remove FIXME, zero-ULs and UMIDs are really invalid and we can
use them as "unset" value.
2008-12-03 10:15:27 +00:00
Sebastian Dröge c6d653d945 gst/mxf/: Add property to select the top-level source package or material package that should be used for playback.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_remove_pads),
(gst_mxf_demux_reset), (gst_mxf_demux_find_package),
(gst_mxf_demux_choose_package),
(gst_mxf_demux_handle_header_metadata_update_streams),
(gst_mxf_demux_handle_klv_packet), (gst_mxf_demux_set_property),
(gst_mxf_demux_get_property), (gst_mxf_demux_finalize),
(gst_mxf_demux_class_init):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c: (mxf_umid_from_string):
* gst/mxf/mxfparse.h:
Add property to select the top-level source package or material
package that should be used for playback.
2008-11-30 17:26:55 +00:00
Sebastian Dröge 70281aa4e4 gst/mxf/: Add initial support for JPEG2000 encoded video essence.
Original commit message from CVS:
* gst/mxf/Makefile.am:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams):
* gst/mxf/mxfjpeg2000.c: (mxf_is_jpeg2000_video_essence_track),
(mxf_jpeg2000_handle_essence_element), (mxf_jpeg2000_create_caps):
* gst/mxf/mxfjpeg2000.h:
Add initial support for JPEG2000 encoded video essence.
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_picture_essence_descriptor_set_caps):
Set the framerate in the video caps.
2008-11-29 20:25:06 +00:00
Sebastian Dröge 65587b80f5 gst/mxf/: Implement parsing of index table segments, which will later be used for seeking.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset),
(gst_mxf_demux_handle_index_table_segment):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c: (mxf_index_table_segment_parse),
(mxf_index_table_segment_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Implement parsing of index table segments, which will later be
used for seeking.
2008-11-28 11:24:24 +00:00
Sebastian Dröge a926db34ad gst/mxf/: Implement parsing of the random index pack, which provides a seek table (including body sid) to the start o...
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset),
(gst_mxf_demux_handle_random_index_pack),
(gst_mxf_demux_pull_random_index_pack), (gst_mxf_demux_loop):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c: (mxf_random_index_pack_parse):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Implement parsing of the random index pack, which provides a seek
table (including body sid) to the start of partition packs.
Later this will be used for reading all index table segments of
the complete file efficiently.
2008-11-27 16:26:39 +00:00
Sebastian Dröge 9e6654352e gst/mxf/: Add fundamental support for DV-DIF essence streams.
Original commit message from CVS:
* gst/mxf/Makefile.am:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams),
(gst_mxf_demux_handle_klv_packet):
* gst/mxf/mxfdv-dif.c: (mxf_is_dv_dif_essence_track),
(mxf_dv_dif_handle_essence_element), (mxf_dv_dif_create_caps):
* gst/mxf/mxfdv-dif.h:
* gst/mxf/mxfparse.c: (mxf_is_descriptive_metadata):
* gst/mxf/mxfparse.h:
Add fundamental support for DV-DIF essence streams.
Handle descriptive metadata packets as metadata packets.
2008-11-27 10:09:53 +00:00
Sebastian Dröge 1f99f89e59 gst/mxf/mxfdemux.c: Properly combine flow returns of the source pads.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_pad_init),
(gst_mxf_demux_reset_metadata), (gst_mxf_demux_combine_flows),
(gst_mxf_demux_handle_generic_container_essence_element):
Properly combine flow returns of the source pads.
Improve debugging and reset pad fields together with the
metadata to prevent invalid memory references.
* gst/mxf/mxfparse.c: (mxf_metadata_preface_parse):
Fix typo.
2008-11-26 11:30:28 +00:00
Sebastian Dröge 0be1824467 gst/mxf/: When memset'ing the descriptors to zeroes only touch the part of this descriptor, not it's parent type.
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_reset):
* gst/mxf/mxfmpeg.c: (mxf_metadata_mpeg_video_descriptor_reset):
* gst/mxf/mxfparse.c: (mxf_metadata_file_descriptor_handle_tag),
(mxf_metadata_file_descriptor_reset),
(mxf_metadata_generic_sound_essence_descriptor_reset),
(mxf_metadata_generic_picture_essence_descriptor_reset),
(mxf_metadata_cdci_picture_essence_descriptor_reset),
(mxf_metadata_rgba_picture_essence_descriptor_reset),
(mxf_metadata_multiple_descriptor_reset):
* gst/mxf/mxfparse.h:
When memset'ing the descriptors to zeroes only touch the part
of this descriptor, not it's parent type.
Set correct default values for all metadata fields.
2008-11-26 10:37:34 +00:00
Sebastian Dröge 15afef8652 gst/mxf/: Set video dimensions and pixel aspect ratio on the caps.
Original commit message from CVS:
* gst/mxf/mxfmpeg.c: (mxf_mpeg_video_create_caps):
* gst/mxf/mxfparse.c:
(mxf_metadata_generic_picture_essence_descriptor_set_caps):
* gst/mxf/mxfparse.h:
Set video dimensions and pixel aspect ratio on the caps.
2008-11-25 14:49:34 +00:00
Sebastian Dröge 4f365b391e gst/mxf/: Add initial parsing of RGBA descriptors.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_metadata_generic_descriptor),
(gst_mxf_demux_handle_metadata_file_descriptor),
(gst_mxf_demux_handle_metadata_multiple_descriptor),
(gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_mpeg_video_descriptor),
(gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor),
(gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c:
(mxf_metadata_rgba_picture_essence_descriptor_handle_tag),
(mxf_metadata_rgba_picture_essence_descriptor_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Add initial parsing of RGBA descriptors.
Don't initialize descriptor GArray with zeroes.
2008-11-25 10:26:11 +00:00
Sebastian Dröge fb8d2b901d gst/mxf/: Rewrite parsing of descriptors to go top-down instead of bottom-up which makes it possible to have the buff...
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_handle_tag):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_metadata_generic_descriptor),
(gst_mxf_demux_handle_metadata_file_descriptor),
(gst_mxf_demux_handle_metadata_multiple_descriptor),
(gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_mpeg_video_descriptor),
(gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor),
(gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfmpeg.c:
(mxf_metadata_mpeg_video_descriptor_handle_tag):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_partition_pack_parse),
(mxf_primer_pack_parse), (mxf_metadata_preface_parse),
(mxf_metadata_identification_parse),
(mxf_metadata_content_storage_parse),
(mxf_metadata_essence_container_data_parse),
(mxf_metadata_generic_package_parse), (mxf_metadata_track_parse),
(mxf_metadata_sequence_parse),
(mxf_metadata_structural_component_parse),
(mxf_metadata_descriptor_parse),
(mxf_metadata_generic_descriptor_handle_tag),
(mxf_metadata_generic_descriptor_reset),
(mxf_metadata_file_descriptor_handle_tag),
(mxf_metadata_generic_sound_essence_descriptor_handle_tag),
(mxf_metadata_generic_picture_essence_descriptor_handle_tag),
(mxf_metadata_cdci_picture_essence_descriptor_handle_tag),
(mxf_metadata_multiple_descriptor_handle_tag),
(mxf_metadata_locator_parse):
* gst/mxf/mxfparse.h:
Rewrite parsing of descriptors to go top-down instead of bottom-up
which makes it possible to have the buffer data non-writable.
Improve debugging a bit.
2008-11-25 09:38:26 +00:00
Sebastian Dröge fa9ccc1eca gst/mxf/: Allow non-MXF KLV packets and just drop them instead of throwing an error and handle 9 byte product version...
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_pull_klv_packet),
(gst_mxf_demux_handle_klv_packet), (gst_mxf_demux_chain):
* gst/mxf/mxfparse.c: (mxf_product_version_parse),
(mxf_metadata_identification_parse),
(mxf_metadata_content_storage_parse):
Allow non-MXF KLV packets and just drop them instead of throwing
an error and handle 9 byte product versions as written by Avid.
This doesn't add support for the non-standard Avid MXF files
but at least makes it possible to parse their header metadata.
Fix a copy&paste error in debug output.
2008-11-24 10:41:13 +00:00
Sebastian Dröge e1806aa1ad gst/mxf/: Some more format string fixes and usage of guint instead of gint where negative values don't make sense.
Original commit message from CVS:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_push_src_event),
(gst_mxf_demux_handle_header_metadata_update_streams):
* gst/mxf/mxfparse.c: (gst_mxf_ul_hash),
(mxf_partition_pack_parse), (mxf_primer_pack_parse),
(mxf_metadata_preface_parse), (mxf_metadata_content_storage_parse),
(mxf_metadata_generic_package_parse),
(mxf_metadata_sequence_parse),
(mxf_metadata_generic_descriptor_parse),
(mxf_metadata_multiple_descriptor_parse):
Some more format string fixes and usage of guint instead of gint
where negative values don't make sense.
2008-11-22 14:51:06 +00:00
Sebastian Dröge f336a478ba gst/mxf/: Use guint instead of guint64 or gsize for all buffer sizes and use correct format strings for them. Only lo...
Original commit message from CVS:
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_parse):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_pull_range),
(gst_mxf_demux_pull_klv_packet),
(gst_mxf_demux_parse_footer_metadata),
(gst_mxf_demux_handle_klv_packet),
(gst_mxf_demux_pull_and_handle_klv_packet), (gst_mxf_demux_chain):
* gst/mxf/mxfmpeg.c: (mxf_metadata_mpeg_video_descriptor_parse):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_timestamp_parse), (mxf_fraction_parse),
(mxf_utf16_to_utf8), (mxf_product_version_parse),
(mxf_partition_pack_parse), (mxf_primer_pack_parse),
(mxf_local_tag_parse), (mxf_metadata_preface_parse),
(mxf_metadata_identification_parse),
(mxf_metadata_content_storage_parse),
(mxf_metadata_essence_container_data_parse),
(mxf_metadata_generic_package_parse), (mxf_metadata_track_parse),
(mxf_metadata_sequence_parse),
(mxf_metadata_structural_component_parse),
(mxf_metadata_generic_descriptor_parse),
(mxf_metadata_file_descriptor_parse),
(mxf_metadata_generic_sound_essence_descriptor_parse),
(mxf_metadata_generic_picture_essence_descriptor_parse),
(mxf_metadata_cdci_picture_essence_descriptor_parse),
(mxf_metadata_multiple_descriptor_parse),
(mxf_metadata_locator_parse):
* gst/mxf/mxfparse.h:
Use guint instead of guint64 or gsize for all buffer sizes and
use correct format strings for them. Only local tag set sizes
are still guint16 as they can't be larger.
Only allow KLV packets of sizes below 1<<32 as GStreamer only uses
guint for buffer sizes. The MXF standard allows packet sizes up
to 1<<64.
2008-11-22 14:42:08 +00:00
Sebastian Dröge e76ea1ca88 Add first version of an MXF demuxer. Currently it supports
Original commit message from CVS:
* configure.ac:
* gst/mxf/Makefile.am:
* gst/mxf/mxf.c: (plugin_init):
* gst/mxf/mxfaes-bwf.c:
(mxf_metadata_wave_audio_essence_descriptor_parse),
(mxf_metadata_wave_audio_essence_descriptor_reset),
(mxf_is_aes_bwf_essence_track), (mxf_bwf_handle_essence_element),
(mxf_bwf_create_caps), (mxf_aes_bwf_create_caps):
* gst/mxf/mxfaes-bwf.h:
* gst/mxf/mxfdemux.c: (gst_mxf_pad_finalize),
(gst_mxf_pad_class_init), (gst_mxf_pad_init),
(gst_mxf_demux_flush), (gst_mxf_demux_remove_pad),
(gst_mxf_demux_reset_mxf_state), (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_reset), (gst_mxf_demux_pull_range),
(gst_mxf_demux_push_src_event),
(gst_mxf_demux_handle_partition_pack),
(gst_mxf_demux_handle_primer_pack),
(gst_mxf_demux_handle_metadata_preface),
(gst_mxf_demux_handle_metadata_identification),
(gst_mxf_demux_handle_metadata_content_storage),
(gst_mxf_demux_handle_metadata_essence_container_data),
(gst_mxf_demux_handle_metadata_material_package),
(gst_mxf_demux_handle_metadata_source_package),
(gst_mxf_demux_handle_metadata_track),
(gst_mxf_demux_handle_metadata_sequence),
(gst_mxf_demux_handle_metadata_structural_component),
(gst_mxf_demux_handle_metadata_generic_descriptor),
(gst_mxf_demux_handle_metadata_file_descriptor),
(gst_mxf_demux_handle_metadata_multiple_descriptor),
(gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_mpeg_video_descriptor),
(gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor),
(gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor),
(gst_mxf_demux_handle_metadata_locator),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_header_metadata_update_streams),
(gst_mxf_demux_handle_metadata),
(gst_mxf_demux_handle_generic_container_system_item),
(gst_mxf_demux_handle_generic_container_essence_element),
(gst_mxf_demux_handle_random_index_pack),
(gst_mxf_demux_handle_index_table_segment),
(gst_mxf_demux_pull_klv_packet),
(gst_mxf_demux_parse_footer_metadata),
(gst_mxf_demux_handle_klv_packet),
(gst_mxf_demux_pull_and_handle_klv_packet), (gst_mxf_demux_loop),
(gst_mxf_demux_chain), (gst_mxf_demux_src_event),
(gst_mxf_demux_src_query_type), (gst_mxf_demux_src_query),
(gst_mxf_demux_sink_activate), (gst_mxf_demux_sink_activate_push),
(gst_mxf_demux_sink_activate_pull), (gst_mxf_demux_sink_event),
(gst_mxf_demux_change_state), (gst_mxf_demux_finalize),
(gst_mxf_demux_base_init), (gst_mxf_demux_class_init),
(gst_mxf_demux_init):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfmpeg.c: (mxf_metadata_mpeg_video_descriptor_parse),
(mxf_metadata_mpeg_video_descriptor_reset),
(mxf_is_mpeg_video_essence_track),
(mxf_mpeg_video_handle_essence_element),
(mxf_mpeg_video_create_caps):
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfparse.c: (mxf_is_mxf_packet), (mxf_is_partition_pack),
(mxf_is_header_partition_pack), (mxf_is_body_partition_pack),
(mxf_is_footer_partition_pack), (mxf_is_fill),
(mxf_is_primer_pack), (mxf_is_metadata),
(mxf_is_random_index_pack), (mxf_is_index_table_segment),
(mxf_is_generic_container_system_item),
(mxf_is_generic_container_essence_element),
(mxf_is_generic_container_essence_container_label),
(mxf_ul_is_equal), (mxf_ul_is_zero), (mxf_ul_to_string),
(mxf_umid_is_equal), (mxf_umid_is_zero), (mxf_umid_to_string),
(gst_mxf_ul_hash), (gst_mxf_ul_equal), (mxf_timestamp_parse),
(mxf_timestamp_is_unknown), (mxf_timestamp_compare),
(mxf_fraction_parse), (mxf_utf16_to_utf8),
(mxf_product_version_parse), (mxf_partition_pack_parse),
(mxf_partition_pack_reset), (_mxf_mapping_ul_free),
(mxf_primer_pack_parse), (mxf_primer_pack_reset),
(mxf_local_tag_parse), (gst_mxf_local_tag_free),
(gst_metadata_add_custom_tag), (mxf_metadata_preface_parse),
(mxf_metadata_preface_reset), (mxf_metadata_identification_parse),
(mxf_metadata_identification_reset),
(mxf_metadata_content_storage_parse),
(mxf_metadata_content_storage_reset),
(mxf_metadata_essence_container_data_parse),
(mxf_metadata_essence_container_data_reset),
(mxf_metadata_generic_package_parse),
(mxf_metadata_generic_package_reset), (mxf_metadata_track_parse),
(mxf_metadata_track_reset), (mxf_metadata_track_identifier_parse),
(mxf_metadata_sequence_parse), (mxf_metadata_sequence_reset),
(mxf_metadata_structural_component_parse),
(mxf_metadata_structural_component_reset),
(mxf_metadata_generic_descriptor_parse),
(mxf_metadata_generic_descriptor_reset),
(mxf_metadata_file_descriptor_parse),
(mxf_metadata_file_descriptor_reset),
(mxf_metadata_generic_sound_essence_descriptor_parse),
(mxf_metadata_generic_sound_essence_descriptor_reset),
(mxf_metadata_generic_picture_essence_descriptor_parse),
(mxf_metadata_generic_picture_essence_descriptor_reset),
(mxf_metadata_cdci_picture_essence_descriptor_parse),
(mxf_metadata_cdci_picture_essence_descriptor_reset),
(mxf_metadata_multiple_descriptor_parse),
(mxf_metadata_multiple_descriptor_reset),
(mxf_metadata_locator_parse), (mxf_metadata_locator_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Add first version of an MXF demuxer. Currently it supports
MPEG video and raw audio and OP 1a/b/c.
2008-11-21 10:27:15 +00:00