Skip to content

Latest commit

 

History

History
153 lines (128 loc) · 7.82 KB

CHANGELOG.md

File metadata and controls

153 lines (128 loc) · 7.82 KB

Changelog

Unreleased

Changed

  • The pes::StreamType and StreamId types changed from enums to structs. These changes reduce the risk of silent breakage in future releases of this crate, if support for additional StreamType or StreamId values are added.
  • descriptor::iso_639_language::Code::code() no longer takes any arguments, and now returns Cow<'_, str> rather than Result<String, ..> (due to the switch from the encoding crate to the encoding_rs crate).

Fixed

  • Removed the dependency on the unmaintained encoding create and switched to encoding_rs. See RUSTSEC-2021-0153.

0.16.0 - 2024-02-20

Changed

  • Updated to Rust 2021 edition
  • packet::TransportScramblingControl changed from an enum to a struct. New is_scrambled() and scheme() methods on TransportScramblingControl replace the functionality of the old enum variants. The changed type layout slightly improves performance.
  • packet::AdaptationControl changed from an enum to a struct. Its has_payload() method now takes self by reference, and a new has_adaptation_field() method has been added. The changed type layout slightly improves performance.

Added

  • FormatIdentifier is now re-exported from the smptera-format-identifiers-rust crate so that calling code can more easily use the same version of it as the mpeg2ts-reader crate.

0.15.0 - 2021-04-17

Changed

  • Iso639LanguageDescriptor::languages() now produces Result<Language> rather than just Language
  • Since we don't support decryption, scrambled TS packets (packets with values of transport_scrambling_control other than 0) are now dropped, to prevent the application being passed bogus data
  • AdaptationFieldExtension::new() changed to return Result

Fixed

  • Fixed a panic when parsing truncated PMT data
  • Fixed a panic when parsing a truncated descriptor value
  • Fixed a panic when parsing a truncated language code in iso_639_language_descriptor
  • Fixed a panic when reported PES header length does not fit within available space
  • Fixed a panic due to a bug parsing PES header ESCR_base field
  • Fixes a panic when PES_header_data_length is not long enough to accommodate all the headers actually present
  • Fixed so we accept very short but still syntactically valid PSI sections previously rejected in some cases
  • Fixed a panic on TS packet with adaptation_field_extension_flag set, but adaptation_field_extension_length is 0

0.14.0 - 2021-04-11

Changed

  • The pes::ElementaryStreamConsumer type and its methods are now parameterised to gain access to the context object you provided to the demultiplexer. Thanks @fkaa.
  • RegistrationDescriptor::format_identifier() return type changed from u32 to a value of the FormatIdentifier enum from the smptera-format-identifiers-rust crate. Also RegistrationDescriptor fields are no longer public.
  • Pid::new() is now a const function. Other crates can now define Pid constants.
  • Definitions of constants for 'PAT' and 'stuffing' PIDs have been relocated, now that don't have to be in the same module as the Pid type.

Added

  • Implementation of TryFrom<u16> for Pid

0.13.0

Changed

  • The descriptor_enum!{} macro no longer provides a default case (which used to produce Error), so callers which don't define mappings for all possible descriptor tag values (0-255) will now get a compiler error.

Fixed

  • Fixed incorrect value of Timestamp::MAX.

Added

  • Added Timestamp::TIMEBASE constant.

0.12.00

Added

  • AVC_video_descriptor() parsing.
  • maximum_bitrate_descriptor() parsing.
  • Timestamp::likely_wrapped_since() utility for detecting wraparound, and supporting Timestamp::MAX constant.

0.11.0

Added

  • Made mpegts_crc::sum_32() public.
  • Added types to psi module for handling 'compact syntax' sections (mirroring existing types for handling 'section syntax' sections).

0.10.0

Added

  • StreamType::is_pes() util function to identify those StreamType values that the spec expects to carry PES content.

0.9.0

Fixed

  • Made the methods of descriptor::iso_639_language::Language public (they were private by mistake)
  • Drop TS packets that have transport_error_indicator flag set, rather than passing known-bad data to the application.

Added

  • Some more descriptor-tag values in CoreDescriptors (but not the descriptor definitions themselves yet).

Changed

  • Removed the StreamConstructor trait, and merged its previous responsibilities into DemuxContext. This makes it much simpler for client code to gain access to any relevant DemuxContext state when the demuxer requests a handler for a newly discovered stream within the TS.
  • Added a StreamId enum to replace the u8 previously used as the return value for PesHeader::stream_id()
  • Removed single usage of hex-slice crate; resulting Debug impl is not quite so nice, but now there's one less dependency.
  • Avoid calling start_stream() on ElementaryStreamConsumer after parsing errors. It was only intended to be called when the substream was first encountered in the multiplex.

0.8.0

Fixed

  • Avoid panics due to 0-length adaptation_field, larger-than-expected program_info_length and too small section_length. All found through fuzz testing.

Changed

  • All public API members now have at least minimal documentation
  • Removed the demultiplex::UnhandledPid type to try and simplify the API slightly.
  • Removed PesPacketConsumer. The types PesPacketFilter and PesPacketConsumer seem in hindsight to be redundant (the first just being a thin wrapper for the second). PesPacketFilter now implements the complete functionality.
  • Removed PmtSection::program_info_length() and StreamInfo::es_info_length() from public API.
  • Changed PmtSection::pcr_pid() to return a Pid (got missed when others changed from u16 to Pid) in version 0.7.0.

0.7.0

Fixed

  • Removed some unused dependencies

Changed

  • Changed the representation of PID values in the API from plain u16 to a new Pid wrapper, so that the API can't represent invalid PID values.
  • FilterRequest::ByStream changes from tuple to struct variant, and gains program_id of the program to which the stream belongs.
  • All uses of println!() have been replaced with use of warn!() from the log crate.

0.6.0

Fixed

  • PES data is no longer truncated at the end of the TS packet with payload_unit_start_indicator

Changed

  • Many methods previously taking a Packet by value now instead take it by reference. This breaks with the old API, but may deliver a small performance improvement for some workloads.
  • Many objects that previously offered a no-args new() method have had this replaced with a default() impl.
  • The PCR type has been renamed ClockRef, since it's used to represent the values of both Prograem Clock Reference and Elementry Stream Clock Reference fields.
  • descriptor::RegistrationDescriptor became descriptor::registration::RegistrationDescriptor. New descriptor implementations will be added each in their own source file.
  • Moved PAT/PMT types from demultiplex module into psi::pat and psi::pmt modules.
  • Refactored some methods returning custom Iterator types to instead return impl Iterator, so that the actual iterator types can be hidden from the public API
  • pes_packet_length is now represented as enum PesLength, rather than directly as a u16, so that the special status of the length-value 0 can be made explicit (it's now mapped to PesLength::Unbounded)

Added

  • Added iso_639_language_descriptor support