summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mpvcore/player/command.c6
-rw-r--r--mpvcore/player/sub.c7
-rw-r--r--mpvcore/player/video.c7
-rw-r--r--video/decode/dec_video.c4
-rw-r--r--video/decode/dec_video.h4
-rw-r--r--video/decode/vd_lavc.c4
6 files changed, 14 insertions, 18 deletions
diff --git a/mpvcore/player/command.c b/mpvcore/player/command.c
index c09a046cd2..d3d99c4b02 100644
--- a/mpvcore/player/command.c
+++ b/mpvcore/player/command.c
@@ -1439,7 +1439,7 @@ static int mp_property_width(m_option_t *prop, int action, void *arg,
return M_PROPERTY_UNAVAILABLE;
struct sh_video *sh = vd->header->video;
return m_property_int_ro(prop, action, arg,
- vd->vf_input ? vd->vf_input->w : sh->disp_w);
+ vd->vf_input.w ? vd->vf_input.w : sh->disp_w);
}
/// Video display height (RO)
@@ -1451,7 +1451,7 @@ static int mp_property_height(m_option_t *prop, int action, void *arg,
return M_PROPERTY_UNAVAILABLE;
struct sh_video *sh = vd->header->video;
return m_property_int_ro(prop, action, arg,
- vd->vf_input ? vd->vf_input->h : sh->disp_h);
+ vd->vf_input.h ? vd->vf_input.h : sh->disp_h);
}
static int property_vo_wh(m_option_t *prop, int action, void *arg,
@@ -1554,7 +1554,7 @@ static int mp_property_aspect(m_option_t *prop, int action, void *arg,
}
case M_PROPERTY_GET: {
float aspect = -1;
- struct mp_image_params *params = d_video->vf_input;
+ struct mp_image_params *params = &d_video->vf_input;
if (params && params->d_w && params->d_h) {
aspect = (float)params->d_w / params->d_h;
} else if (sh_video->disp_w && sh_video->disp_h) {
diff --git a/mpvcore/player/sub.c b/mpvcore/player/sub.c
index bdcb9def09..2c6ec1dfc5 100644
--- a/mpvcore/player/sub.c
+++ b/mpvcore/player/sub.c
@@ -83,9 +83,10 @@ void update_subtitles(struct MPContext *mpctx)
struct dec_sub *dec_sub = mpctx->d_sub;
assert(track && dec_sub);
- if (mpctx->d_video && mpctx->d_video->vf_input) {
- struct mp_image_params params = *mpctx->d_video->vf_input;
- sub_control(dec_sub, SD_CTRL_SET_VIDEO_PARAMS, &params);
+ if (mpctx->d_video) {
+ struct mp_image_params params = mpctx->d_video->vf_input;
+ if (params.imgfmt)
+ sub_control(dec_sub, SD_CTRL_SET_VIDEO_PARAMS, &params);
}
mpctx->osd->video_offset = track->under_timeline ? mpctx->video_offset : 0;
diff --git a/mpvcore/player/video.c b/mpvcore/player/video.c
index dea00585c4..0c0199dd7d 100644
--- a/mpvcore/player/video.c
+++ b/mpvcore/player/video.c
@@ -131,10 +131,7 @@ int reinit_video_chain(struct MPContext *mpctx)
d_video->header = sh;
mpctx->initialized_flags |= INITIALIZED_VCODEC;
- // dynamic allocation only to make stheader.h lighter
- talloc_free(d_video->hwdec_info);
- d_video->hwdec_info = talloc_zero(d_video, struct mp_hwdec_info);
- vo_control(mpctx->video_out, VOCTRL_GET_HWDEC_INFO, d_video->hwdec_info);
+ vo_control(mpctx->video_out, VOCTRL_GET_HWDEC_INFO, &d_video->hwdec_info);
if (stream_control(sh->demuxer->stream, STREAM_CTRL_GET_ASPECT_RATIO, &ar)
!= STREAM_UNSUPPORTED)
@@ -236,7 +233,7 @@ static void filter_video(struct MPContext *mpctx, struct mp_image *frame)
init_filter_params(mpctx);
frame->pts = d_video->pts;
- mp_image_set_params(frame, d_video->vf_input);
+ mp_image_set_params(frame, &d_video->vf_input); // force csp/aspect overrides
vf_filter_frame(d_video->vfilter, frame);
filter_output_queued_frame(mpctx);
}
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index f8441f005d..1b461a619a 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -385,9 +385,7 @@ int mpcodecs_reconfig_vo(struct dec_video *d_video,
d_video->vf_initialized = 1;
- if (!d_video->vf_input)
- d_video->vf_input = talloc(sh, struct mp_image_params);
- *d_video->vf_input = p;
+ d_video->vf_input = p;
if (opts->gamma_gamma != 1000)
video_set_colors(d_video, "gamma", opts->gamma_gamma);
diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h
index c9601efb7b..ebb2624037 100644
--- a/video/decode/dec_video.h
+++ b/video/decode/dec_video.h
@@ -34,8 +34,8 @@ struct dec_video {
const struct vd_functions *vd_driver;
int vf_initialized; // -1 failed, 0 not done, 1 done
long vf_reconfig_count; // incremented each mpcodecs_reconfig_vo() call
- struct mp_image_params *vf_input; // video filter input params
- struct mp_hwdec_info *hwdec_info; // video output hwdec handles
+ struct mp_image_params vf_input; // video filter input params
+ struct mp_hwdec_info hwdec_info; // video output hwdec handles
struct sh_stream *header;
char *decoder_desc;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 37c94fa881..332de553a6 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -224,7 +224,7 @@ static bool probe_hwdec(struct dec_video *vd, bool autoprobe, enum hwdec_type ap
return false;
}
const char *hw_decoder = NULL;
- int r = hwdec_probe(hwdec, vd->hwdec_info, decoder, &hw_decoder);
+ int r = hwdec_probe(hwdec, &vd->hwdec_info, decoder, &hw_decoder);
if (r >= 0) {
*use_hwdec = hwdec;
*use_decoder = hw_decoder;
@@ -380,7 +380,7 @@ static void init_avctx(struct dec_video *vd, const char *decoder,
if (!lavc_codec)
return;
- ctx->hwdec_info = vd->hwdec_info;
+ ctx->hwdec_info = &vd->hwdec_info;
ctx->do_dr1 = ctx->do_hw_dr1 = 0;
ctx->pix_fmt = PIX_FMT_NONE;