mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
avplay: Add support for rotated video
This is enabled by default, but can be disbled via the -noautorotate option. Based on a patch by Clément Bœsch. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
21180b7323
commit
e2d50fc2f5
19
avplay.c
19
avplay.c
@ -27,6 +27,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"
|
||||
@ -265,6 +266,7 @@ static int rdftspeed = 20;
|
||||
#if CONFIG_AVFILTER
|
||||
static char *vfilters = NULL;
|
||||
#endif
|
||||
static int autorotate = 1;
|
||||
|
||||
/* current context */
|
||||
static int is_full_screen;
|
||||
@ -1548,6 +1550,22 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
|
||||
|
||||
INSERT_FILT("format", "yuv420p");
|
||||
|
||||
if (autorotate) {
|
||||
uint8_t* displaymatrix = av_stream_get_side_data(is->video_st,
|
||||
AV_PKT_DATA_DISPLAYMATRIX, NULL);
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (vfilters) {
|
||||
AVFilterInOut *outputs = avfilter_inout_alloc();
|
||||
AVFilterInOut *inputs = avfilter_inout_alloc();
|
||||
@ -2928,6 +2946,7 @@ static const OptionDef options[] = {
|
||||
{ "rdftspeed", OPT_INT | HAS_ARG| OPT_AUDIO | OPT_EXPERT, { &rdftspeed }, "rdft speed", "msecs" },
|
||||
{ "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, { opt_default }, "generic catch all option", "" },
|
||||
{ "i", 0, { NULL }, "avconv compatibility dummy option", ""},
|
||||
{ "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" },
|
||||
{ NULL, },
|
||||
};
|
||||
|
||||
|
2
configure
vendored
2
configure
vendored
@ -2233,7 +2233,7 @@ avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_fi
|
||||
setpts_filter trim_filter"
|
||||
avplay_deps="avcodec avformat avresample swscale sdl"
|
||||
avplay_libs='$sdl_libs'
|
||||
avplay_select="rdft"
|
||||
avplay_select="rdft transpose_filter hflip_filter vflip_filter"
|
||||
avprobe_deps="avcodec avformat"
|
||||
|
||||
# documentation
|
||||
|
@ -115,6 +115,8 @@ Do not exit after playback is finished.
|
||||
Exit if any key is pressed.
|
||||
@item -exitonmousedown
|
||||
Exit if any mouse button is pressed.
|
||||
@item -noautorotate
|
||||
Disable automatically rotating video based on file metadata.
|
||||
@end table
|
||||
|
||||
@section While playing
|
||||
|
Loading…
Reference in New Issue
Block a user