[FFmpeg-devel] Request for review
Michael Niedermayer
michaelni
Fri Mar 6 20:34:20 CET 2009
On Fri, Mar 06, 2009 at 11:31:02AM -0800, Roman V Shaposhnik wrote:
> On Fri, 2009-03-06 at 20:20 +0100, Michael Niedermayer wrote:
> > > Index: libavcodec/dv.c
> > > ===================================================================
> > > --- libavcodec/dv.c (revision 17733)
> > > +++ libavcodec/dv.c (working copy)
> > > @@ -208,7 +208,7 @@
> > > {
> > > int j,i,c,s,p;
> > > uint32_t *factor1, *factor2;
> > > - const int *iweight1, *iweight2;
> > > + const int *weight1, *weight2;
> > >
> > > if (!d->work_chunks[dv_work_pool_size(d)-1].buf_offset) {
> > > p = i = 0;
> > > @@ -232,28 +232,28 @@
> > > factor1 = &d->idct_factor[0];
> > > factor2 = &d->idct_factor[DV_PROFILE_IS_HD(d)?4096:2816];
> > > if (d->height == 720) {
> > > - iweight1 = &dv_iweight_720_y[0];
> > > - iweight2 = &dv_iweight_720_c[0];
> > > + weight1 = &dv_weight_720_y[0];
> > > + weight2 = &dv_weight_720_c[0];
> > > } else {
> > > - iweight1 = &dv_iweight_1080_y[0];
> > > - iweight2 = &dv_iweight_1080_c[0];
> > > + weight1 = &dv_weight_1080_y[0];
> > > + weight2 = &dv_weight_1080_c[0];
> > > }
> > > if (DV_PROFILE_IS_HD(d)) {
> > > for (c = 0; c < 4; c++) {
> > > for (s = 0; s < 16; s++) {
> > > for (i = 0; i < 64; i++) {
> > > - *factor1++ = (dv100_qstep[s] << (c + 9)) * iweight1[i];
> > > - *factor2++ = (dv100_qstep[s] << (c + 9)) * iweight2[i];
> > > + *factor1++ = (dv100_qstep[s] << (c + 9)) * ((((uint64_t)2<<dv100_inverse_shift)/weight1[i]+1)>>1);
> > > + *factor2++ = (dv100_qstep[s] << (c + 9)) * ((((uint64_t)2<<dv100_inverse_shift)/weight2[i]+1)>>1);
> > > }
> > > }
> > > }
> > > } else {
> > > - iweight1 = &dv_iweight_88[0];
> > > - for (j = 0; j < 2; j++, iweight1 = &dv_iweight_248[0]) {
> > > + weight1 = &dv_weight_88[0];
> > > + for (j = 0; j < 2; j++, weight1 = &dv_weight_248[0]) {
> > > for (s = 0; s < 22; s++) {
> > > for (i = c = 0; c < 4; c++) {
> > > for (; i < dv_quant_areas[c]; i++) {
> > > - *factor1 = iweight1[i] << (dv_quant_shifts[s][c] + 1);
> > > + *factor1 = ((((uint64_t)2<<dv_inverse_shift)/weight1[i] + 1) >> 1) << (dv_quant_shifts[s][c] + 1);
> > > *factor2++ = (*factor1++) << 1;
> > > }
> > > }
> >
> > Maybe iam missing something but i think the code is calculating the
> > decode dequantization tables, these tables are i suspect normative and
> > their content cannot be changed.
> > Does this mean the content of these tables stays the same?
>
> You're 100% correct for the DVCPRO HD case. The smpte370 has integer
> tables. For the DV/DVCPRO the situation is a bit more complicated.
> First, the unweighting table is *not* explicitly specified but
> is assumed to be an inverse of a weighting table. The trouble with
> the weighting table is that it is specified as products of trigonometric
> functions. The precision is not specified.
>
> Thus, what the patch does it tries to follow the spec more closely
> than what used to happen -- the unweighting tables are now true
> inverse of the weighting ones to extent permitted by the precision.
ok then
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090306/5ec416ec/attachment.pgp>
More information about the ffmpeg-devel
mailing list