vlc | branch: master | Francois Cartegnie <[email protected]> | Fri Apr 17 16:56:12 2020 +0200| [8b0f67e2b7685e66f90782fcd9b7178ff1e59cd6] | committer: Francois Cartegnie
mux: mp4: write sample rate box > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8b0f67e2b7685e66f90782fcd9b7178ff1e59cd6 --- modules/mux/mp4/libmp4mux.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c index 71d04fbd57..a45afb666f 100644 --- a/modules/mux/mp4/libmp4mux.c +++ b/modules/mux/mp4/libmp4mux.c @@ -1104,6 +1104,14 @@ static bo_t *GetUdtaTag(mp4mux_handle_t *muxh) return udta; } +static bo_t *GetSratBox(uint32_t i_sample_rate) +{ + bo_t *srat = box_full_new("srat", 0, 0); + if(srat) + bo_add_32be(srat, i_sample_rate); + return srat; +} + static bo_t *GetSounBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b_mov) { VLC_UNUSED(p_obj); @@ -1114,6 +1122,7 @@ static bo_t *GetSounBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b char fcc[4]; bo_t *specificbox = NULL; uint16_t i_qt_version = 1; + bo_t *srat = NULL; /* codec specific extradata */ const uint8_t *p_extradata = p_track->fmt.p_extra; @@ -1194,8 +1203,18 @@ static bo_t *GetSounBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b else bo_add_16be(soun, -2); bo_add_16be(soun, 0); // packet size (0) - bo_add_16be(soun, p_track->fmt.audio.i_rate); // sampleratehi - bo_add_16be(soun, 0); // sampleratelo + + if(!b_mov && i_qt_version > 0 && + p_track->fmt.audio.i_rate >= (1<<16)) + { + bo_add_32be(soun, 1<<16); + srat = GetSratBox(p_track->fmt.audio.i_rate); + } + else + { + bo_add_16be(soun, p_track->fmt.audio.i_rate); // sampleratehi + bo_add_16be(soun, 0); // sampleratelo + } /* Extended data for SoundDescription V1 */ if (i_qt_version == 1) @@ -1215,6 +1234,8 @@ static bo_t *GetSounBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b if (b_descr) box_gather(soun, GetESDS(p_track)); + box_gather(soun, srat); + return soun; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
