mirror of https://git.ffmpeg.org/ffmpeg.git
ffplay&cmdutils:Factor get_rotation() code out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
a6b630e9b6
commit
4351c288b9
23
cmdutils.c
23
cmdutils.c
|
@ -41,6 +41,7 @@
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/bprint.h"
|
#include "libavutil/bprint.h"
|
||||||
|
#include "libavutil/display.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
#include "libavutil/parseutils.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);
|
av_log_set_level(error_level);
|
||||||
return ret;
|
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
|
#endif
|
||||||
|
|
|
@ -597,4 +597,6 @@ void *grow_array(void *array, int elem_size, int *size, int new_size);
|
||||||
char name[128];\
|
char name[128];\
|
||||||
av_get_channel_layout_string(name, sizeof(name), 0, ch_layout);
|
av_get_channel_layout_string(name, sizeof(name), 0, ch_layout);
|
||||||
|
|
||||||
|
double get_rotation(AVStream *st);
|
||||||
|
|
||||||
#endif /* CMDUTILS_H */
|
#endif /* CMDUTILS_H */
|
||||||
|
|
17
ffplay.c
17
ffplay.c
|
@ -32,7 +32,6 @@
|
||||||
|
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/colorspace.h"
|
#include "libavutil/colorspace.h"
|
||||||
#include "libavutil/display.h"
|
|
||||||
#include "libavutil/eval.h"
|
#include "libavutil/eval.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "libavutil/pixdesc.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");
|
INSERT_FILT("crop", "floor(in_w/2)*2:floor(in_h/2)*2");
|
||||||
|
|
||||||
if (autorotate) {
|
if (autorotate) {
|
||||||
AVDictionaryEntry *rotate_tag = av_dict_get(is->video_st->metadata, "rotate", NULL, 0);
|
double theta = get_rotation(is->video_st);
|
||||||
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);
|
|
||||||
|
|
||||||
if (fabs(theta - 90) < 1.0) {
|
if (fabs(theta - 90) < 1.0) {
|
||||||
INSERT_FILT("transpose", "clock");
|
INSERT_FILT("transpose", "clock");
|
||||||
|
|
Loading…
Reference in New Issue