summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-09-20 15:40:44 +0200
committerwm4 <wm4@nowhere>2016-09-20 15:44:26 +0200
commit89674854ceaae9c0a9d8f24b9a24fb2f24df6bb1 (patch)
tree62b82f937c1ff0d08f788ab26920f3ae10995aba
parent23639e5b0ea5d4af50a2d5aedef11cd240e2390c (diff)
downloadmpv-89674854ceaae9c0a9d8f24b9a24fb2f24df6bb1.tar.bz2
mpv-89674854ceaae9c0a9d8f24b9a24fb2f24df6bb1.tar.xz
command: add a video-dec-params property
This is the actual decoder output, with no overrides applied. (Maybe video-params shouldn't contain the overrides in the first place, but damage done.)
-rw-r--r--DOCS/man/input.rst3
-rw-r--r--player/command.c17
-rw-r--r--video/decode/dec_video.c6
-rw-r--r--video/decode/dec_video.h3
4 files changed, 27 insertions, 2 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 92cdad77c0..50832ccd30 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -1438,6 +1438,9 @@ Property list
These have the same values as ``video-out-params/dw`` and
``video-out-params/dh``.
+``video-dec-params``
+ Exactly like ``video-params``, but no overrides applied.
+
``video-out-params``
Same as ``video-params``, but after video filters have been applied. If
there are no video filters in use, this will contain the same values as
diff --git a/player/command.c b/player/command.c
index faa167228b..0d2847d4b4 100644
--- a/player/command.c
+++ b/player/command.c
@@ -2615,6 +2615,19 @@ static int mp_property_vo_imgparams(void *ctx, struct m_property *prop,
return property_imgparams(get_video_out_params(ctx), action, arg);
}
+static int mp_property_dec_imgparams(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ struct mp_image_params p = {0};
+ struct vo_chain *vo_c = mpctx->vo_chain;
+ if (vo_c && vo_c->video_src)
+ video_get_dec_params(vo_c->video_src, &p);
+ if (!p.imgfmt)
+ return M_PROPERTY_UNAVAILABLE;
+ return property_imgparams(p, action, arg);
+}
+
static int mp_property_vd_imgparams(void *ctx, struct m_property *prop,
int action, void *arg)
{
@@ -3855,6 +3868,7 @@ static const struct m_property mp_properties_base[] = {
{"video-output-levels", mp_property_video_color,
.priv = (void *)"output-levels"},
{"video-out-params", mp_property_vo_imgparams},
+ {"video-dec-params", mp_property_dec_imgparams},
{"video-params", mp_property_vd_imgparams},
{"video-format", mp_property_video_format},
{"video-frame-info", mp_property_video_frame_info},
@@ -3992,7 +4006,8 @@ static const char *const *const mp_event_property_change[] = {
"video-format", "video-codec", "video-bitrate", "dwidth", "dheight",
"width", "height", "fps", "aspect", "vo-configured", "current-vo",
"detected-hwdec", "colormatrix", "colormatrix-input-range",
- "colormatrix-output-range", "colormatrix-primaries", "video-aspect"),
+ "colormatrix-output-range", "colormatrix-primaries", "video-aspect",
+ "video-dec-params"),
E(MPV_EVENT_AUDIO_RECONFIG, "audio-format", "audio-codec", "audio-bitrate",
"samplerate", "channels", "audio", "volume", "mute", "balance",
"current-ao", "audio-codec-name", "audio-params",
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index 02fa334e2b..7e144a72bc 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -192,6 +192,7 @@ static void fix_image_params(struct dec_video *d_video,
struct mp_codec_params *c = d_video->codec;
MP_VERBOSE(d_video, "Decoder format: %s\n", mp_image_params_to_str(params));
+ d_video->dec_format = *params;
// While mp_image_params normally always have to have d_w/d_h set, the
// decoder signals unknown bitstream aspect ratio with both set to 0.
@@ -353,6 +354,11 @@ void video_reset_params(struct dec_video *d_video)
d_video->last_format = (struct mp_image_params){0};
}
+void video_get_dec_params(struct dec_video *d_video, struct mp_image_params *p)
+{
+ *p = d_video->dec_format;
+}
+
void video_set_framedrop(struct dec_video *d_video, bool enabled)
{
d_video->framedrop_enabled = enabled;
diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h
index be82e4679a..f7bff61c9f 100644
--- a/video/decode/dec_video.h
+++ b/video/decode/dec_video.h
@@ -65,7 +65,7 @@ struct dec_video {
// Final PTS of previously decoded image
double decoded_pts;
- struct mp_image_params last_format, fixed_format;
+ struct mp_image_params dec_format, last_format, fixed_format;
float initial_decoder_aspect;
double start_pts;
@@ -92,5 +92,6 @@ void video_set_start(struct dec_video *d_video, double start_pts);
int video_vd_control(struct dec_video *d_video, int cmd, void *arg);
void video_reset(struct dec_video *d_video);
void video_reset_params(struct dec_video *d_video);
+void video_get_dec_params(struct dec_video *d_video, struct mp_image_params *p);
#endif /* MPLAYER_DEC_VIDEO_H */