1
mirror of https://github.com/mpv-player/mpv synced 2024-10-30 04:46:41 +01:00

reverse the H264 hack

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17226 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
henry 2005-12-19 18:04:37 +00:00
parent cbfe8d21d0
commit 335f35f2bf
2 changed files with 10 additions and 23 deletions

View File

@ -4925,10 +4925,7 @@ Force quantization parameter (default: 0, use QP from video).
.
.TP
.B fspp[=quality[:qp[:strength[:bframes]]]]
Faster version of the simple postprocessing filter. Turned off by
default for H264 content as this filter only causes excessive blur
with it. You can force filtering even with H264 using negative values
for quality parameter.
faster version of the simple postprocessing filter
.RSs
.IPs <quality>
4\-5 (equivalent to spp; default: 4)

View File

@ -88,9 +88,6 @@ static const uint8_t __attribute__((aligned(32))) dither[8][8]={
{ 42, 26, 38, 22, 41, 25, 37, 21, },
};
#define VF_FSPP_BFRAMES 1
#define VF_FSPP_FORCE 2
struct vf_priv_s { //align 16 !
uint64_t threshold_mtx_noq[8*2];
uint64_t threshold_mtx[8*2];//used in both C & MMX (& later SSE2) versions
@ -98,11 +95,11 @@ struct vf_priv_s { //align 16 !
int log2_count;
int temp_stride;
int qp;
int qscale_type;
int mpeg2;
int prev_q;
uint8_t *src;
int16_t *temp;
int flags;
int bframes;
char *non_b_qp;
};
@ -461,7 +458,7 @@ static void filter(struct vf_priv_s *p, uint8_t *dst, uint8_t *src,
t=x+x0-2; //correct t=x+x0-2-(y&1), but its the same
if (t<0) t=0;//t always < width-2
t=qp_store[qy+(t>>qps)];
if(p->qscale_type == FF_QSCALE_TYPE_MPEG2) t>>=1; //copy p->mpeg2,prev_q to locals?
if(p->mpeg2) t>>=1; //copy p->mpeg2,prev_q to locals?
if (t!=p->prev_q) p->prev_q=t, mul_thrmat_s(p, t);
column_fidct_s((int16_t*)(&p->threshold_mtx[0]), block+x*8, block3+x*8, 8); //yes, this is a HOTSPOT
}
@ -538,7 +535,7 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
dmpi=vf->dmpi;
}
vf->priv->qscale_type= mpi->qscale_type;
vf->priv->mpeg2= mpi->qscale_type;
if(mpi->pict_type != 3 && mpi->qscale && !vf->priv->qp){
if(!vf->priv->non_b_qp)
vf->priv->non_b_qp= malloc(mpi->qstride * mpi->h);
@ -546,12 +543,10 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
}
if(vf->priv->log2_count || !(mpi->flags&MP_IMGFLAG_DIRECT)){
char *qp_tab= vf->priv->non_b_qp;
if((vf->priv->flags & VF_FSPP_BFRAMES) || !qp_tab)
if(vf->priv->bframes || !qp_tab)
qp_tab= mpi->qscale;
if((qp_tab || vf->priv->qp)
&& ((vf->priv->flags & VF_FSPP_FORCE)
|| mpi->qscale_type == FF_QSCALE_TYPE_MPEG1 || mpi->qscale_type == FF_QSCALE_TYPE_MPEG2)){
if(qp_tab || vf->priv->qp){
filter(vf->priv, dmpi->planes[0], mpi->planes[0], dmpi->stride[0], mpi->stride[0],
mpi->w, mpi->h, qp_tab, mpi->qstride, 1);
filter(vf->priv, dmpi->planes[1], mpi->planes[1], dmpi->stride[1], mpi->stride[1],
@ -647,7 +642,6 @@ static int open(vf_instance_t *vf, char* args)
int i=0, bias;
int custom_threshold_m[64];
int log2c=-1;
int bframes;
vf->config=config;
vf->put_image=put_image;
@ -663,15 +657,11 @@ static int open(vf_instance_t *vf, char* args)
//dsputil_init(&vf->priv->dsp, vf->priv->avctx);
vf->priv->log2_count= 4;
vf->priv->flags = 0;
vf->priv->bframes = 0;
if (args) sscanf(args, "%d:%d:%d:%d", &log2c, &vf->priv->qp, &i, &bframes);
vf->priv->flags |= bframes ? VF_FSPP_BFRAMES : 0;
if (args) sscanf(args, "%d:%d:%d:%d", &log2c, &vf->priv->qp, &i, &vf->priv->bframes);
if( log2c >=-5 && log2c <=-4 ) {
vf->priv->log2_count = -log2c;
vf->priv->flags |= VF_FSPP_FORCE;
} else if( log2c >=4 && log2c <=5 )
if( log2c >=4 && log2c <=5 )
vf->priv->log2_count = log2c;
else if( log2c >= 6 )
vf->priv->log2_count = 5;