Hello, yet another newcomer to the boards here.
I'm currently working on an MXF muxer as part of a larger system. I've managed to set up the preface/header partition fairly correct and I'm currently writing the essence data using a GCWriter. The result plays, and I can wrap a number of codecs already. One problem is that GCWriter doesn't do any index generation, which causes A/V desynchronization and an inability to seek.
Therefore I have s small list of problems/questions regarding GCWriter:
- GCWriter doesn't perform any interleaving. I can write my own interleaver though, but is there some kind of existing utility class in MXFLib that takes care of that?
- GCWriter can only write one packet of essence data per stream per content package, since GCWriter::WriteQueueMap is a map<UInt32,WriteBlock> and not say a map<UInt32,list<WriteBlock> >. Is there a way around this problem? At the moment this also means I have to call Flush() after writing each packet due to the lack of fine grain interleaving
It seems BodyWriter takes care of almost every thing I need, but it has one big problem: it pulls data rather than the user being able to push data onto it. To fix this I'd have to use some kind of FIFO like system with "fake" EssenceSources somehow synchronized with the one or several threads that are demuxing the input file(s). This seems like a way too hairy solution for my tastes (having already been forced to use a similar solution when sending raw data between callbacks).
This all basically boils down to this: what is the simplest way to output internal essence data with index generation when said data is "pushed"?
If this isn't possible with MXFLib yet, then I suppose I'll have to add a simple interleaver class and a a simple (VBR only) index generator class to the system.