diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp index d4249662c7..0f96ffa123 100644 --- a/modules/demux/mkv/matroska_segment_parse.cpp +++ b/modules/demux/mkv/matroska_segment_parse.cpp @@ -526,6 +526,46 @@ void matroska_segment_c::ParseTrackEntry( KaxTrackEntry *m ) /* FIXME: i_display_* allows you to not only set DAR, but also a zoom factor. we do not support this atm */ } +#if LIBMATROSKA_VERSION >= 0x010406 + E_CASE( KaxVideoProjection, proj ) + { + debug( vars, "Track Video Projection" ) ; + + vars.level += 1; + dispatcher.iterate (proj.begin (), proj.end (), Payload( vars ) ); + vars.level -= 1; + } + E_CASE( KaxVideoProjectionType, fint ) + { + switch (static_cast( fint )) + { + case 0: + vars.tk->fmt.video.projection_mode = PROJECTION_MODE_RECTANGULAR; + break; + case 1: + vars.tk->fmt.video.projection_mode = PROJECTION_MODE_EQUIRECTANGULAR; + break; + case 2: + vars.tk->fmt.video.projection_mode = PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD; + break; + default: + debug( vars, "Track Video Projection %u not supported", static_cast( fint ) ) ; + break; + } + } + E_CASE( KaxVideoProjectionPoseYaw, pose ) + { + vars.tk->fmt.video.pose.f_yaw_degrees = static_cast( pose ); + } + E_CASE( KaxVideoProjectionPosePitch, pose ) + { + vars.tk->fmt.video.pose.f_pitch_degrees = static_cast( pose ); + } + E_CASE( KaxVideoProjectionPoseRoll, pose ) + { + vars.tk->fmt.video.pose.f_roll_degrees = static_cast( pose ); + } +#endif E_CASE( KaxVideoFlagInterlaced, fint ) // UNUSED { debug( vars, "Track Video Interlaced=%u", static_cast( fint ) ) ;