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:
parent
cbfe8d21d0
commit
335f35f2bf
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user