Add skeleton of DVB functions

sdt
Kieran Kunhya 2010-12-18 15:53:28 +00:00
rodzic e076d0204e
commit 984dbdd94e
2 zmienionych plików z 122 dodań i 0 usunięć

78
dvb/dvb.c 100644
Wyświetl plik

@ -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 );
}

44
dvb/dvb.h 100644
Wyświetl plik

@ -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 );