On Sat, Oct 31, 2009 at 4:16 PM, Andy Walls <awalls@xxxxxxxxx> wrote: > All, > > At > > http://linuxtv.org/hg/~awalls/cx18-yuv > > I have checked in some improvements to YUV handling in the cx18 > driver. > > There was a problem in that a lost/dropped buffer between the cx18 > driver and the CX23418 firmware would cause the video frame alignment to > be lost with no easy way to recover. > > These changes do the following: > > 1. Force YUV buffer sizes to be large enough to hold either 1 full 525 > line system frame or 1 full 625 line system frame with new module > options and defaults. That makes the YUV buffers quite large, but > allows for "1 frame per buffer" for full sized video frames. > > 2. Not being able to allocate the now large YUV buffers is non-fatal. > The driver will still load and work for other stream types, even if it > can't get the YUV buffers. A warning is blurted out in the log, in case > YUV buffers can't be allocated. > > 3. __GFP_REPEAT has been added when trying to make the initial video > buffer allocations. After I added this, I never had the large YUV > buffers fail to be allocated. > > 4. We now lie to the firmware about the actual YUV buffer size, so that > the firmware always thinks the buffers are exactly large enough to hold > exactly an integral number of YUV frames based on the image height. > This means that dropped/lost YUV buffers between the cx18 driver and the > CX23418 firmware will only drop whole frames and no misalignment should > occur. > > > # modinfo cx18 > [...] > parm: enc_yuv_buffers:Encoder YUV buffer memory (MB). (enc_yuv_bufs can override) > Default: 3 (int) > parm: enc_yuv_bufsize:Size of an encoder YUV buffer (kB) > Allowed values: > 0 (do not allocate YUV buffers) > 507 (when never capturing 625 line systems) > 608 (when capturing 625 and/or 525 line systems) > Default: 608 (int) > parm: enc_yuv_bufs:Number of encoder YUV buffers > Default is computed from other enc_yuv_* parameters (int) > [...] > > # modprobe cx18 > # mplayer /dev/video32 -demuxer rawvideo -rawvideo w=720:h=480:format=hm12:ntsc > > > You can add 'debug=264' to the modprobe line to watch the size of the > payloads coming back from the firmware to make sure they are an integral > number of frames, but logging stats on every noticably degrades > performance. > > Regards, > Andy Hi Andy, How does this code work if the cx23418 scaler is used (resulting in the size of the frames to be non-constant)? Or is the scaler not currently supported in the driver? Devin -- Devin J. Heitmueller - Kernel Labs http://www.kernellabs.com -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html