diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-03-10 03:18:42 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-03-10 03:18:42 +0200 |
commit | 0269d22d32fb380e7128ca0c60f6f1638c6dab70 (patch) | |
tree | 53ba64153d9ef930f73458138478a6d0def381ce /libmpcodecs | |
parent | 240550bbb94653907faa6e0bb1c5ac3d279cc252 (diff) | |
parent | 97ef28ad9aa2f34aea0779062976ad4294c0af51 (diff) |
Merge svn changes up to r30876
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/vd_qtvideo.c | 12 | ||||
-rw-r--r-- | libmpcodecs/ve_qtvideo.c | 2 | ||||
-rw-r--r-- | libmpcodecs/vf.c | 2 | ||||
-rw-r--r-- | libmpcodecs/vf_fixpts.c | 137 |
4 files changed, 146 insertions, 7 deletions
diff --git a/libmpcodecs/vd_qtvideo.c b/libmpcodecs/vd_qtvideo.c index 8e73c84753..aeead624e0 100644 --- a/libmpcodecs/vd_qtvideo.c +++ b/libmpcodecs/vd_qtvideo.c @@ -90,7 +90,7 @@ static OSErr (*QTNewGWorldFromPtr)(GWorldPtr *gw, GWorldFlags flags, void *baseAddr, long rowBytes); -static OSErr (*NewHandleClear)(Size byteCount); +static Handle (*NewHandleClear)(Size byteCount); #endif /* #ifndef CONFIG_QUICKTIME */ // to set/get/query special features/parameters @@ -103,7 +103,7 @@ static int codec_initialized=0; // init driver static int init(sh_video_t *sh){ #ifndef CONFIG_QUICKTIME - long result = 1; + OSErr result = 1; #endif ComponentResult cres; ComponentDescription desc; @@ -156,7 +156,7 @@ static int init(sh_video_t *sh){ result=InitializeQTML(6+16); // result=InitializeQTML(0); - mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"InitializeQTML returned %li\n",result); + mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"InitializeQTML returned %d\n",result); // result=EnterMovies(); // printf("EnterMovies->%d\n",result); #endif /* CONFIG_QUICKTIME */ @@ -305,7 +305,7 @@ static void uninit(sh_video_t *sh){ // decode a frame static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ - long result = 1; + OSErr result = 1; int i; mp_image_t* mpi; ComponentResult cres; @@ -335,7 +335,7 @@ if(!codec_initialized){ 0, mpi->planes[0], mpi->stride[0]); - mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"NewGWorldFromPtr returned:%ld\n",65536-(result&0xffff)); + mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"NewGWorldFromPtr returned:%d\n",result); // if (65536-(result&0xFFFF) != 10000) // return NULL; @@ -406,7 +406,7 @@ if(!codec_initialized){ ++decpar.frameNumber; - if(cres&0xFFFF){ + if(cres) { mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"ImageCodecBandDecompress cres=0x%X (-0x%X) %d\n",cres,-cres,cres); return NULL; } diff --git a/libmpcodecs/ve_qtvideo.c b/libmpcodecs/ve_qtvideo.c index 92b76fb252..f3bba153e4 100644 --- a/libmpcodecs/ve_qtvideo.c +++ b/libmpcodecs/ve_qtvideo.c @@ -69,7 +69,7 @@ static OSErr (*QTNewGWorldFromPtr)(GWorldPtr *gw, GWorldFlags flags, void *baseAddr, long rowBytes); -static OSErr (*NewHandleClear)(Size byteCount); +static Handle (*NewHandleClear)(Size byteCount); static OSErr (*CompressSequenceBegin) ( ImageSequence *seqID, PixMapHandle src, diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c index fa72ad25aa..cc0d01c55e 100644 --- a/libmpcodecs/vf.c +++ b/libmpcodecs/vf.c @@ -118,6 +118,7 @@ extern const vf_info_t vf_info_yadif; extern const vf_info_t vf_info_blackframe; extern const vf_info_t vf_info_geq; extern const vf_info_t vf_info_ow; +extern const vf_info_t vf_info_fixpts; // list of available filters: static const vf_info_t* const filter_list[]={ @@ -219,6 +220,7 @@ static const vf_info_t* const filter_list[]={ &vf_info_yadif, &vf_info_blackframe, &vf_info_ow, + &vf_info_fixpts, NULL }; diff --git a/libmpcodecs/vf_fixpts.c b/libmpcodecs/vf_fixpts.c new file mode 100644 index 0000000000..5ceb516c6b --- /dev/null +++ b/libmpcodecs/vf_fixpts.c @@ -0,0 +1,137 @@ +/* + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <inttypes.h> + +#include "config.h" +#include "mp_msg.h" +#include "help_mp.h" + +#include "img_format.h" +#include "mp_image.h" +#include "vf.h" + +struct vf_priv_s { + double current; + double step; + int autostart; + int autostep; + unsigned have_step:1; + unsigned print:1; +}; + +static int put_image(vf_instance_t *vf, mp_image_t *src, double pts) +{ + struct vf_priv_s *p = vf->priv; + + if (p->print) { + if (pts == MP_NOPTS_VALUE) + mp_msg(MSGT_VFILTER, MSGL_INFO, "PTS: undef\n"); + else + mp_msg(MSGT_VFILTER, MSGL_INFO, "PTS: %f\n", pts); + } + if (pts != MP_NOPTS_VALUE && p->autostart != 0) { + p->current = pts; + if (p->autostart > 0) + p->autostart--; + } else if (pts != MP_NOPTS_VALUE && p->autostep > 0) { + p->step = pts - p->current; + p->current = pts; + p->autostep--; + p->have_step = 1; + } else if (p->have_step) { + p->current += p->step; + pts = p->current; + } else { + pts = MP_NOPTS_VALUE; + } + return vf_next_put_image(vf, src, pts); +} + +static void uninit(vf_instance_t *vf) +{ + free(vf->priv); +} + +static int parse_args(struct vf_priv_s *p, const char *args) +{ + int pos; + double num, denom = 1; + int iarg; + + while (*args != 0) { + pos = 0; + if (sscanf(args, "print%n", &pos) == 0 && pos > 0) { + p->print = 1; + } else if (sscanf(args, "fps=%lf%n/%lf%n", &num, &pos, &denom, &pos) >= + 1 && pos > 0) { + p->step = denom / num; + p->have_step = 1; + } else if (sscanf(args, "start=%lf%n", &num, &pos) >= 1 && pos > 0) { + p->current = num; + } else if (sscanf(args, "autostart=%d%n", &iarg, &pos) == 1 && pos > 0) { + p->autostart = iarg; + } else if (sscanf(args, "autofps=%d%n", &iarg, &pos) == 1 && pos > 0) { + p->autostep = iarg; + } else { + mp_msg(MSGT_VFILTER, MSGL_FATAL, + "fixpts: unknown suboption: %s\n", args); + return 0; + } + args += pos; + if (*args == ':') + args++; + } + return 1; +} + +static int open(vf_instance_t *vf, char *args) +{ + struct vf_priv_s *p; + struct vf_priv_s ptmp = { + .current = 0, + .step = 0, + .autostart = 0, + .autostep = 0, + .have_step = 0, + .print = 0, + }; + + if (!parse_args(&ptmp, args == NULL ? "" : args)) + return 0; + + vf->put_image = put_image; + vf->uninit = uninit; + vf->priv = p = malloc(sizeof(struct vf_priv_s)); + *p = ptmp; + p->current = -p->step; + + return 1; +} + +vf_info_t vf_info_fixpts = { + "Fix presentation timestamps", + "fixpts", + "Nicolas George", + "", + &open, + NULL +}; |