[Matroska-devel] libmatroska's copy c'tors
Steve Lhomme
steve.lhomme at free.fr
Wed Jan 14 22:32:41 CET 2004
Steve Lhomme wrote:
> Moritz Bunkus wrote:
>
>> What I'm doing then is something like
>> KaxContentEncodings *copy = new KaxContentEncodings(*old_encodings);
>> copy->Render(*out);
>>
>> And sure as hell I get an assertion about the mandatory elements
>> missing. So could you please think about a way to avoid this? I think
>> that you could modify the copy c'tor so that after the copy it'll
>> iterate over all the children and create the mandatory elements if
>> they're missing. This has to be done recursively for EbmlMaster
>> children, of course.
>
>
> An additional parameter for the copy constructor ?
>
> At least there is the method ProcessMandatory() that will do what you
> want. Or almost because it doesn't check wether the element is already
> in the list or not. But that could be an added parameter.
>
> Now about the copy constructor, it's best to keep it like that as it's a
> more consistant way of doing things in C++. Otherwise it wouldn't be a
> copy constructor.
>
> So my suggestion would be to add a parameter to Render to be able to
> avoid checking for mandatory elements. That would also allow creating
> invalid files... So I think it's the way to go and I'm going to work on
> this.
Done.
Actually I did nothing but a small check :
uint32 EbmlMaster::RenderData(IOCallback & output, bool bForceRender,
bool bSaveDefault)
....
if (!bForceRender)
assert(CheckMandatory());
So set bForceRender to true in Render() and you'll be fine :)
More information about the Matroska-devel
mailing list