Mailing List Archive

direct rendering patch ; garbled OSD
I just updated from CVS for the first time in a week. The patch to use
direct rendering is GREAT -- where I previously had 5% free CPU, there
is now 25% free. Woohoo!

There is this one problem: the OSD sometimes becomes garbled after it is
there for a second or two. And sometimes, the presence of the OSD causes
the picture behind it to become garbled with artifacts that look like
morphed versions of the OSD. And sometimes, it works fine. This is under
mpeg4.

My first guess it that this is related to the reduction in memcpys, that
the OSD can now scribble on a frame that the avcodec is still using to
compute new frames.

Has anyone else seen this? Does anyone already know why this is happening?

-- john
Re: direct rendering patch ; garbled OSD [ In reply to ]
On Monday 25 November 2002 01:41 am, John Coiner wrote:
> I just updated from CVS for the first time in a week. The patch to use
> direct rendering is GREAT -- where I previously had 5% free CPU, there
> is now 25% free. Woohoo!
>
> There is this one problem: the OSD sometimes becomes garbled after it is
> there for a second or two. And sometimes, the presence of the OSD causes
> the picture behind it to become garbled with artifacts that look like
> morphed versions of the OSD. And sometimes, it works fine. This is under
> mpeg4.
>
> My first guess it that this is related to the reduction in memcpys, that
> the OSD can now scribble on a frame that the avcodec is still using to
> compute new frames.
>
> Has anyone else seen this? Does anyone already know why this is happening?

Yeah, I've seen it very occasionally. That's exactly the reason, too -- the
deinterlacing and/or the OSD is getting drawn into a buffer that libavcodec
still needs to use (ie, the one immediately previous to the current rendering
frame) to compute the next frame. I _think_ changing the check for the
number of valid video buffers in OutputVideoLoop() (where it kicks back into
prebuffering mode) to look for 'usepre' buffers instead of 0 buffers should
work, but I've not had time to test that yet.

Isaac