588 lines
53 KiB
C#
588 lines
53 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Npgsql;
|
|
using NpgsqlTypes;
|
|
using skyscraper5.Dvb.Descriptors;
|
|
using skyscraper5.Dvb.Descriptors.Extension;
|
|
using skyscraper5.Iso14496_1;
|
|
using skyscraper5.Iso14496_1.Descriptors;
|
|
using skyscraper5.Mpeg2.Descriptors;
|
|
using skyscraper5.Mpeg2.Psi.Model;
|
|
using skyscraper5.Skyscraper.Scraper.Storage.Utilities;
|
|
|
|
namespace skyscraper5.Data.PostgreSql
|
|
{
|
|
public partial class PostgresqlDataStore
|
|
{
|
|
private HashSet<DatabaseKeyPmtEntry> knownPmts;
|
|
public bool TestForPmtEvent(int currentNetworkId, int currentTransportStreamId, ProgramMapping mapping)
|
|
{
|
|
if (knownPmts == null)
|
|
knownPmts = new HashSet<DatabaseKeyPmtEntry>();
|
|
DatabaseKeyPmtEntry entry = new DatabaseKeyPmtEntry(currentNetworkId, currentTransportStreamId, mapping.ProgramNumber);
|
|
if (knownPmts.Contains(entry))
|
|
return true;
|
|
|
|
bool result = false;
|
|
using (NpgsqlConnection connection = new NpgsqlConnection(connectionStringBuilder.ToString()))
|
|
{
|
|
connection.Open();
|
|
NpgsqlCommand command = connection.CreateCommand();
|
|
command.CommandText = "SELECT dateadded FROM dvb_pmt WHERE cnid = @cnid AND ctsid = @ctsid AND program_number = @program_number";
|
|
command.Parameters.AddWithValue("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddWithValue("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddWithValue("@program_number", NpgsqlDbType.Integer, (int)mapping.ProgramNumber);
|
|
NpgsqlDataReader dataReader = command.ExecuteReader();
|
|
result = dataReader.Read();
|
|
dataReader.Close();
|
|
connection.Close();
|
|
}
|
|
|
|
if (result)
|
|
knownPmts.Add(entry);
|
|
return result;
|
|
}
|
|
|
|
public bool StorePmtEvent(int currentNetworkId, int currentTransportStreamId, ProgramMapping mapping)
|
|
{
|
|
DatabaseKeyPmtEntry entry = new DatabaseKeyPmtEntry(currentNetworkId, currentTransportStreamId, mapping.ProgramNumber);
|
|
EnqueueTask(x => WritePmtEntry(x, currentNetworkId, currentTransportStreamId, mapping));
|
|
knownPmts.Add(entry);
|
|
return true;
|
|
}
|
|
|
|
private void WritePmtEntry(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ProgramMapping mapping)
|
|
{
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText = "SELECT dateadded FROM dvb_pmt WHERE cnid = @cnid AND ctsid = @ctsid AND program_number = @program_number";
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, mapping.ProgramNumber);
|
|
NpgsqlDataReader dataReader = command.ExecuteReader();
|
|
bool alreadyKnown = dataReader.Read();
|
|
dataReader.Close();
|
|
command.Dispose();
|
|
|
|
if (alreadyKnown)
|
|
return;
|
|
|
|
command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt (cnid, ctsid, program_number, pcr_pid, maximum_bitrate,multiplex_buffer_utilization_bound_valid_flag, multiplex_ltw_offset_lower_bound,multiplex_ltw_offset_upper_bound, clock_accuracy_exponent, clock_accuracy_integer,\r\n external_clock_reference_indicator, sb_leak_rate, sb_size, ca_pid, ca_system_id, ca_private_data,\r\n private_data_specifiger, registration_additional_identification_info,\r\n registration_format_identifier, new_onid, new_sid, new_tsid, component_tag,\r\n metadata_input_leak_rate, metadata_buffer_size, metadata_output_leak_rate, scrambling_mode, es_id,\r\n audio_type, iso_639_language_code, scope_of_iod_label, iod_label, private_data_indicator,\r\n frame_rate, chroma_format, \"constrained_parameter_flag\", frame_rate_extension_flag, mpeg1_only_flag,\r\n multiple_framerate_flag, profile_and_level_indication, still_picture_flag, metadata_program_number,\r\n metadata_application_format, metadata_application_format_identifier, metadata_format,\r\n metadata_format_identifier, metadata_locator_record, metadata_locator_record_flag,\r\n metadata_service_id, mpeg_carriage_flag, metadata_private_data, transport_stream_id,\r\n transport_stream_location, free_format, audio_stream_id, layer, variable_rate_audio,\r\n copy_control_private_data, alignment_type, hierarchy_type, hierarchy_layer_type, tref_present_flag,hierarchy_channel, no_view_scalability_flag, hierarchy_embedded_layer_index,no_quality_scalability_flag, no_spatial_scalability_flag, no_temporal_scalability_flag)" +
|
|
"values " +
|
|
"(@cnid,@ctsid,@program_number,@pcr_pid,@maximum_bitrate,@multiplex_buffer_utilization_bound_valid_flag,@multiplex_ltw_offset_lower_bound,@multiplex_ltw_offset_upper_bound,@clock_accuracy_exponent, @clock_accuracy_integer,@external_clock_reference_indicator, @sb_leak_rate, @sb_size, @ca_pid, @ca_system_id, @ca_private_data,\r\n @private_data_specifiger, @registration_additional_identification_info,\r\n @registration_format_identifier, @new_onid, @new_sid, @new_tsid, @component_tag,\r\n @metadata_input_leak_rate, @metadata_buffer_size, @metadata_output_leak_rate, @scrambling_mode, @es_id,\r\n @audio_type, @iso_639_language_code, @scope_of_iod_label, @iod_label, @private_data_indicator,\r\n @frame_rate, @chroma_format, @constrained_parameter_flag, @frame_rate_extension_flag, @mpeg1_only_flag,\r\n @multiple_framerate_flag, @profile_and_level_indication, @still_picture_flag, @metadata_program_number,\r\n @metadata_application_format, @metadata_application_format_identifier, @metadata_format,\r\n @metadata_format_identifier, @metadata_locator_record, @metadata_locator_record_flag,\r\n @metadata_service_id, @mpeg_carriage_flag, @metadata_private_data, @transport_stream_id,\r\n @transport_stream_location, @free_format, @audio_stream_id, @layer, @variable_rate_audio,\r\n @copy_control_private_data, @alignment_type, @hierarchy_type, @hierarchy_layer_type, @tref_present_flag,\r\n @hierarchy_channel, @no_view_scalability_flag, @hierarchy_embedded_layer_index,@no_quality_scalability_flag, @no_spatial_scalability_flag, @no_temporal_scalability_flag)";
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, mapping.ProgramNumber);
|
|
command.Parameters.AddParameter("@pcr_pid", NpgsqlDbType.Integer, mapping.PcrPid);
|
|
command.Parameters.AddParameter("@maximum_bitrate", NpgsqlDbType.Bigint, mapping.MaximumBitrate);
|
|
command.Parameters.AddParameter("@multiplex_buffer_utilization_bound_valid_flag", NpgsqlDbType.Boolean, mapping.MultiplexBufferUtilizationBoundValidFlag);
|
|
command.Parameters.AddParameter("@multiplex_ltw_offset_lower_bound", NpgsqlDbType.Integer, mapping.MultiplexLtwOffsetLowerBound);
|
|
command.Parameters.AddParameter("@multiplex_ltw_offset_upper_bound", NpgsqlDbType.Integer, mapping.MultiplexLtwOffsetUpperBound);
|
|
command.Parameters.AddParameter("@clock_accuracy_exponent", NpgsqlDbType.Integer, mapping.ClockAccuracyExponent);
|
|
command.Parameters.AddParameter("@clock_accuracy_integer", NpgsqlDbType.Integer, mapping.ClockAccuracyInteger);
|
|
command.Parameters.AddParameter("@external_clock_reference_indicator", NpgsqlDbType.Boolean, mapping.ExternalClockReferenceIndicator);
|
|
//@sb_leak_rate,@sb_size,@ca_pid,@ca_system_id,@ca_private_data,@private_data_specifiger,@registration_additional_identification_info,@registration_format_identifier,@new_onid,@new_sid,@new_tsid,@component_tag,
|
|
command.Parameters.AddParameter("@sb_leak_rate", NpgsqlDbType.Bigint, mapping.SbLeakRate);
|
|
command.Parameters.AddParameter("@sb_size", NpgsqlDbType.Bigint, mapping.SbSize);
|
|
command.Parameters.AddParameter("@ca_pid", NpgsqlDbType.Integer, mapping.CaPid);
|
|
command.Parameters.AddParameter("@ca_system_id", NpgsqlDbType.Integer, mapping.CaSystemId);
|
|
command.Parameters.AddParameter("@ca_private_data", NpgsqlDbType.Bytea, mapping.CaPrivateData);
|
|
command.Parameters.AddParameter("@private_data_specifiger", NpgsqlDbType.Bigint, mapping.PrivateDataIndicator);
|
|
command.Parameters.AddParameter("@registration_additional_identification_info", NpgsqlDbType.Bytea, mapping.RegistrationAdditionalIdentificationInfo);
|
|
command.Parameters.AddParameter("@registration_format_identifier", NpgsqlDbType.Bigint, mapping.RegistrationFormatIdentifier);
|
|
command.Parameters.AddParameter("@new_onid", NpgsqlDbType.Integer, mapping.NewOriginalNetworkId);
|
|
command.Parameters.AddParameter("@new_sid", NpgsqlDbType.Integer, mapping.NewServiceId);
|
|
command.Parameters.AddParameter("@new_tsid", NpgsqlDbType.Integer, mapping.NewTransportStreamId);
|
|
command.Parameters.AddParameter("@component_tag", NpgsqlDbType.Integer, mapping.ComponentTag);
|
|
//@metadata_input_leak_rate,@metadata_buffer_size,@metadata_output_leak_rate,@scrambling_mode,@es_id,@audio_type,@iso_639_language_code,@scope_of_iod_label,@iod_label,@private_data_indicator,
|
|
command.Parameters.AddParameter("@metadata_input_leak_rate", NpgsqlDbType.Integer, mapping.MetadataInputLeakRate);
|
|
command.Parameters.AddParameter("@metadata_buffer_size", NpgsqlDbType.Integer, mapping.MetadataBufferSize);
|
|
command.Parameters.AddParameter("@metadata_output_leak_rate", NpgsqlDbType.Integer, mapping.MetadataOutputLeakRate);
|
|
command.Parameters.AddParameter("@scrambling_mode", NpgsqlDbType.Integer, mapping.ScramblingMode);
|
|
command.Parameters.AddParameter("@es_id", NpgsqlDbType.Integer, mapping.EsId);
|
|
command.Parameters.AddParameter("@audio_type", NpgsqlDbType.Integer, (int?)mapping.AudioType);
|
|
command.Parameters.AddParameter("@iso_639_language_code", NpgsqlDbType.Varchar, mapping.Iso639LanguageCode);
|
|
command.Parameters.AddParameter("@scope_of_iod_label", NpgsqlDbType.Integer, mapping.ScopeOfIodLabel);
|
|
command.Parameters.AddParameter("@iod_label", NpgsqlDbType.Integer, mapping.IodLabel);
|
|
command.Parameters.AddParameter("@private_data_indicator", NpgsqlDbType.Bigint, mapping.PrivateDataIndicator);
|
|
//@frame_rate,@chroma_format,@constrained_parameter_flag,@frame_rate_extension_flag,@mpeg1_only_flag,@multiple_framerate_flag,@profile_and_level_indication,@still_picture_flag,@metadata_program_number,
|
|
command.Parameters.AddParameter("@frame_rate", NpgsqlDbType.Double, mapping.FrameRate);
|
|
command.Parameters.AddParameter("@chroma_format", NpgsqlDbType.Integer, mapping.ChromaFormat);
|
|
command.Parameters.AddParameter("@constrained_parameter_flag", NpgsqlDbType.Boolean, mapping.ConstrainedParameterFlag);
|
|
command.Parameters.AddParameter("@frame_rate_extension_flag", NpgsqlDbType.Integer, mapping.FrameRateExtensionFlag);
|
|
command.Parameters.AddParameter("@mpeg1_only_flag", NpgsqlDbType.Boolean, mapping.Mpeg1OnlyFlag);
|
|
command.Parameters.AddParameter("@multiple_framerate_flag", NpgsqlDbType.Boolean, mapping.MultipleFramerateFlag);
|
|
command.Parameters.AddParameter("@profile_and_level_indication", NpgsqlDbType.Integer, mapping.ProfileAndLevelIndication);
|
|
command.Parameters.AddParameter("@still_picture_flag", NpgsqlDbType.Boolean, mapping.StillPictureFlag);
|
|
command.Parameters.AddParameter("@metadata_program_number", NpgsqlDbType.Integer, mapping.MetadataProgramNumber);
|
|
//@metadata_application_format,@metadata_application_format_identifier,@metadata_format,@metadata_format_identifier,@metadata_locator_record,@metadata_locator_record_flag,@metadata_service_id,
|
|
command.Parameters.AddParameter("@metadata_application_format", NpgsqlDbType.Integer, mapping.MetadataApplicationFormat);
|
|
command.Parameters.AddParameter("@metadata_application_format_identifier", NpgsqlDbType.Bigint, mapping.MetadataApplicationFormatIdentifier);
|
|
command.Parameters.AddParameter("@metadata_format", NpgsqlDbType.Integer, mapping.MetadataFormat);
|
|
command.Parameters.AddParameter("@metadata_format_identifier", NpgsqlDbType.Bigint, mapping.MetadataFormatIdentifier);
|
|
command.Parameters.AddParameter("@metadata_locator_record", NpgsqlDbType.Bytea, mapping.MetadataLocatorRecord);
|
|
command.Parameters.AddParameter("@metadata_locator_record_flag", NpgsqlDbType.Boolean, mapping.MetadataLocatorRecordFlag);
|
|
command.Parameters.AddParameter("@metadata_service_id", NpgsqlDbType.Integer, mapping.MetadataServiceId);
|
|
//@mpeg_carriage_flag,@metadata_private_data,@transport_stream_id,@transport_stream_location,@free_format,@audio_stream_id,@layer,@variable_rate_audio,@copy_control_private_data,@alignment_type,
|
|
command.Parameters.AddParameter("@mpeg_carriage_flag", NpgsqlDbType.Integer, mapping.MpegCarriageFlag);
|
|
command.Parameters.AddParameter("@metadata_private_data", NpgsqlDbType.Bytea, mapping.MetadataPrivateData);
|
|
command.Parameters.AddParameter("@transport_stream_id", NpgsqlDbType.Integer, mapping.TransportStreamId);
|
|
command.Parameters.AddParameter("@transport_stream_location", NpgsqlDbType.Integer, mapping.TransportStreamLocation);
|
|
command.Parameters.AddParameter("@free_format", NpgsqlDbType.Boolean, mapping.FreeFormat);
|
|
command.Parameters.AddParameter("@audio_stream_id", NpgsqlDbType.Boolean, mapping.AudioStreamId);
|
|
command.Parameters.AddParameter("@layer", NpgsqlDbType.Integer, mapping.Layer);
|
|
command.Parameters.AddParameter("@variable_rate_audio", NpgsqlDbType.Boolean, mapping.VariableRateAudio);
|
|
command.Parameters.AddParameter("@copy_control_private_data", NpgsqlDbType.Bytea, mapping.CopyControlPrivateData);
|
|
command.Parameters.AddParameter("@alignment_type", NpgsqlDbType.Integer, mapping.AlignmentType);
|
|
//@hierarchy_type,@hierarchy_layer_type,@tref_present_flag,@hierarchy_channel,@no_view_scalability_flag,@hierarchy_embedded_layer_index,@no_quality_scalability_flag,@no_spatial_scalability_flag,
|
|
command.Parameters.AddParameter("@hierarchy_type", NpgsqlDbType.Integer, mapping.HierarchyType);
|
|
command.Parameters.AddParameter("@hierarchy_layer_type", NpgsqlDbType.Integer, mapping.HierarchyLayerType);
|
|
command.Parameters.AddParameter("@tref_present_flag", NpgsqlDbType.Boolean, mapping.TrefPresentFlag);
|
|
command.Parameters.AddParameter("@hierarchy_channel", NpgsqlDbType.Integer, mapping.HierarchyChannel);
|
|
command.Parameters.AddParameter("@no_view_scalability_flag", NpgsqlDbType.Boolean, mapping.NoViewScalabilityFlag);
|
|
command.Parameters.AddParameter("@hierarchy_embedded_layer_index", NpgsqlDbType.Integer, mapping.HierarchyEmbeddedLayerIndex);
|
|
command.Parameters.AddParameter("@no_quality_scalability_flag", NpgsqlDbType.Boolean, mapping.NoQualityScalabilityFlag);
|
|
command.Parameters.AddParameter("@no_spatial_scalability_flag", NpgsqlDbType.Boolean, mapping.NoSpatialScalabilityFlag);
|
|
//@no_temporal_scalability_flag)";
|
|
command.Parameters.AddParameter("@no_temporal_scalability_flag", NpgsqlDbType.Boolean, mapping.NoTemporalScalabilityFlag);
|
|
|
|
command.Parameters.CheckNulls();
|
|
command.ExecuteNonQuery();
|
|
|
|
WritePmtInitialObjectDescriptor(conn, currentNetworkId, currentTransportStreamId, mapping);
|
|
WritePmtStreams(conn, currentNetworkId, currentTransportStreamId, mapping);
|
|
}
|
|
|
|
private void WritePmtStreams(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ProgramMapping mapping)
|
|
{
|
|
if (mapping.Streams == null)
|
|
return;
|
|
|
|
bool[] streamsDone = new bool[0x1fff];
|
|
foreach (ProgramMappingStream mappingStream in mapping.Streams)
|
|
{
|
|
if (streamsDone[mappingStream.ElementaryPid])
|
|
continue;
|
|
|
|
WritePmtStream(conn, currentNetworkId, currentTransportStreamId, mapping.ProgramNumber, mappingStream);
|
|
streamsDone[mappingStream.ElementaryPid] = true;
|
|
}
|
|
}
|
|
|
|
private void WritePmtStream(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt_streams (cnid, ctsid, program_number, stream_type, elementary_pid, component_tag, audio_type, iso_639_language_code, carousel_format_id, carousel_id, data_broadcast_id," +
|
|
" data_broadcast_selector, supplementary_independant_stream, editorial_classification, supplementary_language_code, asvc, bsid, component_type, main_id, frame_rate, mpeg1_only_flag, chroma_format, " +
|
|
"the_constrained_parameter_flag, frame_rate_extension_flag, multiple_framerate_flag, profile_and_level_indication, still_picture_flag, alignment_type, maximum_bitrate, audio_stream_id, free_format, " +
|
|
"layer, variable_rate_audio, constraint_set0_flag, avc_24hour_picture_flag, avc_compatible_flag, avc_still_present, constraint_set1_flag, constraint_set2_flag, constraint_set3_flag, " +
|
|
"constraint_set4_flag, constraint_set5_flag, frame_packing_sei_not_present, level_idc, profile_rdc, ca_pid, ca_system_id, ca_private_data, private_data_specifier, format_identifier, " +
|
|
"additional_identification_info, association_tag_selector, association_tag_transaction_id, association_tag_use, association_tag_private_data, association_tag_timeout, aac_type, " +
|
|
"aac_additional_info, aac_profile_and_level, saoc_de_flag, ancillary_data_identifier, mix_info_exists, substream1, substream2, substream3, copied_44bits, frame_only_constraint_flag, " +
|
|
"hdr_wcg_idc, hevc_24hr_picture_present_flag, hevc_still_present_flag, interlaced_source_flag, non_packed_constraint_flag, profile_compatibility_indication, profile_idc, " +
|
|
"profile_space, progressive_source_flag, sub_pic_hrd_params_not_present_flag, temporal_id_max, tier_flag, temporal_id_min, ac4_channel_mode, ac4_dialog_enhancement, ac4_dsi, " +
|
|
"leak_valid_flag, sb_leak_rate, sb_size, private_data_indicator, \"_90khz_flag\", picture_and_timing_info_present_flag, hdr_management_valid_flag, k, n, num_units_in_tick, " +
|
|
"target_schedule_idx, target_schedule_idx_not_present_flag, adaption_field_data_identifier, fixed_frame_rate_flag, picture_to_display_conversion_flag, temporal_poc_flag, " +
|
|
"mpeg4_audio_profile_and_level, aac_channel_configuration, aac_profile, aac_additional_information, scrambling_mode, related_content_descriptor_present, num_t2mi_streams, " +
|
|
"t2mi_stream_id, pcr_iscr_common_clock_flag, audio_specific_config, audio_profile_level_indication)\r\n " +
|
|
"values\r\n " +
|
|
"(@cnid,@ctsid,@program_number,@stream_type,@elementary_pid,@component_tag,@audio_type,@iso_639_language_code,@carousel_format_id,@carousel_id,@data_broadcast_id,@data_broadcast_selector,@supplementary_independant_stream, @editorial_classification,\r\n @supplementary_language_code, @asvc, @bsid, @component_type, @main_id, @frame_rate,\r\n @mpeg1_only_flag, @chroma_format, @constrained_parameter_flag, @frame_rate_extension_flag,\r\n @multiple_framerate_flag, @profile_and_level_indication, @still_picture_flag, @alignment_type,\r\n @maximum_bitrate, @audio_stream_id, @free_format, @layer, @variable_rate_audio,\r\n @constraint_set0_flag, @avc_24hour_picture_flag, @avc_compatible_flag, @avc_still_present,\r\n @constraint_set1_flag, @constraint_set2_flag, @constraint_set3_flag, @constraint_set4_flag,\r\n @constraint_set5_flag, @frame_packing_sei_not_present, @level_idc, @profile_rdc, @ca_pid,\r\n @ca_system_id, @ca_private_data, @private_data_specifier, @format_identifier,\r\n @additional_identification_info, @association_tag_selector, @association_tag_transaction_id,\r\n @association_tag_use, @association_tag_private_data, @association_tag_timeout, @aac_type,\r\n @aac_additional_info, @aac_profile_and_level, @saoc_de_flag, @ancillary_data_identifier,\r\n @mix_info_exists, @substream1, @substream2, @substream3, @copied_44bits,\r\n @frame_only_constraint_flag, @hdr_wcg_idc, @hevc_24hr_picture_present_flag,\r\n @hevc_still_present_flag, @interlaced_source_flag, @non_packed_constraint_flag,\r\n @profile_compatibility_indication, @profile_idc, @profile_space, @progressive_source_flag,\r\n @sub_pic_hrd_params_not_present_flag, @temporal_id_max, @tier_flag, @temporal_id_min,\r\n @ac4_channel_mode, @ac4_dialog_enhancement, @ac4_dsi, @leak_valid_flag, @sb_leak_rate, @sb_size,\r\n @private_data_indicator, @_90khz_flag, @picture_and_timing_info_present_flag,\r\n @hdr_management_valid_flag, @k, @n, @num_units_in_tick, @target_schedule_idx,\r\n @target_schedule_idx_not_present_flag, @adaption_field_data_identifier,\r\n @fixed_frame_rate_flag, @picture_to_display_conversion_flag, @temporal_poc_flag,\r\n @mpeg4_audio_profile_and_level, @aac_channel_configuration, @aac_profile,\r\n @aac_additional_information, @scrambling_mode, @related_content_descriptor_present,\r\n @num_t2mi_streams, @t2mi_stream_id, @pcr_iscr_common_clock_flag, @audio_specific_config, @audio_profile_level_indication);";
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, mappingProgramNumber);
|
|
command.Parameters.AddParameter("@stream_type", NpgsqlDbType.Integer, (int)stream.StreamType);
|
|
command.Parameters.AddParameter("@elementary_pid", NpgsqlDbType.Integer, stream.ElementaryPid);
|
|
command.Parameters.AddParameter("@component_tag", NpgsqlDbType.Integer, stream.ComponentTag);
|
|
command.Parameters.AddParameter("@audio_type", NpgsqlDbType.Integer, (int?)stream.AudioType);
|
|
command.Parameters.AddParameter("@iso_639_language_code", NpgsqlDbType.Varchar, stream.Iso639LanguageCode);
|
|
command.Parameters.AddParameter("@carousel_format_id", NpgsqlDbType.Integer, stream.CarouselFormatId);
|
|
command.Parameters.AddParameter("@carousel_id", NpgsqlDbType.Bigint, stream.CarouselId);
|
|
command.Parameters.AddParameter("@data_broadcast_id", NpgsqlDbType.Integer, stream.DataBroadcastId);
|
|
command.Parameters.AddParameter("@data_broadcast_selector", NpgsqlDbType.Bytea, stream.DataBroadcastSelector);
|
|
//@supplementary_independant_stream,@editorial_classification,@supplementary_language_code,@asvc,@bsid,@component_type,@main_id,@frame_rate,@mpeg1_only_flag,@chroma_format,@constrained_parameter_flag,
|
|
command.Parameters.AddParameter("@supplementary_independant_stream", NpgsqlDbType.Boolean, stream.SupplementaryIndependantStream);
|
|
command.Parameters.AddParameter("@editorial_classification", NpgsqlDbType.Integer, (int?)stream.EditorialClassification);
|
|
command.Parameters.AddParameter("@supplementary_language_code", NpgsqlDbType.Varchar, stream.SupplementaryLanguageCode);
|
|
command.Parameters.AddParameter("@asvc", NpgsqlDbType.Integer, stream.Asvc);
|
|
command.Parameters.AddParameter("@bsid", NpgsqlDbType.Integer, stream.BSID);
|
|
command.Parameters.AddParameter("@component_type", NpgsqlDbType.Integer, (int?)stream.ComponentType);
|
|
command.Parameters.AddParameter("@main_id", NpgsqlDbType.Integer, stream.MainId);
|
|
command.Parameters.AddParameter("@frame_rate", NpgsqlDbType.Double, stream.FrameRate);
|
|
command.Parameters.AddParameter("@mpeg1_only_flag", NpgsqlDbType.Boolean, stream.Mpeg1OnlyFlag);
|
|
command.Parameters.AddParameter("@chroma_format", NpgsqlDbType.Integer, stream.ChromaFormat);
|
|
command.Parameters.AddParameter("@constrained_parameter_flag", NpgsqlDbType.Boolean, stream.ConstrainedParameterFlag);
|
|
//@frame_rate_extension_flag,@multiple_framerate_flag,@profile_and_level_indication,@still_picture_flag,@alignment_type,@maximum_bitrate,@audio_stream_id,@free_format,@layer,@variable_rate_audio,
|
|
command.Parameters.AddParameter("@frame_rate_extension_flag", NpgsqlDbType.Integer, stream.FrameRateExtensionFlag);
|
|
command.Parameters.AddParameter("@multiple_framerate_flag", NpgsqlDbType.Boolean, stream.MultipleFramerateFlag);
|
|
command.Parameters.AddParameter("@profile_and_level_indication", NpgsqlDbType.Integer, stream.ProfileAndLevelIndication);
|
|
command.Parameters.AddParameter("@still_picture_flag", NpgsqlDbType.Boolean, stream.StillPictureFlag);
|
|
command.Parameters.AddParameter("@alignment_type", NpgsqlDbType.Integer, stream.AlignmentType);
|
|
command.Parameters.AddParameter("@maximum_bitrate", NpgsqlDbType.Bigint, stream.MaximumBitrate);
|
|
command.Parameters.AddParameter("@audio_stream_id", NpgsqlDbType.Boolean, stream.AudioStreamId);
|
|
command.Parameters.AddParameter("@free_format", NpgsqlDbType.Boolean, stream.FreeFormat);
|
|
command.Parameters.AddParameter("@layer", NpgsqlDbType.Integer, stream.Layer);
|
|
command.Parameters.AddParameter("@variable_rate_audio", NpgsqlDbType.Boolean, stream.VariableRateAudio);
|
|
//@constraint_set0_flag,@avc_24hour_picture_flag,@avc_compatible_flag,@avc_still_present,@constraint_set1_flag,@constraint_set2_flag,@constraint_set3_flag,@constraint_set4_flag,@constraint_set5_flag,
|
|
command.Parameters.AddParameter("@constraint_set0_flag", NpgsqlDbType.Boolean, stream.ConstraintSet0Flag);
|
|
command.Parameters.AddParameter("@constraint_set0_flag", NpgsqlDbType.Boolean, stream.ConstraintSet0Flag);
|
|
command.Parameters.AddParameter("@avc_24hour_picture_flag", NpgsqlDbType.Boolean, stream.Avc24HourPictureFlag);
|
|
command.Parameters.AddParameter("@avc_compatible_flag", NpgsqlDbType.Integer, stream.AvcCompatibleFlags);
|
|
command.Parameters.AddParameter("@avc_still_present", NpgsqlDbType.Boolean, stream.AvcStillPresent);
|
|
command.Parameters.AddParameter("@constraint_set1_flag", NpgsqlDbType.Boolean, stream.ConstraintSet1Flag);
|
|
command.Parameters.AddParameter("@constraint_set2_flag", NpgsqlDbType.Boolean, stream.ConstraintSet2Flag);
|
|
command.Parameters.AddParameter("@constraint_set3_flag", NpgsqlDbType.Boolean, stream.ConstraintSet3Flag);
|
|
command.Parameters.AddParameter("@constraint_set4_flag", NpgsqlDbType.Boolean, stream.ConstraintSet4Flag);
|
|
command.Parameters.AddParameter("@constraint_set5_flag", NpgsqlDbType.Boolean, stream.ConstraintSet5Flag);
|
|
//@frame_packing_sei_not_present,@level_idc,@profile_rdc,@ca_pid,@ca_system_id,@ca_private_data,@private_data_specifier,@format_identifier,@additional_identification_info,@association_tag_selector,
|
|
command.Parameters.AddParameter("@frame_packing_sei_not_present", NpgsqlDbType.Boolean, stream.FramePackingSeiNotPresent);
|
|
command.Parameters.AddParameter("@level_idc", NpgsqlDbType.Integer, stream.LevelIdc);
|
|
command.Parameters.AddParameter("@profile_rdc", NpgsqlDbType.Integer, stream.ProfileRdc);
|
|
command.Parameters.AddParameter("@ca_pid", NpgsqlDbType.Integer, stream.CaPid);
|
|
command.Parameters.AddParameter("@ca_system_id", NpgsqlDbType.Integer, stream.CaSystemId);
|
|
command.Parameters.AddParameter("@ca_private_data", NpgsqlDbType.Bytea, stream.CaPrivateData);
|
|
command.Parameters.AddParameter("@private_data_specifier", NpgsqlDbType.Bigint, stream.PrivateDataSpecifier);
|
|
command.Parameters.AddParameter("@format_identifier", NpgsqlDbType.Bigint, stream.FormatIdentifier);
|
|
command.Parameters.AddParameter("@additional_identification_info", NpgsqlDbType.Bytea, stream.AdditionalIdentificationInfo);
|
|
command.Parameters.AddParameter("@association_tag_selector", NpgsqlDbType.Bytea, stream.AssociationTagSelector);
|
|
//@association_tag_transaction_id,@association_tag_use,@association_tag_private_data,@association_tag_timeout,@aac_type,@aac_additional_info,@aac_profile_and_level,@saoc_de_flag,
|
|
command.Parameters.AddParameter("@association_tag_transaction_id", NpgsqlDbType.Bigint, stream.AssociationTagTransactionId);
|
|
command.Parameters.AddParameter("@association_tag_use", NpgsqlDbType.Integer, stream.AssociationTagUse);
|
|
command.Parameters.AddParameter("@association_tag_private_data", NpgsqlDbType.Bytea, stream.AssociationTagPrivateData);
|
|
command.Parameters.AddParameter("@association_tag_timeout", NpgsqlDbType.Bigint, stream.AssociationTagTimeOut);
|
|
command.Parameters.AddParameter("@aac_type", NpgsqlDbType.Integer, stream.AacType);
|
|
command.Parameters.AddParameter("@aac_additional_info", NpgsqlDbType.Bytea, stream.AacAdditionalInfo);
|
|
command.Parameters.AddParameter("@aac_profile_and_level", NpgsqlDbType.Integer, stream.AacProfileAndLevel);
|
|
command.Parameters.AddParameter("@saoc_de_flag", NpgsqlDbType.Boolean, stream.SaocDeFlag);
|
|
//@ancillary_data_identifier,@mix_info_exists,@substream1,@substream2,@substream3,@copied_44bits,@frame_only_constraint_flag,@hdr_wcg_idc,@hevc_24hr_picture_present_flag,@hevc_still_present_flag,
|
|
if (stream.AncillaryDataDescriptor != null)
|
|
command.Parameters.AddParameter("@ancillary_data_identifier", NpgsqlDbType.Integer, stream.AncillaryDataDescriptor.AncillaryDataIdentifier);
|
|
else
|
|
command.Parameters.AddWithValue("@ancillary_data_identifier", NpgsqlDbType.Integer, DBNull.Value);
|
|
command.Parameters.AddParameter("@mix_info_exists", NpgsqlDbType.Boolean, stream.MixInfoExists);
|
|
command.Parameters.AddParameter("@substream1", NpgsqlDbType.Integer, stream.Substream1);
|
|
command.Parameters.AddParameter("@substream2", NpgsqlDbType.Integer, stream.Substream2);
|
|
command.Parameters.AddParameter("@substream3", NpgsqlDbType.Integer, stream.Substream3);
|
|
command.Parameters.AddParameter("@copied_44bits", NpgsqlDbType.Bigint, stream.Copied44bits);
|
|
command.Parameters.AddParameter("@frame_only_constraint_flag", NpgsqlDbType.Boolean, stream.FrameOnlyConstraintFlag);
|
|
command.Parameters.AddParameter("@hdr_wcg_idc", NpgsqlDbType.Integer, stream.HdrWcgIdc);
|
|
command.Parameters.AddParameter("@hevc_24hr_picture_present_flag", NpgsqlDbType.Boolean, stream.Hevc24hrPicturePresentFlag);
|
|
command.Parameters.AddParameter("@hevc_still_present_flag", NpgsqlDbType.Boolean, stream.HevcStillPresentFlag);
|
|
//@interlaced_source_flag,@non_packed_constraint_flag,@profile_compatibility_indication,@profile_idc,@profile_space,@progressive_source_flag,@sub_pic_hrd_params_not_present_flag,@temporal_id_max,
|
|
command.Parameters.AddParameter("@interlaced_source_flag", NpgsqlDbType.Boolean, stream.InterlacedSourceFlag);
|
|
command.Parameters.AddParameter("@non_packed_constraint_flag", NpgsqlDbType.Boolean, stream.NonPackedConstraintFlag);
|
|
command.Parameters.AddParameter("@profile_compatibility_indication", NpgsqlDbType.Bigint, stream.ProfileCompatibilityIndication);
|
|
command.Parameters.AddParameter("@profile_idc", NpgsqlDbType.Bigint, stream.ProfileIdc);
|
|
command.Parameters.AddParameter("@profile_space", NpgsqlDbType.Integer, stream.ProfileSpace);
|
|
command.Parameters.AddParameter("@progressive_source_flag", NpgsqlDbType.Boolean, stream.ProgressiveSourceFlag);
|
|
command.Parameters.AddParameter("@sub_pic_hrd_params_not_present_flag", NpgsqlDbType.Boolean, stream.SubPicHrdParamsNotPresentFlag);
|
|
command.Parameters.AddParameter("@temporal_id_max", NpgsqlDbType.Integer, stream.TemporalIdMax);
|
|
//@tier_flag,@temporal_id_min,@ac4_channel_mode,@ac4_dialog_enhancement,@ac4_dsi,@leak_valid_flag,@sb_leak_rate,@sb_size,@private_data_indicator,@_90khz_flag,@picture_and_timing_info_present_flag,
|
|
command.Parameters.AddParameter("@tier_flag", NpgsqlDbType.Boolean, stream.TierFlag);
|
|
command.Parameters.AddParameter("@temporal_id_min", NpgsqlDbType.Integer, stream.TemporalIdMin);
|
|
command.Parameters.AddParameter("@ac4_channel_mode", NpgsqlDbType.Integer, stream.Ac4ChannelMode);
|
|
command.Parameters.AddParameter("@ac4_dialog_enhancement", NpgsqlDbType.Boolean, stream.Ac4DialogEnhancement);
|
|
command.Parameters.AddParameter("@ac4_dsi", NpgsqlDbType.Bytea, stream.Ac4Dsi);
|
|
command.Parameters.AddParameter("@ac4_dsi", NpgsqlDbType.Bytea, stream.Ac4Dsi);
|
|
command.Parameters.AddParameter("@leak_valid_flag", NpgsqlDbType.Boolean, stream.LeakValidFlag);
|
|
command.Parameters.AddParameter("@sb_leak_rate", NpgsqlDbType.Bigint, stream.SbLeakRate);
|
|
command.Parameters.AddParameter("@sb_size", NpgsqlDbType.Bigint, stream.SbSize);
|
|
command.Parameters.AddParameter("@private_data_indicator", NpgsqlDbType.Bigint, stream.PrivateDataIndicator);
|
|
command.Parameters.AddParameter("@_90khz_flag", NpgsqlDbType.Boolean, stream._90khzFlag);
|
|
command.Parameters.AddParameter("@picture_and_timing_info_present_flag", NpgsqlDbType.Boolean, stream.PictureAndTimingInfoPresentFlag);
|
|
//@hdr_management_valid_flag,@k,@n,@num_units_in_tick,@target_schedule_idx,@target_schedule_idx_not_present_flag,@adaption_field_data_identifier,@fixed_frame_rate_flag,
|
|
command.Parameters.AddParameter("@hdr_management_valid_flag", NpgsqlDbType.Boolean, stream.HdrManagementValidFlag);
|
|
command.Parameters.AddParameter("@k", NpgsqlDbType.Bigint, stream.K);
|
|
command.Parameters.AddParameter("@n", NpgsqlDbType.Bigint, stream.N);
|
|
command.Parameters.AddParameter("@num_units_in_tick", NpgsqlDbType.Bigint, stream.NumUnitsInTick);
|
|
command.Parameters.AddParameter("@target_schedule_idx", NpgsqlDbType.Integer, stream.TargetScheduleIdx);
|
|
command.Parameters.AddParameter("@target_schedule_idx_not_present_flag", NpgsqlDbType.Boolean, stream.TargetScheduleIdxNotPresentFlag);
|
|
command.Parameters.AddParameter("@adaption_field_data_identifier", NpgsqlDbType.Integer, stream.AdaptionFieldDataIdentifier);
|
|
command.Parameters.AddParameter("@fixed_frame_rate_flag", NpgsqlDbType.Boolean, stream.FixedFrameRateFlag);
|
|
//@picture_to_display_conversion_flag,@temporal_poc_flag,@mpeg4_audio_profile_and_level,@aac_channel_configuration,@aac_profile,@aac_additional_information,@scrambling_mode,
|
|
command.Parameters.AddParameter("@picture_to_display_conversion_flag", NpgsqlDbType.Boolean, stream.PictureToDisplayConversionFlag);
|
|
command.Parameters.AddParameter("@temporal_poc_flag", NpgsqlDbType.Boolean, stream.TemporalPocFlag);
|
|
command.Parameters.AddParameter("@mpeg4_audio_profile_and_level", NpgsqlDbType.Integer, stream.Mpeg4AudioProfileAndLevel);
|
|
command.Parameters.AddParameter("@aac_channel_configuration", NpgsqlDbType.Integer, stream.AacChannelConfiguration);
|
|
command.Parameters.AddParameter("@aac_profile", NpgsqlDbType.Integer, stream.AacProfile);
|
|
command.Parameters.AddParameter("@aac_additional_information", NpgsqlDbType.Bytea, stream.AacAdditionalInfo);
|
|
command.Parameters.AddParameter("@scrambling_mode", NpgsqlDbType.Integer, stream.ScramblingMode);
|
|
//@related_content_descriptor_present,@num_t2mi_streams,@t2mi_stream_id,@pcr_iscr_common_clock_flag); ";
|
|
command.Parameters.AddParameter("@related_content_descriptor_present",NpgsqlDbType.Boolean,stream.RelatedContentDescriptorPresent);
|
|
command.Parameters.AddParameter("@num_t2mi_streams", NpgsqlDbType.Integer,stream.NumT2MiStreams);
|
|
command.Parameters.AddParameter("@t2mi_stream_id", NpgsqlDbType.Integer,stream.T2MiStreamId);
|
|
command.Parameters.AddParameter("@pcr_iscr_common_clock_flag", NpgsqlDbType.Boolean,stream.PcrIscrCommonClockFlag);
|
|
//audio_specific_config, audio_profile_level_indication
|
|
command.Parameters.AddParameter("@audio_specific_config", NpgsqlDbType.Bytea, stream.AudioSpecifConfig);
|
|
command.Parameters.AddParameter("@audio_profile_level_indication", NpgsqlDbType.Bytea, stream.AudioProfileLevelIndication);
|
|
command.Parameters.CheckNulls();
|
|
command.ExecuteNonQuery();
|
|
|
|
WritePmtStreamApplications(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber,stream);
|
|
WritePmtStreamAudioPreselections(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream);
|
|
WritePmtStreamFluxmuxChannels(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream);
|
|
WritePmtStreamIpMacNotificationInfo(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream);
|
|
WritePmtStreamSubtitlings(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream);
|
|
WritePmtStreamTeletexts(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream, false);
|
|
WritePmtStreamVbiData(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream);
|
|
WritePmtStreamTeletexts(conn, currentNetworkId, currentTransportStreamId, mappingProgramNumber, stream, true);
|
|
}
|
|
|
|
private void WritePmtStreamVbiData(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.VbiData == null)
|
|
return;
|
|
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt_streams_vbi_data (cnid, ctsid, program_number, elementary_pid, ordinal, data_service_id, field_parity, line_offset) " +
|
|
"values (@cnid, @ctsid, @program_number, @elementary_pid, @ordinal, @data_service_id, @field_parity, @line_offset)";
|
|
command.Parameters.AddWithValue("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddWithValue("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddWithValue("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
command.Parameters.AddWithValue("@elementary_pid", NpgsqlDbType.Integer, stream.ElementaryPid);
|
|
command.Parameters.Add("@ordinal", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@data_service_id", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@field_parity", NpgsqlDbType.Boolean);
|
|
command.Parameters.Add("@line_offset", NpgsqlDbType.Integer);
|
|
|
|
int ordinalIterator = 0;
|
|
foreach (VbiDataDescriptor.DataService dataService in stream.VbiData)
|
|
{
|
|
for (int i = 0; i < dataService.FieldParity.Length; i++)
|
|
{
|
|
int ordinal = ordinalIterator++;
|
|
bool parity = dataService.FieldParity[i];
|
|
int lineOffset = dataService.LineOffset[i];
|
|
command.Parameters["@ordinal"].Value = ordinalIterator;
|
|
command.Parameters["@data_service_id"].Value = dataService.DataServiceId;
|
|
command.Parameters["@field_parity"].Value = parity;
|
|
command.Parameters["@line_offset"].Value = lineOffset;
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamTeletexts(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream, bool vbi)
|
|
{
|
|
TeletextDescriptor.TeletextDescriptorTeletext[] teletext;
|
|
string tableName;
|
|
|
|
if (vbi)
|
|
{
|
|
teletext = stream.VbiTeletexts;
|
|
tableName = "dvb_pmt_streams_vbi_teletexts";
|
|
}
|
|
else
|
|
{
|
|
teletext = stream.Teletexts;
|
|
tableName = "dvb_pmt_streams_teletexts";
|
|
}
|
|
|
|
if (teletext == null)
|
|
return;
|
|
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
String.Format(
|
|
"insert into {0} (cnid, ctsid, program_number, elementary_pid, ordinal, iso_639_language_code, teletext_type, teletext_magazine_number, teletext_page_number) " +
|
|
"values " +
|
|
"(@cnid, @ctsid, @program_number, @elementary_pid, @ordinal, @iso_639_language_code, @teletext_type, @teletext_magazine_number, @teletext_page_number)",
|
|
tableName);
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
command.Parameters.AddParameter("@elementary_pid", NpgsqlDbType.Integer, (int)stream.ElementaryPid);
|
|
command.Parameters.Add("@ordinal", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@iso_639_language_code", NpgsqlDbType.Varchar);
|
|
command.Parameters.Add("@teletext_type", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@teletext_magazine_number", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@teletext_page_number", NpgsqlDbType.Integer);
|
|
|
|
for (int i = 0; i < teletext.Length; i++)
|
|
{
|
|
command.Parameters["@ordinal"].Value = i;
|
|
command.Parameters["@iso_639_language_code"].Value = teletext[i].Iso639LanguageCode.Replace("\0", ""); ;
|
|
command.Parameters["@teletext_type"].Value = (int)teletext[i].TeletextType;
|
|
command.Parameters["@teletext_magazine_number"].Value = (int)teletext[i].TeletextMagazineNumber;
|
|
command.Parameters["@teletext_page_number"].Value = (int)teletext[i].TeletextPageNumber;
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamSubtitlings(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.Subtitlings == null)
|
|
return;
|
|
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt_streams_subtitlings (cnid, ctsid, program_number, elementary_pid, ordinal, iso_639_language_code, subtitling_type, composition_page_id, ancillary_page_id) " +
|
|
"values " +
|
|
"(@cnid, @ctsid, @program_number, @elementary_pid, @ordinal, @iso_639_language_code, @subtitling_type, @composition_page_id, @ancillary_page_id)";
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
command.Parameters.AddParameter("@elementary_pid", NpgsqlDbType.Integer, (int)stream.ElementaryPid);
|
|
command.Parameters.Add("@ordinal", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@iso_639_language_code", NpgsqlDbType.Varchar);
|
|
command.Parameters.Add("@subtitling_type", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@composition_page_id", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@ancillary_page_id", NpgsqlDbType.Integer);
|
|
|
|
for (int i = 0; i < stream.Subtitlings.Length; i++)
|
|
{
|
|
SubtitlingDescriptor.Subtitling subtitling = stream.Subtitlings[i];
|
|
command.Parameters["@ordinal"].Value = i;
|
|
command.Parameters["@iso_639_language_code"].Value = subtitling.Iso639LanguageCode;
|
|
command.Parameters["@subtitling_type"].Value = subtitling.SubtitlingType;
|
|
command.Parameters["@composition_page_id"].Value = (int)subtitling.CompositionPageId;
|
|
command.Parameters["@ancillary_page_id"].Value = (int)subtitling.AncillaryPageId;
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamIpMacNotificationInfo(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.IpMacNotificationInfo == null)
|
|
return;
|
|
|
|
NpgsqlCommand cmd = conn.CreateCommand();
|
|
cmd.CommandText = "insert into dvb_pmt_streams_ip_mac_notification_info (cnid, ctsid, program_number, elementary_pid, platform_id,action_type, int_versioning_flag, int_version) " +
|
|
"values (@cnid, @ctsid, @program_number, @elementary_pid, @platform_id, @action_type, @int_versioning_flag, @int_version)";
|
|
cmd.Parameters.AddWithValue("@cnid",NpgsqlDbType.Integer, currentNetworkId);
|
|
cmd.Parameters.AddWithValue("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
cmd.Parameters.AddWithValue("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
cmd.Parameters.AddWithValue("@elementary_pid", NpgsqlDbType.Integer, stream.ElementaryPid);
|
|
cmd.Parameters.Add("@platform_id", NpgsqlDbType.Integer);
|
|
cmd.Parameters.Add("@action_type", NpgsqlDbType.Integer);
|
|
cmd.Parameters.Add("@int_versioning_flag", NpgsqlDbType.Boolean);
|
|
cmd.Parameters.Add("@int_version", NpgsqlDbType.Integer);
|
|
|
|
foreach (DataBroadcastIdDescriptor.IpMacPlatform ipMacPlatform in stream.IpMacNotificationInfo)
|
|
{
|
|
cmd.Parameters["@platform_id"].Value = (int)ipMacPlatform.PlatformId;
|
|
cmd.Parameters["@action_type"].Value = (int)ipMacPlatform.ActionType;
|
|
cmd.Parameters["@int_versioning_flag"].Value = ipMacPlatform.IntVersioningFlag;
|
|
cmd.Parameters["@int_version"].Value = (int)ipMacPlatform.IntVersion;
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamFluxmuxChannels(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.FlexMuxChannels == null)
|
|
return;
|
|
|
|
foreach (FmcDescriptor.Fmc flexMuxChannel in stream.FlexMuxChannels)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamAudioPreselections(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.AudioPreselection == null)
|
|
return;
|
|
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt_streams_audio_preselections (cnid, ctsid, program_number, elementary_pid, preselection_id, audio_rendering_indication, audio_description, spoken_subtitles, dialogue_enhancement, interactivity_enabled, iso_639_language_code,\r\n message_id, component_tags, future_extension) " +
|
|
"values " +
|
|
"(@cnid,@ctsid,@program_number,@elementary_pid,@preselection_id,@audio_rendering_indication,@audio_description,@spoken_subtitles,@dialogue_enhancement,@interactivity_enabled,@iso_639_language_code,@message_id, @component_tags, @future_extension)";
|
|
command.Parameters.AddWithValue("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddWithValue("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddWithValue("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
command.Parameters.AddWithValue("@elementary_pid", NpgsqlDbType.Integer, stream.ElementaryPid);
|
|
command.Parameters.Add("@preselection_id", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@audio_rendering_indication", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@audio_description", NpgsqlDbType.Boolean);
|
|
command.Parameters.Add("@spoken_subtitles", NpgsqlDbType.Boolean);
|
|
command.Parameters.Add("@dialogue_enhancement", NpgsqlDbType.Boolean);
|
|
command.Parameters.Add("@interactivity_enabled", NpgsqlDbType.Boolean);
|
|
command.Parameters.Add("@iso_639_language_code", NpgsqlDbType.Varchar);
|
|
//@message_id, @component_tags, @future_extension)";
|
|
command.Parameters.Add("@message_id", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@component_tags", NpgsqlDbType.Bytea);
|
|
command.Parameters.Add("@future_extension", NpgsqlDbType.Bytea);
|
|
|
|
foreach (AudioPreselectionDescriptor.AudioPreselection audioPreselection in stream.AudioPreselection)
|
|
{
|
|
command.Parameters["@preselection_id"].Value = audioPreselection.PreselectionId;
|
|
command.Parameters["@audio_rendering_indication"].Value = (int)audioPreselection.AudioRenderingIndication;
|
|
command.Parameters["@audio_description"].Value = audioPreselection.AudioDescription;
|
|
command.Parameters["@spoken_subtitles"].Value = audioPreselection.SpokenSubtitles;
|
|
command.Parameters["@dialogue_enhancement"].Value = audioPreselection.DialogueEnhancement;
|
|
command.Parameters["@interactivity_enabled"].Value = audioPreselection.InteractivityEnabled;
|
|
command.Parameters["@iso_639_language_code"].Value = audioPreselection.Iso639LangaugeCode;
|
|
command.Parameters["@message_id"].Value = audioPreselection.MessageId;
|
|
command.Parameters["@component_tags"].Value = audioPreselection.ComponentTags;
|
|
command.Parameters["@future_extension"].Value = audioPreselection.FutureExtension;
|
|
command.Parameters.CheckNulls();
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
private void WritePmtStreamApplications(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ushort mappingProgramNumber, ProgramMappingStream stream)
|
|
{
|
|
if (stream.Applications == null)
|
|
return;
|
|
|
|
NpgsqlCommand command = conn.CreateCommand();
|
|
command.CommandText =
|
|
"insert into dvb_pmt_streams_applications (cnid, ctsid, program_number, elementary_pid, ordinal, application_type, ait_version_number) " +
|
|
"values " +
|
|
"(@cnid, @ctsid, @program_number, @elementary_pid, @ordinal, @application_type, @ait_version_number);";
|
|
command.Parameters.AddParameter("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
command.Parameters.AddParameter("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
command.Parameters.AddParameter("@program_number", NpgsqlDbType.Integer, (int)mappingProgramNumber);
|
|
command.Parameters.AddParameter("@elementary_pid", NpgsqlDbType.Integer, (int)stream.ElementaryPid);
|
|
command.Parameters.Add("@ordinal", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@application_type", NpgsqlDbType.Integer);
|
|
command.Parameters.Add("@ait_version_number", NpgsqlDbType.Integer);
|
|
for (int i = 0; i < stream.Applications.Count; i++)
|
|
{
|
|
ApplicationSignallingDescriptor.ApplicationSignal applicationSignal = stream.Applications[i];
|
|
command.Parameters["@ordinal"].Value = i;
|
|
command.Parameters["@application_type"].Value = applicationSignal.ApplicationType;
|
|
command.Parameters["@ait_version_number"].Value = applicationSignal.AitVersionNumber;
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
|
|
private void WritePmtInitialObjectDescriptor(NpgsqlConnection conn, int currentNetworkId, int currentTransportStreamId, ProgramMapping mapping)
|
|
{
|
|
if (mapping.InitialObjectDescriptor == null)
|
|
return;
|
|
|
|
InitialObjectDescriptor iod = mapping.InitialObjectDescriptor;
|
|
NpgsqlCommand cmd = conn.CreateCommand();
|
|
cmd.CommandText = "insert into dvb_pmt_initial_object_descriptors (cnid, ctsid, program_number,\r\n graphics_profile_level_indication, visual_profile_level_indication,\r\n audio_profile_level_indication, scene_profile_level_indication,\r\n od_profile_level_indication, url_string,\r\n include_inline_profile_level_flag, url_flag, object_descriptor_id) " +
|
|
"values (@cnid, @ctsid, @program_number, @graphics_profile_level_indication, @visual_profile_level_indication, @audio_profile_level_indication, @scene_profile_level_indication, @od_profile_level_indication, @url_string, @include_inline_profile_level_flag, @url_flag, @object_descriptor_id)";
|
|
cmd.Parameters.AddWithValue("@cnid", NpgsqlDbType.Integer, currentNetworkId);
|
|
cmd.Parameters.AddWithValue("@ctsid", NpgsqlDbType.Integer, currentTransportStreamId);
|
|
cmd.Parameters.AddWithValue("@program_number", NpgsqlDbType.Integer, (int)mapping.ProgramNumber);
|
|
cmd.Parameters.AddWithValue("@graphics_profile_level_indication", NpgsqlDbType.Integer, (int?)iod.GraphicsProfileLevelIndication);
|
|
cmd.Parameters.AddWithValue("@visual_profile_level_indication", NpgsqlDbType.Integer, (int?)iod.VisualProfileLevelIndication);
|
|
cmd.Parameters.AddWithValue("@audio_profile_level_indication", NpgsqlDbType.Integer, (int?)iod.AudioProfileLevelIndication);
|
|
cmd.Parameters.AddWithValue("@scene_profile_level_indication", NpgsqlDbType.Integer, (int?)iod.SceneProfileLevelIndication);
|
|
cmd.Parameters.AddWithValue("@od_profile_level_indication", NpgsqlDbType.Integer, (int?)iod.OdProfileLevelIndication);
|
|
//@url_string, @include_inline_profile_level_flag, @url_flag, @object_descriptor_id)";
|
|
cmd.Parameters.AddWithValue("@url_string", NpgsqlDbType.Text, iod.UrlString);
|
|
cmd.Parameters.AddWithValue("@include_inline_profile_level_flag", NpgsqlDbType.Boolean, iod.IncludeInlineProfileLevelFlag);
|
|
cmd.Parameters.AddWithValue("@url_flag", NpgsqlDbType.Boolean, iod.UrlFlag);
|
|
cmd.Parameters.AddWithValue("@object_descriptor_id", NpgsqlDbType.Integer, iod.ObjectDescriptorId);
|
|
cmd.Parameters.CheckNulls();
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
}
|
|
}
|