From: Steve Lhomme Date: Mon, 5 Jul 2010 11:38:15 +0000 (+0000) Subject: libmatroska: add the possibility for a DataBuffer class to use its own internal memory X-Git-Tag: release-1.1.0~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2be628cfe9563e8d61c8c4fae65a087627fa48fd;p=libmatroska libmatroska: add the possibility for a DataBuffer class to use its own internal memory git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libmatroska@394 a6f86f6d-0131-4f8e-9e7b-e335508773d5 --- diff --git a/ChangeLog b/ChangeLog index f97273a..7e8dd90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ New 1.1.0 version: - give access to the SetParent to KaxSimpleBlock as well - change the placement of a MATROSKA_DLL_API so that it actually works - remove all references to the old/outdated/previous tag system + - add the possibility for a DataBuffer class to use its own internal memory 2010-06-04 robux4/mosu New 1.0.0 version: diff --git a/matroska/KaxBlock.h b/matroska/KaxBlock.h index a60a4f2..1ba47fb 100644 --- a/matroska/KaxBlock.h +++ b/matroska/KaxBlock.h @@ -58,24 +58,42 @@ class MATROSKA_DLL_API DataBuffer { uint32 mySize; bool bValidValue; bool (*myFreeBuffer)(const DataBuffer & aBuffer); // method to free the internal buffer + bool bInternalBuffer; public: - DataBuffer(binary * aBuffer, uint32 aSize, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = NULL) - :myBuffer(aBuffer) + DataBuffer(binary * aBuffer, uint32 aSize, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = NULL, bool _bInternalBuffer = false) + :myBuffer(NULL) ,mySize(aSize) - ,bValidValue(true) - ,myFreeBuffer(aFreeBuffer) - {} + ,bValidValue(true) + ,myFreeBuffer(aFreeBuffer) + ,bInternalBuffer(_bInternalBuffer) + { + if (bInternalBuffer) + { + myBuffer = new binary[mySize]; + if (myBuffer == NULL) + bValidValue = false; + else + memcpy(myBuffer, aBuffer, mySize); + } + else + myBuffer = aBuffer; + } + virtual ~DataBuffer() {} - virtual binary * Buffer() {return myBuffer;} + virtual binary * Buffer() {assert(bValidValue); return myBuffer;} virtual uint32 & Size() {return mySize;}; - virtual const binary * Buffer() const {return myBuffer;} + virtual const binary * Buffer() const {assert(bValidValue); return myBuffer;} virtual const uint32 Size() const {return mySize;}; bool FreeBuffer(const DataBuffer & aBuffer) { bool bResult = true; - if (myBuffer != NULL && myFreeBuffer != NULL && bValidValue) { - bResult = myFreeBuffer(aBuffer); + if (myBuffer != NULL && bValidValue) { + if (myFreeBuffer != NULL) + bResult = myFreeBuffer(aBuffer); + if (bInternalBuffer) + delete [] myBuffer; myBuffer = NULL; + mySize = 0; bValidValue = false; } return bResult;