From 4351c288b9841d02a55e7b836796d7da6d19cac8 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 3 May 2015 23:49:16 +0200 Subject: [PATCH] ffplay&cmdutils:Factor get_rotation() code out Signed-off-by: Michael Niedermayer --- cmdutils.c | 23 +++++++++++++++++++++++ cmdutils.h | 2 ++ ffplay.c | 17 +---------------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/cmdutils.c b/cmdutils.c index 5a18cd5653..d5a2cbea6b 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -41,6 +41,7 @@ #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/bprint.h" +#include "libavutil/display.h" #include "libavutil/mathematics.h" #include "libavutil/imgutils.h" #include "libavutil/parseutils.h" @@ -2229,4 +2230,26 @@ int show_sinks(void *optctx, const char *opt, const char *arg) av_log_set_level(error_level); return ret; } + +double get_rotation(AVStream *st) +{ + AVDictionaryEntry *rotate_tag = av_dict_get(st->metadata, "rotate", NULL, 0); + uint8_t* displaymatrix = av_stream_get_side_data(st, + AV_PKT_DATA_DISPLAYMATRIX, NULL); + double theta = 0; + + if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { + char *tail; + theta = av_strtod(rotate_tag->value, &tail); + if (*tail) + theta = 0; + } + if (displaymatrix && !theta) + theta = av_display_rotation_get((int32_t*) displaymatrix); + + theta -= 360*floor(theta/360 + 0.9/360); + + return theta; +} + #endif diff --git a/cmdutils.h b/cmdutils.h index f6ad44ca40..a21ce35fa8 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -597,4 +597,6 @@ void *grow_array(void *array, int elem_size, int *size, int new_size); char name[128];\ av_get_channel_layout_string(name, sizeof(name), 0, ch_layout); +double get_rotation(AVStream *st); + #endif /* CMDUTILS_H */ diff --git a/ffplay.c b/ffplay.c index eea00e6e14..9ce13d71fb 100644 --- a/ffplay.c +++ b/ffplay.c @@ -32,7 +32,6 @@ #include "libavutil/avstring.h" #include "libavutil/colorspace.h" -#include "libavutil/display.h" #include "libavutil/eval.h" #include "libavutil/mathematics.h" #include "libavutil/pixdesc.h" @@ -2018,21 +2017,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c INSERT_FILT("crop", "floor(in_w/2)*2:floor(in_h/2)*2"); 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); - double theta = 0; - - if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { - char *tail; - theta = av_strtod(rotate_tag->value, &tail); - if (*tail) - theta = 0; - } - if (displaymatrix && !theta) - theta = av_display_rotation_get((int32_t*) displaymatrix); - - theta -= 360*floor(theta/360 + 0.9/360); + double theta = get_rotation(is->video_st); if (fabs(theta - 90) < 1.0) { INSERT_FILT("transpose", "clock");