Module: MP4::Metadata::Memoize::Stbl::Codec
- Defined in:
- lib/mp4/metadata/memoize/stbl/codec.rb
Class Method Summary collapse
- .avc1(avc1_data) ⇒ Object
- .extract_codec(codec) ⇒ Object
- .hev1(hev1_data) ⇒ Object
- .memoize_codecs(codecs) ⇒ Object
- .mp4a(mp4a_data) ⇒ Object
- .parse(stsd_cache) ⇒ Object
Class Method Details
.avc1(avc1_data) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/mp4/metadata/memoize/stbl/codec.rb', line 33 def avc1(avc1_data) avc_profile_indication = avc1_data.avcC.avc_profile_indication profile_compatibility = avc1_data.avcC.profile_compatibility avc_level_indication = avc1_data.avcC.avc_level_indication { par: calculate_aspect_ratio(avc1_data.width.to_i, avc1_data.height.to_i), sar: "#{avc1_data.pasp.h_spacing}:#{avc1_data.pasp.v_spacing}", codec: format("avc1.%02X%02X%02X", avc_profile_indication, profile_compatibility, avc_level_indication).downcase, max_bitrate: avc1_data.bitrate.max_bitrate.to_i, avg_bitrate: avc1_data.bitrate.avg_bitrate.to_i, } end |
.extract_codec(codec) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/mp4/metadata/memoize/stbl/codec.rb', line 17 def extract_codec(codec) case codec.codec_type when 'avc1' avc1_data = MP4::Binary::Avc1.read(codec.content) avc1(avc1_data) when 'mp4a' mp4a_data = MP4::Binary::Mp4a.read(codec.content) mp4a(mp4a_data) when 'hev1' hev1_data = MP4::Binary::Hev1.read(codec.content) hev1(hev1_data) else raise NotImplementedError, "Unable to memoize `#{codec.codec_type}' codec, track #{track_id}" end end |
.hev1(hev1_data) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/mp4/metadata/memoize/stbl/codec.rb', line 61 def hev1(hev1_data) { par: calculate_aspect_ratio(hev1_data[:width].to_i, hev1_data[:height].to_i), sar: "#{hev1_data[:pasp].h_spacing}:#{hev1_data[:pasp].v_spacing}", codec: 'hev1', max_bitrate: hev1_data[:bitrate].max_bitrate.to_i, avg_bitrate: hev1_data[:bitrate].avg_bitrate.to_i, } end |
.memoize_codecs(codecs) ⇒ Object
13 14 15 |
# File 'lib/mp4/metadata/memoize/stbl/codec.rb', line 13 def memoize_codecs(codecs) codecs.map { extract_codec(_1) } end |
.mp4a(mp4a_data) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mp4/metadata/memoize/stbl/codec.rb', line 47 def mp4a(mp4a_data) object_type_indication = mp4a_data.esds.es_descriptor.dec_config_desc.object_type_indication audio_object_type_byte = mp4a_data.esds.es_descriptor.dec_config_desc.dec_specific_info.info.bytes[0] audio_object_type = (audio_object_type_byte >> 3) & 0x1F { codec: format("mp4a.%02x.%d", object_type_indication, audio_object_type), channel_count: mp4a_data.channel_count, sample_rate: (mp4a_data.sample_rate >> 16).to_i, max_bitrate: mp4a_data.esds.es_descriptor.dec_config_desc.max_bitrate.to_i, avg_bitrate: mp4a_data.esds.es_descriptor.dec_config_desc.avg_bitrate.to_i, } end |