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

📄 mp4.cpp

📁 mpeg4 video codec mpeg4 video codec
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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;}/* 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" 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;}extern "C" bool MP4ReferenceSample(	MP4FileHandle srcFile,	MP4TrackId srcTrackId, 	MP4SampleId srcSampleId,	MP4FileHandle dstFile,	MP4TrackId dstTrackId,	MP4Duration dstSampleDuration){	// LATER Not yet implemented	return false;}extern "C" u_int32_t MP4GetSampleSize(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleSize(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" u_int32_t MP4GetTrackMaxSampleSize(	MP4FileHandle hFile,	MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackMaxSampleSize(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" MP4SampleId MP4GetSampleIdFromTime(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4Timestamp when, 	bool wantSyncSample){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleIdFromTime(				trackId, when, wantSyncSample);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_SAMPLE_ID;}extern "C" MP4Timestamp MP4GetSampleTime(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleTime(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TIMESTAMP;}extern "C" MP4Duration MP4GetSampleDuration(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleDuration(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" MP4Duration MP4GetSampleRenderingOffset(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleRenderingOffset(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" bool MP4SetSampleRenderingOffset(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId,	MP4Duration renderingOffset){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetSampleRenderingOffset(				trackId, sampleId, renderingOffset);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" int8_t MP4GetSampleSync(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleSync(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return -1;}extern "C" u_int64_t MP4ConvertFromMovieDuration(	MP4FileHandle hFile,	MP4Duration duration,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertFromMovieDuration(				duration, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;

⌨️ 快捷键说明

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