In light of ReputImage(), which I was unaware of. I think the first
proposal was best. I can make ReputImage() work without copying all
the data all the time.
  Rather than copy the visible part of the XvImage to the offscreen
memory starting as the top left of the offscreen buffer, I'll copy
the visible region to the same x,y coordinates in the offscreen
memory. When the window moves triggering a Reput() either I can
show the newly exposed region as zero'd or clip the overlay to the
area that I actually have data for. Either way it is better than
leaving the overlay in the wrong screen location.

Here is the proposal again, if there are on complaints I'll
implement it this way.

#define XV_HOLD         0x0
#define XV_TOP_FIELD    0x1
#define XV_BOTTOM_FIELD 0x2
#define XV_FRAME        (XV_TOP_FIELD | XV_BOTTOM_FIELD)

The atom XV_FRAME_TYPE can be set to one of the above values.
XvShmPutImage takes either an interlaced or progressive image
and copies both fields to the offscreen area. If XV_FRAME_TYPE
is not XV_HOLD the overlay is updated with the new data right
away. When it is XV_HOLD the overlay is not updated.

At any time the atom can be set to XV_TOP_FIELD or XV_BOTTOM_FIELD
or XV_FRAME to display the result of the last XvShmPutImage.

Mark, if we make use of Reput() couldn't you then make Blitted video
work? Reput() would just update the position during XV_HOLD but
not make a copy. Then when XV_TOP_FIELD was set the coordinates
would always be correct. Reput() could either do nothing or just
update the valid area when XV_FRAME_TYPE != XV_HOLD.

-Matt
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert

Reply via email to