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

📄 esds.c

📁 完整的RTP RTSP代码库
💻 C
字号:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ *  * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. *  * The Original Code is MPEG4IP. *  * The Initial Developer of the Original Code is Cisco Systems Inc. * Portions created by Cisco Systems Inc. are * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved. *  * Contributor(s):  *		Dave Mackie		dmackie@cisco.com */#include "quicktime.h"int quicktime_esds_init(quicktime_esds_t *esds){	esds->version = 0;	esds->flags = 0;	esds->decoderConfigLen = 0;	esds->decoderConfig = NULL;	return 0;}int quicktime_esds_get_decoder_config(quicktime_esds_t* esds, u_char** ppBuf, int* pBufSize){	if (esds->decoderConfig == NULL || esds->decoderConfigLen == 0) {		*ppBuf = NULL;		*pBufSize = 0;	} else {		*ppBuf = malloc(esds->decoderConfigLen);		if (*ppBuf == NULL) {			*pBufSize = 0;			return 1;		}		memcpy(*ppBuf, esds->decoderConfig, esds->decoderConfigLen);		*pBufSize = esds->decoderConfigLen;	}	return 0;}int quicktime_esds_set_decoder_config(quicktime_esds_t* esds, u_char* pBuf, int bufSize){	free(esds->decoderConfig);	esds->decoderConfig = malloc(bufSize);	if (esds->decoderConfig) {		memcpy(esds->decoderConfig, pBuf, bufSize);		esds->decoderConfigLen = bufSize;		return 0;	}	return 1;}int quicktime_esds_delete(quicktime_esds_t *esds){	free(esds->decoderConfig);	return 0;}int quicktime_esds_dump(quicktime_esds_t *esds){	int i;	printf("       elementary stream descriptor\n");	printf("        version %d\n", esds->version);	printf("        flags %ld\n", esds->flags);	printf("        decoder config ");	for (i = 0; i < esds->decoderConfigLen; i++) {			printf("%02x ", esds->decoderConfig[i]);	}	printf("\n");}int quicktime_read_esds(quicktime_t *file, quicktime_esds_t *esds){	u_int8_t tag;	u_int32_t length;	esds->version = quicktime_read_char(file);	esds->flags = quicktime_read_int24(file);	/* get and verify ES_DescrTag */	tag = quicktime_read_char(file);	if (tag == 0x03) {		/* read length */		if (quicktime_read_mp4_descr_length(file) < 5 + 15) {			return 1;		}		/* skip 3 bytes */		quicktime_set_position(file, quicktime_position(file) + 3);	} else {		/* skip 2 bytes */		quicktime_set_position(file, quicktime_position(file) + 2);	}	/* get and verify DecoderConfigDescrTab */	if (quicktime_read_char(file) != 0x04) {		return 1;	}	/* read length */	if (quicktime_read_mp4_descr_length(file) < 15) {		return 1;	}	/* skip 13 bytes */	quicktime_set_position(file, quicktime_position(file) + 13);	/* get and verify DecSpecificInfoTag */	if (quicktime_read_char(file) != 0x05) {		return 1;	}	/* read length */	esds->decoderConfigLen = quicktime_read_mp4_descr_length(file); 	free(esds->decoderConfig);	esds->decoderConfig = malloc(esds->decoderConfigLen);	if (esds->decoderConfig) {		quicktime_read_data(file, esds->decoderConfig, esds->decoderConfigLen);	} else {		esds->decoderConfigLen = 0;	}	/* will skip the remainder of the atom */	return 0;}int quicktime_write_esds_common(quicktime_t *file, quicktime_esds_t *esds, int esid, u_int objectType, u_int streamType){	quicktime_atom_t atom;	if (!file->use_mp4) {		return 0;	}	quicktime_atom_write_header(file, &atom, "esds");	quicktime_write_char(file, esds->version);	quicktime_write_int24(file, esds->flags);	quicktime_write_char(file, 0x03);	/* ES_DescrTag */	quicktime_write_mp4_descr_length(file, 		3 + (5 + (13 + (5 + esds->decoderConfigLen))) + 3, FALSE);	quicktime_write_int16(file, esid);	quicktime_write_char(file, 0x10);	/* streamPriorty = 16 (0-31) */	/* DecoderConfigDescriptor */	quicktime_write_char(file, 0x04);	/* DecoderConfigDescrTag */	quicktime_write_mp4_descr_length(file, 		13 + (5 + esds->decoderConfigLen), FALSE);	quicktime_write_char(file, objectType); /* objectTypeIndication */	quicktime_write_char(file, streamType); /* streamType */	quicktime_write_int24(file, 0);		/* buffer size */	quicktime_write_int32(file, 0);		/* max bitrate */	quicktime_write_int32(file, 0);		/* average bitrate */	quicktime_write_char(file, 0x05);	/* DecSpecificInfoTag */	quicktime_write_mp4_descr_length(file, esds->decoderConfigLen, FALSE);	quicktime_write_data(file, esds->decoderConfig, esds->decoderConfigLen);	/* SLConfigDescriptor */	quicktime_write_char(file, 0x06);	/* SLConfigDescrTag */	quicktime_write_char(file, 0x01);	/* length */	quicktime_write_char(file, 0x02);	/* constant in mp4 files */	/* no IPI_DescrPointer */	/* no IP_IdentificationDataSet */	/* no IPMP_DescriptorPointer */	/* no LanguageDescriptor */	/* no QoS_Descriptor */	/* no RegistrationDescriptor */	/* no ExtensionDescriptor */	quicktime_atom_write_footer(file, &atom);}int quicktime_write_esds_audio(quicktime_t *file, quicktime_esds_t *esds, int esid){	return quicktime_write_esds_common(file, esds, esid, (u_int)0x40, (u_int)0x05);}int quicktime_write_esds_video(quicktime_t *file, quicktime_esds_t *esds, int esid){	return quicktime_write_esds_common(file, esds, esid, (u_int)0x20, (u_int)0x04);}

⌨️ 快捷键说明

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