diff options
Diffstat (limited to 'cmdutils.c')
-rw-r--r-- | cmdutils.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -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 |