[vlc-commits] mux: mp4: refactor and fix tkhd visible values
Francois Cartegnie
git at videolan.org
Fri May 3 13:54:15 CEST 2019
vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri May 3 11:14:26 2019 +0200| [e3d83479c60d6b6c9574e9d0277b80bbba801646] | committer: Francois Cartegnie
mux: mp4: refactor and fix tkhd visible values
(cherry picked from commit 33ad85ac64195b98c38123a3e18e702799bc1b2c)
> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=e3d83479c60d6b6c9574e9d0277b80bbba801646
---
modules/mux/mp4/libmp4mux.c | 48 ++++++++++++++++++++++-----------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c
index 95d3aef270..816826bf46 100644
--- a/modules/mux/mp4/libmp4mux.c
+++ b/modules/mux/mp4/libmp4mux.c
@@ -1289,6 +1289,16 @@ static bo_t *GetStblBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b
return stbl;
}
+static unsigned ApplyARtoWidth(const video_format_t *vfmt)
+{
+ if (vfmt->i_sar_num > 0 && vfmt->i_sar_den > 0)
+ {
+ return (int64_t)vfmt->i_sar_num *
+ (int64_t)vfmt->i_visible_width / vfmt->i_sar_den;
+ }
+ else return vfmt->i_visible_width;
+}
+
bo_t * mp4mux_GetMoovBox(vlc_object_t *p_obj, mp4mux_trackinfo_t **pp_tracks, unsigned int i_tracks,
int64_t i_movie_duration,
bool b_fragmented, bool b_mov, bool b_64_ext, bool b_stco64 )
@@ -1423,34 +1433,24 @@ bo_t * mp4mux_GetMoovBox(vlc_object_t *p_obj, mp4mux_trackinfo_t **pp_tracks, un
bo_add_32be(tkhd, 0); // width (presentation)
bo_add_32be(tkhd, 0); // height(presentation)
} else if (p_stream->fmt.i_cat == VIDEO_ES) {
- int i_width = p_stream->fmt.video.i_width << 16;
- if (p_stream->fmt.video.i_sar_num > 0 && p_stream->fmt.video.i_sar_den > 0) {
- i_width = (int64_t)p_stream->fmt.video.i_sar_num *
- ((int64_t)p_stream->fmt.video.i_width << 16) /
- p_stream->fmt.video.i_sar_den;
- }
// width (presentation)
- bo_add_32be(tkhd, i_width);
+ bo_add_32be(tkhd, ApplyARtoWidth(&p_stream->fmt.video) << 16);
// height(presentation)
- bo_add_32be(tkhd, p_stream->fmt.video.i_height << 16);
+ bo_add_32be(tkhd, p_stream->fmt.video.i_visible_height << 16);
} else {
- int i_width = 320 << 16;
- int i_height = 200;
- for (unsigned int i = 0; i < i_tracks; i++) {
- mp4mux_trackinfo_t *tk = pp_tracks[i];
- if (tk->fmt.i_cat == VIDEO_ES) {
- if (tk->fmt.video.i_sar_num > 0 &&
- tk->fmt.video.i_sar_den > 0)
- i_width = (int64_t)tk->fmt.video.i_sar_num *
- ((int64_t)tk->fmt.video.i_width << 16) /
- tk->fmt.video.i_sar_den;
- else
- i_width = tk->fmt.video.i_width << 16;
- i_height = tk->fmt.video.i_height;
- break;
- }
+ unsigned i_width = 320;
+ unsigned i_height = 200;
+ /* Find video track for SPU representation */
+ for (unsigned int i = 0; i < i_tracks; i++)
+ {
+ const mp4mux_trackinfo_t *tk = pp_tracks[i];
+ if (tk->fmt.i_cat != VIDEO_ES)
+ continue;
+ i_width = ApplyARtoWidth(&tk->fmt.video);
+ i_height = tk->fmt.video.i_visible_height;
+ break;
}
- bo_add_32be(tkhd, i_width); // width (presentation)
+ bo_add_32be(tkhd, i_width << 16); // width (presentation)
bo_add_32be(tkhd, i_height << 16); // height(presentation)
}
More information about the vlc-commits
mailing list