fix MSVC build errors for GSoC2013 VideoWrite

This commit is contained in:
Robin Mills 2014-09-07 13:51:02 +00:00
parent 66e473db32
commit 74e8adfa37
5 changed files with 1092 additions and 11 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1909,7 +1909,7 @@ void QuickTimeVideo::sampleDesc(uint32_t size)
uint64_t cur_pos = io_->tell();
io_->read(buf.pData_, 4);
io_->read(buf.pData_, 4);
uint32_t noOfEntries = returnUnsignedBufValue(buf);
uint64_t noOfEntries = returnUnsignedBufValue(buf);
for(uint32_t i = 1; i <= noOfEntries; i++){
if (d->currentStream_ == Video) imageDescDecoder();
else if (d->currentStream_ == Audio) audioDescDecoder();
@ -2448,7 +2448,7 @@ void QuickTimeVideo::mediaHeaderDecoder(uint32_t size)
case MediaDuration:
io_->read(buf.pData_,4);
time_scale = returnBufValue(buf);
bDataWritten = writeAudVidData("MediaDuration", time_scale, 4, 0, 0); break;
bDataWritten = writeAudVidData("MediaDuration", (double) time_scale, 4, 0, 0); break;
case MediaLanguageCode:
if(d->currentStream_ == Video){
if(xmpData_["Xmp.video.MediaLanguage"].count() > 0){
@ -2556,23 +2556,25 @@ void QuickTimeVideo::trackHeaderDecoder(uint32_t size)
bool QuickTimeVideo::writeAudVidData
( std::string sXmpTag, double iMulFactor, int64_t iBytCnt, int64_t iOffset, int64_t iRetFuncCall)
{
DataBuf buf(5);
// DataBuf buf(5);
bool bRetVal = false;
int64_t iXmpTagVal = 0;
if(d->currentStream_ == Video){
if(xmpData_["Xmp.video." + sXmpTag].count() > 0){
iXmpTagVal = xmpData_["Xmp.video." + sXmpTag].toLong()*iMulFactor;
if(iRetFuncCall == 0) buf = returnBuf(iXmpTagVal, iBytCnt);
else buf = returnUnsignedBuf(iXmpTagVal);
bRetVal = writeMultibyte(buf.pData_, iBytCnt ,iOffset);
iXmpTagVal = (int64_t) (xmpData_["Xmp.video." + sXmpTag].toLong()*iMulFactor);
DataBuf buf = iRetFuncCall == 0 ? returnBuf(iXmpTagVal, (int32_t) iBytCnt)
: returnUnsignedBuf(iXmpTagVal)
;
bRetVal = writeMultibyte(buf.pData_, iBytCnt ,iOffset);
}
}
else if(d->currentStream_ == Audio){
if(xmpData_["Xmp.audio." + sXmpTag].count() > 0){
iXmpTagVal = xmpData_["Xmp.audio." + sXmpTag].toLong()*iMulFactor;
if(iRetFuncCall == 0) buf = returnBuf(iXmpTagVal, iBytCnt);
else buf = returnUnsignedBuf(iXmpTagVal);
DataBuf buf = iRetFuncCall == 0 ? returnBuf(iXmpTagVal, (int32_t) iBytCnt)
: returnUnsignedBuf(iXmpTagVal)
;
bRetVal = writeMultibyte(buf.pData_, iBytCnt ,iOffset);
}
}

View File

@ -143,12 +143,14 @@ namespace Exiv2 {
}
}
#ifndef _MSC_VER
DataBuf& DataBuf::operator=(DataBuf& rhs)
{
if (this == &rhs) return *this;
reset(rhs.release());
return *this;
}
#endif
void DataBuf::alloc(long size)
{

View File

@ -230,7 +230,11 @@ namespace Exiv2 {
buffer at the original object similar to std::auto_ptr, i.e.,
the original object is modified.
*/
#ifndef _MSC_VER
// MSVC reports a template confusion with DataBufRef for this
// It seems to be harmless to omit this and rely on the DataBufRef code
DataBuf& operator=(DataBuf& rhs);
#endif
/*!
@brief Allocate a data buffer of at least the given size. Note that if
the requested \em size is less than the current buffer size, no