[FFmpeg-devel] [PATCH] mpeg2: fix block_last_index when mismatch control modifies last coeff

Måns Rullgård mans
Tue Jun 22 00:31:44 CEST 2010


Michael Niedermayer <michaelni at gmx.at> writes:

> On Mon, Jun 21, 2010 at 08:31:28PM +0100, M?ns Rullg?rd wrote:
>> Michael Niedermayer <michaelni at gmx.at> writes:
>> 
>> > On Mon, Jun 21, 2010 at 07:12:44PM +0100, M?ns Rullg?rd wrote:
>> >> Michael Niedermayer <michaelni at gmx.at> writes:
>> >> 
>> >> > On Mon, Jun 21, 2010 at 08:00:33PM +0200, Michael Niedermayer wrote:
>> >> >> On Mon, Jun 21, 2010 at 05:12:46PM +0100, M?ns Rullg?rd wrote:
>> >> >> > Michael Niedermayer <michaelni at gmx.at> writes:
>> >> >> > 
>> >> >> > >> Having an incorrect value in block_last_index just seems
>> >> >> > >> wrong to me.
>> >> >> > >
>> >> >> > > i dont think a completely correct value would be very
>> >> >> > > efficient speedwise as 75% of the cases where the last coeff
>> >> >> > > is set have no effect on the post dct output for dc blocks
>> >> >> > > (that is with an assumtation of dc values all being equally
>> >> >> > > likely)
>> >> >> > 
>> >> >> > The last coeff is always manipulated, not only for dc-only blocks.  Do
>> >> >> > you know for sure exactly in which cases it makes a difference?
>> >> >> 
>> >> >> I dont think anything except the idct is using that coeff but i 
>> >> >> i cannot formally proof that it is so or is bug free ...
>> >> >> If you have doubts, its surely possible to perform some tests to see
>> >> >> if its value makes a difference outside the idcts
>> >> >
>> >> > Also to everyone to whom things feel semantically wrong
>> >> > one can think of mismatch control to be part of the idct, which isnt
>> >> > far fetched semantically. In that case it makes sense not to update
>> >> > block_last_index. And we then would just be messing with he 64th coeff
>> >> > in the coeff decoder because thats faster there than seperately later.
>> >> 
>> >> Sure, but it's hard to optimise the idct properly when the input
>> >> parameters are wrong.  Choosing various shortcuts based on
>> >> block_last_index is a natural thing to do, but it's not possible when
>> >> this value cannot be trusted.
>> >
>> > That specific idct can be disabled or replaced by something else for mpeg2
>> >
>> > Setting block_last_index "correctly" just means setting it to 63
>> > that will just disable the optimisations
>> 
>> Then the "correction" applied to coeff 63 needs to be flagged by some
>> other means.  Although the coeff decoding is obviously the most
>> efficient place to calculate this adjustment, knowing the actual last
>> coded coeff is useful for the idct.  Relying on the idct compensating
>> for this munging is IMO totally out of the question.
>
> I dont understand your problem, nor can i relate your rant to the
> existing code The code as is, is fast, simple and there are no
> special cases in any idct currently

I intend to change that.  I foolishly assumed you'd be able to guess
as much.

> You seem to start your argumentation on the need of a change.

There is a lot of room for improvement.  That is reason enough to do it.

> I would prefer if you started with a description of what you plan to
> do or a description of in which way the current system would be in
> your way

The thing getting in my way IS THE LAST INDEX BEING WRONG!!!!

> The coefficients an idct gets are the correct input coefficients

Yes.

> block_last_index is exactly what a optimized idct should check for

Yes, but now it's being given an incorrect value.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list