Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:MaxxedSUSE
mpv
mpv_PR12593.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mpv_PR12593.patch of Package mpv
diff --git a/video/filter/vf_vapoursynth.c b/video/filter/vf_vapoursynth.c index 583a196f..786945f0 100644 --- a/video/filter/vf_vapoursynth.c +++ b/video/filter/vf_vapoursynth.c @@ -27,6 +27,7 @@ #include <libavutil/rational.h> #include <libavutil/cpu.h> +#include <libavutil/buffer.h> #include "common/msg.h" #include "filters/f_autoconvert.h" @@ -210,13 +211,16 @@ static void copy_mp_to_vs_frame_props_map(struct priv *p, VSMap *map, } static int set_vs_frame_props(struct priv *p, VSFrameRef *frame, - struct mp_image *img, int dur_num, int dur_den) + struct mp_image *img, int dur_num, int dur_den, int frameno) { VSMap *map = p->vsapi->getFramePropsRW(frame); if (!map) return -1; p->vsapi->propSetInt(map, "_DurationNum", dur_num, 0); p->vsapi->propSetInt(map, "_DurationDen", dur_den, 0); + p->vsapi->propSetInt(map, "__frameno", frameno, 0); + if(img->dovi && img->dovi->size) + p->vsapi->propSetData(map,"_DoVi", img->dovi->data, img->dovi->size, 0); copy_mp_to_vs_frame_props_map(p, map, img); return 0; } @@ -269,12 +273,19 @@ static void VS_CC vs_frame_done(void *userData, const VSFrameRef *f, int n, struct mp_image *res = NULL; if (f) { struct mp_image img = map_vs_frame(p, f, false); - struct mp_image dummy = {.params = p->fmt_in}; - if (p->fmt_in.w != img.w || p->fmt_in.h != img.h) - dummy.params.crop = (struct mp_rect){0, 0, img.w, img.h}; - mp_image_copy_attributes(&img, &dummy); - img.pkt_duration = -1; const VSMap *map = p->vsapi->getFramePropsRO(f); + int err; + int frm = map ? p->vsapi->propGetInt(map, "__frameno", 0, &err) : -1; + int idx = frm - p->in_frameno; + if (err || idx < 0 || idx >= p->num_buffered) { + struct mp_image dummy = {.params = p->fmt_in}; + if (p->fmt_in.w != img.w || p->fmt_in.h != img.h) + dummy.params.crop = (struct mp_rect){0, 0, img.w, img.h}; + mp_image_copy_attributes(&img, &dummy); + } else { + mp_image_copy_attributes(&img, p->buffered[idx]); + } + img.pkt_duration = -1; if (map) { int err1, err2; int num = p->vsapi->propGetInt(map, "_DurationNum", 0, &err1); @@ -493,7 +504,7 @@ static const VSFrameRef *VS_CC infiltGetFrame(int frameno, int activationReason, mp_image_clear(&vsframe, 0, 0, p->fmt_in.w, p->fmt_in.h); struct mp_image dummy = {0}; mp_image_set_params(&dummy, &p->fmt_in); - set_vs_frame_props(p, ret, &dummy, 0, 1); + set_vs_frame_props(p, ret, &dummy, 0, 1, 0); break; } if (frameno < p->in_frameno) { @@ -541,7 +552,7 @@ static const VSFrameRef *VS_CC infiltGetFrame(int frameno, int activationReason, mp_image_copy(&vsframe, img); int res = 1e6; int dur = img->pkt_duration * res + 0.5; - set_vs_frame_props(p, ret, img, dur, res); + set_vs_frame_props(p, ret, img, dur, res, frameno); mp_mutex_lock(&p->lock); break; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor