@ -32,6 +32,7 @@
# include "libavutil/avstring.h"
# include "libavutil/colorspace.h"
# include "libavutil/display.h"
# include "libavutil/mathematics.h"
# include "libavutil/pixdesc.h"
# include "libavutil/imgutils.h"
@ -2017,6 +2018,9 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
if ( autorotate ) {
AVDictionaryEntry * rotate_tag = av_dict_get ( is - > video_st - > metadata , " rotate " , NULL , 0 ) ;
uint8_t * displaymatrix = av_stream_get_side_data ( is - > video_st ,
AV_PKT_DATA_DISPLAYMATRIX , NULL ) ;
if ( rotate_tag & & * rotate_tag - > value & & strcmp ( rotate_tag - > value , " 0 " ) ) {
if ( ! strcmp ( rotate_tag - > value , " 90 " ) ) {
INSERT_FILT ( " transpose " , " clock " ) ;
@ -2030,6 +2034,16 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
snprintf ( rotate_buf , sizeof ( rotate_buf ) , " %s*PI/180 " , rotate_tag - > value ) ;
INSERT_FILT ( " rotate " , rotate_buf ) ;
}
} else if ( displaymatrix ) {
double rot = av_display_rotation_get ( ( int32_t * ) displaymatrix ) ;
if ( rot < - 135 | | rot > 135 ) {
INSERT_FILT ( " vflip " , NULL ) ;
INSERT_FILT ( " hflip " , NULL ) ;
} else if ( rot < - 45 ) {
INSERT_FILT ( " transpose " , " dir=clock " ) ;
} else if ( rot > 45 ) {
INSERT_FILT ( " transpose " , " dir=cclock " ) ;
}
}
}