From 984dbdd94eb6bba048d01c0f961896eadf36e379 Mon Sep 17 00:00:00 2001 From: Kieran Kunhya Date: Sat, 18 Dec 2010 15:53:28 +0000 Subject: [PATCH] Add skeleton of DVB functions --- dvb/dvb.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ dvb/dvb.h | 44 +++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 dvb/dvb.c create mode 100644 dvb/dvb.h diff --git a/dvb/dvb.c b/dvb/dvb.c new file mode 100644 index 0000000..d9d683b --- /dev/null +++ b/dvb/dvb.c @@ -0,0 +1,78 @@ +/***************************************************************************** + * dvb.c : DVB functions + ***************************************************************************** + * Copyright (C) 2010 Kieran Kunhya + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. + *****************************************************************************/ + +#include "../common.h" +#include "dvb.h" + +/* Descriptors */ +void write_stream_identifier_descriptor( bs_t *s, uint8_t stream_identifier ) +{ + bs_write( s, 8, STREAM_IDENTIFIER_DESCRIPTOR_TAG ); // descriptor_tag + bs_write( s, 8, 1 ); // descriptor_length + bs_write( s, 8, stream_identifier ); // component_tag +} + +void write_dvb_au_information( ts_writer_t *w, bs_t *s, ts_int_stream_t *stream, ts_int_frame_t *frame ) +{ + bs_t q; + uint8_t temp[100]; + + bs_write( s, 8, AU_INFORMATION_DATA_FIELD ); // data_field_tag + bs_init( &q, temp, 100 ); + + if( stream->stream_format == LIBMPEGTS_VIDEO_MPEG2 ) + bs_write( &q, 4, 1 ); // AU_coding_format + else if( stream->stream_format == LIBMPEGTS_VIDEO_H264 ) + bs_write( &q, 4, 0x02 ); // AU_coding_format + + bs_write( &q, 4, 0 ); // AU_coding_type_information + bs_write( &q, 2, 0 ); // AU_ref_pic_idc + bs_write( &q, 2, 0 ); // AU_pic_struct + + bs_write1( &q, 1 ); // AU_PTS_present_flag + bs_write1( &q, 1 ); // AU_profile_info_present_flag + bs_write1( &q, 1 ); // AU_stream_info_present_flag + bs_write1( &q, 0 ); // AU_trick_mode_info_present_flag + + bs_write32( &q, 0 & 0xffffffff ); // AU_PTS_32 + + bs_write( &q, 4, 0 ); // reserved + bs_write( &q, 4, stream->dvb_au_frame_rate ); // AU_frame_rate_code + + bs_write( &q, 8, stream->mpegvideo_ctx->profile & 0xff ); // profile_idc + + if( stream->stream_format == LIBMPEGTS_VIDEO_H264 ) + { + bs_write1( &q, stream->mpegvideo_ctx->profile == H264_BASELINE ); // constraint_set0_flag + bs_write1( &q, stream->mpegvideo_ctx->profile <= H264_MAIN ); // constraint_set1_flag + } + else + bs_write( &q, 2, 0 ); + + bs_write1( &q, 0 ); // constraint_set2_flag + bs_write( &q, 5, 0 ); // AU_AVC_compatible_flags + bs_write( &q, 8, stream->mpegvideo_ctx->level & 0xff ); // level_idc + + /* reserved bytes */ + + bs_flush( &q ); + bs_write( s, 8, bs_pos( &q ) >> 3 ); // data_field_length + write_bytes( s, temp, bs_pos( &q ) >> 3 ); +} diff --git a/dvb/dvb.h b/dvb/dvb.h new file mode 100644 index 0000000..9e663db --- /dev/null +++ b/dvb/dvb.h @@ -0,0 +1,44 @@ +/***************************************************************************** + * dvb.h : DVB specific headers + ***************************************************************************** + * Copyright (C) 2010 Kieran Kunhya + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. + *****************************************************************************/ + +#ifndef LIBMPEGTS_DVB_H +#define LIBMPEGTS_DVB_H + +/* Descriptor Tags */ +#define STREAM_IDENTIFIER_DESCRIPTOR_TAG 0x52 +#define DVB_AC3_DESCRIPTOR_TAG 0x6a +#define DVB_EAC3_DESCRIPTOR_TAG 0x7a + +/* PIDs */ +#define SDT_PID 0x0011 +#define EIT_PID 0x0012 +#define TDT_PID 0x0014 + +/* TIDs */ +#define SDT_TID 0x42 +#define EIT_TID 0x4e +#define TDT_TID 0x70 +/* Private Data Bytes data_field_tags */ +#define ANNOUNCEMENT_SWITCHING_DATA_FIELD 0x01 +#define AU_INFORMATION_DATA_FIELD 0x02 +#define PVR_ASSIST_INFORMATION_DATA_FIELD 0x03 + +void write_stream_identifier_descriptor( bs_t *s, uint8_t stream_identifier ); +void write_dvb_au_information( ts_writer_t *w, bs_t *s, ts_int_stream_t *stream, ts_int_frame_t *frame );