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

📄 mp4.cpp

📁 mpeg4 video codec mpeg4 video codec
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			delete e;		}	}	return 0;}extern "C" MP4TrackId MP4FindTrackId(	MP4FileHandle hFile, 	u_int16_t index, 	const char* type,	u_int8_t subType){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->FindTrackId(index, type, subType);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TRACK_ID;}extern "C" u_int16_t MP4FindTrackIndex(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->FindTrackIndex(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return (u_int16_t)-1;}/* specific track properties */extern "C" const char* MP4GetTrackType(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackType(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return NULL;}extern "C" MP4Duration MP4GetTrackDuration(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackDuration(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" u_int32_t MP4GetTrackTimeScale(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackTimeScale(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" bool MP4SetTrackTimeScale(	MP4FileHandle hFile, MP4TrackId trackId, u_int32_t value){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackTimeScale(trackId, value);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}// This function should not be used anymore  // use MP4GetTrackEsdsObjectTypeId instead extern "C" u_int8_t MP4GetTrackAudioType(     MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {		  		  return ((MP4File*)hFile)->GetTrackAudioType(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_AUDIO_TYPE;}extern "C" u_int8_t MP4GetTrackAudioMpeg4Type(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackAudioMpeg4Type(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_MPEG4_INVALID_AUDIO_TYPE;}// This function should not be used anymore  // use MP4GetTrackEsdsObjectTypeId instead extern "C" u_int8_t MP4GetTrackVideoType(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackVideoType(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_VIDEO_TYPE;}// Replacement to MP4GetTrackVideoType and MP4GetTrackAudioType// Basically does the same thing but with a more self-explanatory nameextern "C" u_int8_t MP4GetTrackEsdsObjectTypeId(     MP4FileHandle hFile, MP4TrackId trackId){  if (MP4_IS_VALID_FILE_HANDLE(hFile)) {    try {            return ((MP4File*)hFile)->GetTrackEsdsObjectTypeId(trackId);    }    catch (MP4Error* e) {      PRINT_ERROR(e);      delete e;    }  }  return MP4_INVALID_AUDIO_TYPE;}extern "C" MP4Duration MP4GetTrackFixedSampleDuration(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackFixedSampleDuration(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" u_int32_t MP4GetTrackBitRate(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,				"mdia.minf.stbl.stsd.*.esds.decConfigDescr.avgBitrate");		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" bool MP4GetTrackESConfiguration(	MP4FileHandle hFile, MP4TrackId trackId, 	u_int8_t** ppConfig, u_int32_t* pConfigSize){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->GetTrackESConfiguration(				trackId, ppConfig, pConfigSize);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	*ppConfig = NULL;	*pConfigSize = 0;	return false;}extern "C" bool MP4SetTrackESConfiguration(	MP4FileHandle hFile, MP4TrackId trackId, 	const u_int8_t* pConfig, u_int32_t configSize){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackESConfiguration(				trackId, pConfig, configSize);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" MP4SampleId MP4GetTrackNumberOfSamples(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackNumberOfSamples(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" u_int16_t MP4GetTrackVideoWidth(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {		       return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,				"mdia.minf.stbl.stsd.*.width");		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" u_int16_t MP4GetTrackVideoHeight(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,				"mdia.minf.stbl.stsd.*.height");		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" float MP4GetTrackVideoFrameRate(	MP4FileHandle hFile, MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackVideoFrameRate(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0.0;}// returns true if the track is a media track encrypted according to ismacrypextern "C" bool MP4IsIsmaCrypMediaTrack(	MP4FileHandle hFile, MP4TrackId trackId){        if (MP4_IS_VALID_FILE_HANDLE(hFile)) {               try {                       return ((MP4File*)hFile)->IsIsmaCrypMediaTrack(trackId); 	       }               catch (MP4Error* e) {                       PRINT_ERROR(e);                       delete e;               }        }        return false;}/* generic track properties */extern "C" u_int64_t MP4GetTrackIntegerProperty (	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId, 				propName);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return (u_int64_t)-1;}extern "C" bool MP4HaveTrackIntegerProperty(	MP4FileHandle hFile, MP4TrackId trackId,	const char* propName){  // The same as MP4GetTrackIntegerProperty but with no error reporting	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId, 				propName) != (u_int64_t)-1;		}		catch (MP4Error* e) {			// No error reporting			delete e;		}	}	return false;}extern "C" float MP4GetTrackFloatProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackFloatProperty(trackId, propName);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return NAN;}extern "C" const char* MP4GetTrackStringProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackStringProperty(trackId, propName);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return NULL;}extern "C" void MP4GetTrackBytesProperty(	MP4FileHandle hFile, MP4TrackId trackId, const char* propName, 	u_int8_t** ppValue, u_int32_t* pValueSize){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->GetTrackBytesProperty(				trackId, propName, ppValue, pValueSize);			return;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	*ppValue = NULL;	*pValueSize = 0;	return;}extern "C" bool MP4SetTrackIntegerProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName, int64_t value){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackIntegerProperty(trackId, 				propName, value);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4SetTrackFloatProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName, float value){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackFloatProperty(trackId, propName, value);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4SetTrackStringProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName, const char* value){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackStringProperty(trackId, propName, value);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4SetTrackBytesProperty(	MP4FileHandle hFile, MP4TrackId trackId, 	const char* propName, const u_int8_t* pValue, u_int32_t valueSize){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetTrackBytesProperty(				trackId, propName, pValue, valueSize);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}/* sample operations */extern "C" bool MP4ReadSample(	/* input parameters */	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId,	/* output parameters */	u_int8_t** ppBytes, 	u_int32_t* pNumBytes, 	MP4Timestamp* pStartTime, 	MP4Duration* pDuration,	MP4Duration* pRenderingOffset, 	bool* pIsSyncSample){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->ReadSample(				trackId, 				sampleId, 				ppBytes, 				pNumBytes, 				pStartTime, 				pDuration, 				pRenderingOffset, 				pIsSyncSample);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	*pNumBytes = 0;	return false;}extern "C" bool MP4ReadSampleFromTime(	/* input parameters */	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4Timestamp when,	/* output parameters */	u_int8_t** ppBytes, 	u_int32_t* pNumBytes, 	MP4Timestamp* pStartTime, 	MP4Duration* pDuration,	MP4Duration* pRenderingOffset, 	bool* pIsSyncSample){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			MP4SampleId sampleId = 				((MP4File*)hFile)->GetSampleIdFromTime(					trackId, when, false);			((MP4File*)hFile)->ReadSample(				trackId, 				sampleId, 				ppBytes, 				pNumBytes, 				pStartTime, 				pDuration, 				pRenderingOffset, 				pIsSyncSample);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	*pNumBytes = 0;	return false;}extern "C" bool MP4WriteSample(	MP4FileHandle hFile,	MP4TrackId trackId,	const u_int8_t* pBytes, 	u_int32_t numBytes,	MP4Duration duration,	MP4Duration renderingOffset, 	bool isSyncSample){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->WriteSample(				trackId, 				pBytes, 				numBytes, 				duration, 				renderingOffset, 				isSyncSample);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4CopySample(	MP4FileHandle srcFile,	MP4TrackId srcTrackId, 	MP4SampleId srcSampleId,	MP4FileHandle dstFile,	MP4TrackId dstTrackId,	MP4Duration dstSampleDuration){	bool rc;	u_int8_t* pBytes = NULL; 	u_int32_t numBytes = 0;	MP4Duration sampleDuration;	MP4Duration renderingOffset;	bool isSyncSample;	// Note: we leave it up to the caller to ensure that the	// source and destination tracks are compatible.	// i.e. copying audio samples into a video track 	// is unlikely to do anything useful	rc = MP4ReadSample(		srcFile,		srcTrackId,		srcSampleId,		&pBytes,		&numBytes,		NULL,		&sampleDuration,		&renderingOffset,		&isSyncSample);	if (!rc) {		return false;	}	if (dstFile == MP4_INVALID_FILE_HANDLE) {		dstFile = srcFile;	}	if (dstTrackId == MP4_INVALID_TRACK_ID) {		dstTrackId = srcTrackId;	}	if (dstSampleDuration != MP4_INVALID_DURATION) {		sampleDuration = dstSampleDuration;	}	rc = MP4WriteSample(		dstFile,		dstTrackId,		pBytes,		numBytes,		sampleDuration,		renderingOffset,				isSyncSample);	free(pBytes);	return rc;}

⌨️ 快捷键说明

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