⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avi_handler.cpp

📁 flash xmp sdk,flash官方SDK
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if ( altTimecodeString.size() != 0 ) {			RewriteChunk ( fileRef, riffState, myAltTimeChunk, myTimeList, altTimecodeString.c_str() );		}		// Always rewrite the reel strings, even if empty, so the user can erase them.		RewriteChunk ( fileRef, riffState, myOrgReelChunk, myTimeList, orgReelString.c_str() );		RewriteChunk ( fileRef, riffState, myAltReelChunk, myTimeList, altReelString.c_str() );	} else {			ok = MakeChunk ( fileRef, riffState, formtypeAVI, PR_AVI_TIMELEN );		if ( ! ok ) return; // If there's an error making a chunk, bail		RIFF_Support::ltag listtag;		listtag.id = MakeUns32LE ( FOURCC_LIST );		listtag.len = MakeUns32LE ( PR_AVI_TIMELEN - 8 );		listtag.subid = MakeUns32LE ( myTimeList );		LFA_Write(fileRef, &listtag, 12);		RIFF_Support::WriteChunk ( fileRef, myOrgTimeChunk, startTimecodeString.c_str(), TIMELEN );		RIFF_Support::WriteChunk ( fileRef, myAltTimeChunk, altTimecodeString.c_str(), TIMELEN );		RIFF_Support::WriteChunk ( fileRef, myOrgReelChunk, orgReelString.c_str(), REELLEN );		RIFF_Support::WriteChunk ( fileRef, myAltReelChunk, altReelString.c_str(), REELLEN );	}	this->needsUpdate = false;}	// AVI_MetaHandler::UpdateFile// =================================================================================================// AVI_MetaHandler::WriteFile// ==========================void AVI_MetaHandler::WriteFile ( LFA_FileRef         sourceRef,								  const std::string & sourcePath ){	IgnoreParam(sourceRef); IgnoreParam(sourcePath);		XMP_Throw ( "AVI_MetaHandler::WriteFile: Not supported", kXMPErr_Unavailable );}	// AVI_MetaHandler::WriteFile// =================================================================================================// AVI_MetaHandler::CacheFileData// ==============================void AVI_MetaHandler::CacheFileData(){	bool ok;		this->containsXMP = false;		LFA_FileRef fileRef ( this->parent->fileRef );	if ( fileRef == 0 ) return;	RIFF_Support::RiffState riffState;	long numTags = RIFF_Support::OpenRIFF ( fileRef, riffState );	if ( numTags == 0 ) return;	// Determine the size of the metadata	unsigned long bufferSize(0);	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, kXMPUserDataType, 0, 0, 0, &bufferSize );	if ( ! ok ) {		packetInfo.writeable = true;	// If no packet found, created packets will be writeable.	} else if ( bufferSize > 0 ) {		// Size and clear the buffer		this->xmpPacket.reserve ( bufferSize );		this->xmpPacket.assign ( bufferSize, ' ' );		// Get the metadata		ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, kXMPUserDataType, 0, 0, (char*)this->xmpPacket.c_str(), &bufferSize );		if ( ok ) {			this->packetInfo.offset = kXMPFiles_UnknownOffset;			this->packetInfo.length = bufferSize;			this->xmpObj.ParseFromBuffer ( this->xmpPacket.c_str(), this->xmpPacket.size() );			this->containsXMP = true;		}	}	// Reconcile legacy metadata.		std::string aviTimeString, orgTimeString, altTimeString;	unsigned long aviTimeSize, orgTimeSize, altTimeSize;		ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, aviTimeChunk, avihdrlChunk, 0, 0, &aviTimeSize );	if ( ok ) {		aviTimeString.reserve ( aviTimeSize );		aviTimeString.assign ( aviTimeSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, aviTimeChunk, avihdrlChunk, 0, (char*)aviTimeString.c_str(), &aviTimeSize );	}	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, myOrgTimeChunk, myTimeList, 0, 0, &orgTimeSize );	if ( ok ) {		orgTimeString.reserve ( orgTimeSize );		orgTimeString.assign ( orgTimeSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, myOrgTimeChunk, myTimeList, 0, (char*)orgTimeString.c_str(), &orgTimeSize );	}	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, myAltTimeChunk, myTimeList, 0, 0, &altTimeSize );	if ( ok ) {		altTimeString.reserve ( altTimeSize );		altTimeString.assign ( altTimeSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, myAltTimeChunk, myTimeList, 0, (char*)altTimeString.c_str(), &altTimeSize );	}	if ( (! aviTimeString.empty()) && orgTimeString.empty() && (altTimeString.empty()) ) {		// If we have an avi time, and not the org or alt, use the avi. I suspect this is for some earlier backwards compatibility.		std::string xmpString;		this->xmpObj.GetStructField ( kXMP_NS_DM, kStartTimecode, kXMP_NS_DM, kTimeValue, &xmpString, 0 );		if ( xmpString.compare ( 0, REALTIMELEN, aviTimeString, 0, REALTIMELEN ) ) {			this->xmpObj.SetStructField ( kXMP_NS_DM, kStartTimecode, kXMP_NS_DM, kTimeValue, aviTimeString, 0 );			this->containsXMP = true;		}	} else {		// Otherwise, check the original and alt timecodes.		if ( ! orgTimeString.empty() ) {			std::string xmpString;			this->xmpObj.GetStructField ( kXMP_NS_DM, kStartTimecode, kXMP_NS_DM, kTimeValue, &xmpString, 0 );			if (xmpString.compare ( 0, REALTIMELEN, orgTimeString, 0, REALTIMELEN ) ) {				this->xmpObj.SetStructField ( kXMP_NS_DM, kStartTimecode, kXMP_NS_DM, kTimeValue, orgTimeString, 0 );				this->containsXMP = true;			}		}		if ( ! altTimeString.empty() ) {			std::string xmpString;			this->xmpObj.GetStructField ( kXMP_NS_DM, kAltTimecode, kXMP_NS_DM, kTimeValue, &xmpString, 0 );			if ( xmpString.compare ( 0, REALTIMELEN, altTimeString, 0, REALTIMELEN ) ) {				this->xmpObj.SetStructField ( kXMP_NS_DM, kAltTimecode, kXMP_NS_DM, kTimeValue, altTimeString, 0 );				this->containsXMP = true;			}		}	}	unsigned long orgReelSize;	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, myOrgReelChunk, myTimeList, 0, 0, &orgReelSize );	if ( ok ) {		std::string orgReelString;		orgReelString.reserve ( orgReelSize );		orgReelString.assign ( orgReelSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, myOrgReelChunk, myTimeList, 0, (char*)orgReelString.c_str(), &orgReelSize );		if ( ! orgReelString.empty() ) {			std::string xmpString;			this->xmpObj.GetProperty ( kXMP_NS_DM, kTapeName, &xmpString, 0 );			if ( xmpString.compare ( 0, REELLEN, orgReelString, 0, REELLEN ) ) {				this->xmpObj.SetProperty ( kXMP_NS_DM, kTapeName, orgReelString, 0 );				this->containsXMP = true;			}		}	}	unsigned long altReelSize;	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, myAltReelChunk, myTimeList, 0, 0, &altReelSize );	if ( ok ) {		std::string altReelString;		altReelString.reserve ( altReelSize );		altReelString.assign ( altReelSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, myAltReelChunk, myTimeList, 0, (char*)altReelString.c_str(), &altReelSize );		if ( ! altReelString.empty() ) {			std::string xmpString;			this->xmpObj.GetProperty ( kXMP_NS_DM, kAltTapeName, &xmpString, 0 );			if ( xmpString.compare ( 0, REELLEN, altReelString, 0, REELLEN ) ) {				this->xmpObj.SetProperty ( kXMP_NS_DM, kAltTapeName, altReelString, 0 );				this->containsXMP = true;			}		}	}	unsigned long logCommentSize;	ok = RIFF_Support::GetRIFFChunk ( fileRef, riffState, myCommentChunk, myCommentList, 0, 0, &logCommentSize );	if ( ok ) {		std::string logCommentString;		logCommentString.reserve ( logCommentSize );		logCommentString.assign ( logCommentSize, ' ' );		RIFF_Support::GetRIFFChunk ( fileRef, riffState, myCommentChunk, myCommentList, 0, (char*)logCommentString.c_str(), &logCommentSize );		if ( ! logCommentString.empty() ) {			std::string xmpString;			this->xmpObj.GetProperty ( kXMP_NS_DM, kLogComment, &xmpString, 0 );			if ( xmpString.compare ( logCommentString ) ) {				this->xmpObj.SetProperty ( kXMP_NS_DM, kLogComment, logCommentString, 0 );				this->containsXMP = true;			}		}	}	// Update the xmpPacket, as the xmpObj might have been updated with legacy info.	this->xmpObj.SerializeToBuffer ( &this->xmpPacket, kXMP_UseCompactFormat );	this->packetInfo.offset = kXMPFiles_UnknownOffset;	this->packetInfo.length = this->xmpPacket.size();	this->processedXMP = this->containsXMP;	}	// AVI_MetaHandler::CacheFileData

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -