Today, one has to configure dvs_sdi capture format according to how data will be used (compression). For example configure secondary buffer with DV25 format if you want to record DV files, MPEG format to record into mpg files, etc… Additionaly, primary buffer can be HD or SD, while secondary buffer is always SD.
This way of doing releases some work from the recorder, as it gets proper pixel and raster formats for the compression format, and can also avoid redundent conversion if a channel is used multiple times (mpeg file recording + network streaming).
On the other hand it makes configuration complex, inter-dependent, and not so flexible, for instance it is impossible to record in DV50.mov and do an MPEG stream from the secondary SD channel (if primary is HD). Also, both dvs_sdi and bmd_sdi must handle multiple destination formats conversion..
So, what about simplifying capture to shared memory, always capturing to native format such as UYVY or YUV, and moving subsequent format conversion into consumer processes ? Such conversion should be fully encapsulated in an object or library, to ease implementation. At the end we can even get rid of the secondary buffer.
Of course, some processing could be redundent (MPEG file recording and MPEG streaming would repeat YUV to MPEG pixel format conversion). But today some unuseful conversion is happening anyway (for instance if secondary buffer is enabled but not used). The system would gain in configuration simplicity and flexibility, dvs_sdi and bmd_sdi code would get much simpler too.
Any comment ?
Yes, that would be good but it is not something we have time available to implement. Happy to receive contributed code however.