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

📄 mp42ts.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
字号:
/* *			GPAC - Multimedia Framework C SDK * *			Copyright (c) ENST 2000-200X *					All rights reserved * *  This file is part of GPAC / mp42ts application * *  GPAC is free software; you can redistribute it and/or modify *  it under the terms of the GNU Lesser General Public License as published by *  the Free Software Foundation; either version 2, or (at your option) *  any later version. *    *  GPAC is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. *    *  You should have received a copy of the GNU Lesser General Public *  License along with this library; see the file COPYING.  If not, write to *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  * */#include <gpac/isomedia.h>#include <gpac/bifs.h>#include <gpac/mpegts.h>#include <gpac/avparse.h>#include "mp42ts.h"#if 0/************************************************************ * SL-Packetized Stream related functions  ************************************************************/void config_sample_hdr(M2TS_mux_stream *stream){	GF_SAFEALLOC(stream->SLHeader, GF_SLHeader);	if (stream->sample){		stream->SLHeader->accessUnitStartFlag = 1;		stream->SLHeader->accessUnitEndFlag = 1;		stream->SLHeader->accessUnitLength = stream->sample->dataLength;		stream->SLHeader->randomAccessPointFlag = stream->sample->IsRAP;		stream->SLHeader->compositionTimeStampFlag = 1;		stream->SLHeader->compositionTimeStamp = (stream->sample->CTS_Offset+stream->sample->DTS)*90000/1000;		stream->SLHeader->decodingTimeStampFlag = 1;		stream->SLHeader->decodingTimeStamp = stream->sample->DTS*90000/1000;		printf("SL Header: DTS "LLD", CTS "LLD"\n", stream->SLHeader->decodingTimeStamp, stream->SLHeader->compositionTimeStamp);	}}void SLpacket_in_pes(M2TS_mux_stream *stream, char *Packet, u32 Size){	config_sample_hdr(stream);	gf_sl_packetize(stream->SLConfig, stream->SLHeader, stream->sample->data, stream->sample->dataLength, &stream->sl_packet, &stream->sl_packet_len);}GF_List *CreateTSPacketsFromSLPacket(M2TS_mux_stream *stream, char *SLPacket, u32 SL_Size){	u8 table_id;	u16 table_id_extension;	MP42TS_Buffer *B;	GF_List *sections, *ts_packet;			if (stream->MP4_type == GF_ISOM_MEDIA_SCENE){		table_id = GF_M2TS_TABLE_ID_MPEG4_BIFS;	}else if (stream->MP4_type == GF_ISOM_MEDIA_OD){		table_id = GF_M2TS_TABLE_ID_MPEG4_OD;	}	table_id_extension = 0;	GF_SAFEALLOC(B, MP42TS_Buffer);	B->length = SL_Size;	B->data = SLPacket;	sections = CreateSections(B, table_id, table_id_extension, stream->SL_section_version_number);		B = EncodeSections(sections);	ts_packet = CreateTSPacketsFromSections(B, stream->mpeg2_es_pid, &stream->continuity_counter);		free(B);	stream->SL_section_version_number ++;	if (stream->SL_section_version_number > 32) stream->SL_section_version_number = 0;	return ts_packet;}MP42TS_Buffer *get_iod(GF_BitStream *bs){	GF_Err e;	GF_InitialObjectDescriptor *iod;	u32 DescSize =0;	GF_BitStream *bs_out;	MP42TS_Buffer *B;	iod = (GF_InitialObjectDescriptor *)gf_odf_new_iod();			e = gf_odf_read_iod(bs, iod, DescSize);		bs_out = gf_bs_new(NULL,0,GF_BITSTREAM_WRITE);	e = gf_odf_write_iod(bs_out, iod);	GF_SAFEALLOC(B, MP42TS_Buffer);	B->data = malloc(DescSize);	gf_bs_get_content(bs_out, &B->data, &B->length); 	gf_bs_del(bs);		return B;}/********************************************************************************** * PSI related functions **********************************************************************************//*************************** PMT *****************************/void InitializePMT(GF_M2TS_Program *program){	u32 i;		program->pcr_pid = 0;	for (i = 0; i<gf_list_count(program->streams); i++) {		M2TS_mux_stream *stream = (M2TS_mux_stream *)gf_list_get(program->streams, i);		if (stream->MP2_type == GF_M2TS_VIDEO_MPEG2) {			program->pcr_pid = stream->mpeg2_es_pid;		} else if (!program->pcr_pid) {			program->pcr_pid = stream->mpeg2_es_pid;		}	}}MP42TS_Buffer *EncodePMT(GF_M2TS_Program *program, MP42TS_Buffer *iod){	u32 i;	MP42TS_Buffer *B;	return B;}void CreateTSPacketsForPMTs(M2TS_muxer *muxer){	u32 i, j, nb_progs;	GF_M2TS_Program *program;	M2TS_mux_stream *stream;	MP42TS_Buffer *B;	GF_List *sections;	Bool use_iod = 0;	MP42TS_Buffer *B_iod;		muxer->pmt_ts_packet = gf_list_new();	nb_progs = gf_list_count(muxer->pat_table);	for (i= 0; i<nb_progs ;i++) {		program = gf_list_get(muxer->pat_table,i);		program->streams = gf_list_new();		for (j = 0; j < gf_list_count(muxer->streams); j++) {			stream = gf_list_get(muxer->streams, j);									stream->mpeg2_es_pid = 100*(i+1)+10*(j+1);						gf_list_add(program->streams, stream);		}		InitializePMT(program);		if (use_iod) {			GF_ObjectDescriptor *iod;			GF_BitStream *bs_iod;				/* iod */				iod = (GF_ObjectDescriptor *)gf_isom_get_root_od(muxer->mp4_in);				/* Mise 

⌨️ 快捷键说明

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