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

📄 ctts.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_ctts_init(quicktime_ctts_t *ctts){	ctts->version = 0;	ctts->flags = 0;	ctts->total_entries = 0;	ctts->entries_allocated = 0;}int quicktime_ctts_init_table(quicktime_ctts_t *ctts){	if (!ctts->entries_allocated) {		ctts->entries_allocated = 1;		ctts->table = (quicktime_ctts_table_t*)			malloc(sizeof(quicktime_ctts_table_t) * ctts->entries_allocated);		ctts->total_entries = 1;	}}int quicktime_ctts_init_common(quicktime_t *file, quicktime_ctts_t *ctts){	quicktime_ctts_table_t *table;	quicktime_ctts_init_table(ctts);	table = &(ctts->table[0]);	table->sample_count = 0;      /* need to set this when closing */	table->sample_offset = 0;}int quicktime_ctts_delete(quicktime_ctts_t *ctts){	if (ctts->total_entries) {		free(ctts->table);	}	ctts->total_entries = 0;}int quicktime_ctts_dump(quicktime_ctts_t *ctts){	int i;	printf("     composition time to sample\n");	printf("      version %d\n", ctts->version);	printf("      flags %d\n", ctts->flags);	printf("      total_entries %d\n", ctts->total_entries);	for(i = 0; i < ctts->total_entries; i++) {		printf("       count %ld offset %ld\n", 			ctts->table[i].sample_count,			ctts->table[i].sample_offset);	}}int quicktime_read_ctts(quicktime_t *file, quicktime_ctts_t *ctts){	int i;	ctts->version = quicktime_read_char(file);	ctts->flags = quicktime_read_int24(file);	ctts->total_entries = quicktime_read_int32(file);	ctts->table = (quicktime_ctts_table_t*)		malloc(sizeof(quicktime_ctts_table_t) * ctts->total_entries);	for (i = 0; i < ctts->total_entries; i++) {		ctts->table[i].sample_count = quicktime_read_int32(file);		ctts->table[i].sample_offset = quicktime_read_int32(file);	}}int quicktime_write_ctts(quicktime_t *file, quicktime_ctts_t *ctts){	int i;	quicktime_atom_t atom;	if (!file->use_mp4) {		return;	}	if (ctts->total_entries == 1 && ctts->table[0].sample_offset == 0) {		return;	}	quicktime_atom_write_header(file, &atom, "ctts");	quicktime_write_char(file, ctts->version);	quicktime_write_int24(file, ctts->flags);	quicktime_write_int32(file, ctts->total_entries);	for(i = 0; i < ctts->total_entries; i++) {		quicktime_write_int32(file, ctts->table[i].sample_count);		quicktime_write_int32(file, ctts->table[i].sample_offset);	}	quicktime_atom_write_footer(file, &atom);}int quicktime_update_ctts(quicktime_ctts_t *ctts, long sample_offset){	if (sample_offset == ctts->table[ctts->total_entries-1].sample_offset) {		ctts->table[ctts->total_entries-1].sample_count++;	} else {		/* need a new entry in the table */		/* allocate more entries if necessary */		if (ctts->total_entries >= ctts->entries_allocated) {			ctts->entries_allocated *= 2;			ctts->table = (quicktime_ctts_table_t*)realloc(ctts->table,				sizeof(quicktime_ctts_table_t) * ctts->entries_allocated);		}			ctts->table[ctts->total_entries].sample_count = 1;		ctts->table[ctts->total_entries].sample_offset = sample_offset;		ctts->total_entries++;	}}

⌨️ 快捷键说明

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