From: Miguel F. <mi...@ce...> - 2001-12-26 01:30:15
|
Hi, I hope Guenter must be enjoying his vacation by now so just in case he reads email, here are some notes about the still frame code: video_out.c: - at line 267, there's a test: "if (img && !img->next)" that seems to be always true (img is tested on while() and img->next is set to null from vo_remove_from_img_buf_queue). Probably "if (!this->display_img_buf_queue->first)" is what we want here. - this->still_counter is incremented without any defined time base. xine tries to set the timer to 1/10 of frame duration. On most systems it will be limited by kernel resolution (10ms) or about 1/3 of common frame duration. My kernel, btw, is using HZ=1000 therefore 1ms resolution. The result is that still_counter may reach 8 before 1 frame duration has passed! (this will also happen on alpha kernels) - btw, nice idea to call got_video_frame until vpts is close enough to the current vpts. - unless i'm understanding it wrong, frame backup is done on every "last frame on fifo". This is somewhat bad, take a slow system example: decoder is working hard to output something and video_out loop is just waiting idle. When finally it gets a frame it will be the only one and therefore will be duplicated, wasting precious cpu cycles with memcpys... I think we really need to clean up this thing before 0.9.8. i'd say CVS is somewhat unstable now... regards, Miguel |