Linux-DVB-DVBT-Advert

 view release on metacpan or  search on metacpan

lib/Linux/DVB/DVBT/Advert.pm  view on Meta::CPAN

					$frame_href->{$EXPECTED_FIELD} = 0 ;
				}
				elsif ($framenum > $expect_href->{'end'})
				{
					$expect_href = shift @$expected_aref ;
				}
			}
		}
	}
	
prt_frames($frames_adata_aref) if $DEBUG >= 3 ;
	
	# total number of frames
	my $last_frame = -1 ;
	if (scalar(@$frames_adata_aref))
	{
		$last_frame = $frames_adata_aref->[-1]{'frame'} ;
	}
	my $total_frames = $last_frame + 1 ;
	$results_settings_href->{'num_frames'} = $total_frames ;
	
	return @cut_list unless $total_frames ;
	
	
	# total packets
	my $total_pkts = $frames_adata_aref->[$last_frame]{'end_pkt'} ;

print "== analyse() == : total frames:$total_frames, pkts:$total_pkts\n" if $DEBUG ;

	## Split frame results out into arrays (containing the HASH refs stored in results) where the specified
	## field flag is true
	my $black_frames_ada_ref = frames_list($results_href, 'black_frame') ;
#	my $scene_frames_ada_aref = frames_list($results_href, 'scene_frame') ;
#	my $size_frames_ada_aref = frames_list($results_href, 'size_change') ;
	my $logo_frames_ada_aref = frames_list($results_href, 'logo_frame') ;
	my $silent_frames_ada_aref = frames_list($results_href, 'silent_frame') ;
#	my $all_frames_ada_aref = frames_list($results_href, '') ;

	my $csv_frames_aref = new_csv_frames($results_href) ;

	Linux::DVB::DVBT::Advert::Mem::print_used(" + created ADA arrays") ;


#	if ($DEBUG)
#	{
##		dump_frames(\@size_frames, "All SIZE frames") if (@size_frames) ;
#		dump_frames(\@scene_frames, "All SCENE frames") if (@scene_frames) ;
#		dump_frames(\@black_frames, "All BLACK frames") if (@black_frames) ;
#		dump_frames(\@logo_frames, "All LOGO frames") if (@logo_frames) ;
#		dump_frames(\@silent_frames, "All SILENT frames") if (@silent_frames) ;
#		#dump_frames(\@banner_frames, "All BANNER frames") if (@banner_frames) ;
#		#dump_frames(\@audio_frames, "All AUDIO frames") if (@audio_frames) ;
#	}

	## Analysis results
	my @black_cut_list ;
	my @silent_cut_list ;
	my @logo_cut_list ;

	## Settings
	my $global_settings_href = Linux::DVB::DVBT::Advert::Config::cascade_settings($extra_settings_href, '', $results_settings_href) ;
	my $black_settings_href = Linux::DVB::DVBT::Advert::Config::cascade_settings($extra_settings_href, 'frame', $results_settings_href) ;
	my $logo_settings_href = Linux::DVB::DVBT::Advert::Config::cascade_settings($extra_settings_href, 'logo', $results_settings_href) ;
	my $silent_settings_href = Linux::DVB::DVBT::Advert::Config::cascade_settings($extra_settings_href, 'audio', $results_settings_href) ;

	# return cascaded settings
	$results_href->{'settings'} = {
		$global_settings_href,
		'frame' => $black_settings_href,
		'logo' => $logo_settings_href,
		'audio' => $silent_settings_href,
	} ;

	my $rise_thresh = $logo_settings_href->{'logo_rise_threshold'} || 1 ;
	my $fall_thresh = $logo_settings_href->{'logo_fall_threshold'} || 1 ;

	Linux::DVB::DVBT::Advert::Mem::print_used(" + got settings") ;


	## Skip if disabled
	if (!ok_to_detect($global_settings_href))
	{
		return @cut_list ;					
	}


	## Saved CSV file for post-detection analysis
	my @csv_settings ;
	csv_add_setting(\@csv_settings, "frame", "0::") ;
	csv_add_setting(\@csv_settings, $PACKET_FIELD, "0::") ;
	csv_add_setting(\@csv_settings, $PACKET_END_FIELD, "0::") ;
	csv_add_setting(\@csv_settings, $PACKET_GOP_FIELD, "0::") ;
	csv_add_setting(\@csv_settings, "black_frame", "0:1:1") ;
	csv_add_setting(\@csv_settings, "scene_frame", "0:1:1") ;
	csv_add_setting(\@csv_settings, "size_change", "0:1:1") ;
	csv_add_setting(\@csv_settings, "match_percent", "0:$rise_thresh:100") ;
	csv_add_setting(\@csv_settings, "ave_percent", "0:$rise_thresh/$fall_thresh:100") ;
	csv_add_setting(\@csv_settings, "volume_dB", "-96:-60:0") ;
	csv_add_setting(\@csv_settings, "silent_frame", "0:1:1") ;
	csv_add_setting(\@csv_settings, $PROG_FIELD, "0:1:100") ;
	
	if ($expected_aref)
	{
		csv_add_setting(\@csv_settings, $EXPECTED_FIELD, "0:1:1") ;
	}
	
	## Check that this channel doesn't splat logos across the adverts too!
	my $logo_frames_percent = (100.0 * $results_settings_href->{'total_logo_frames'}) / (1.0 * $results_settings_href->{'num_frames'}) ;
print "CUTS: Logo % = $logo_frames_percent\n" if $DEBUG ;

	if ($logo_frames_percent > 90.0)
	{
print "CUTS: Skipping ALL-LOGOS frames...\n" if $DEBUG ;
##TODO: fix....
		@$logo_frames_ada_aref = () ;
	}

	##--[ Black detect ]----------------------------------------------------
	Linux::DVB::DVBT::Advert::Mem::print_used("Black detect") ;
	my $new_black_frames_aref = [] ;
	if (@$black_frames_ada_ref)
	{
#print STDERR "black detect\n" ;
		## process
		@black_cut_list = process_black_frames($black_frames_ada_ref, $new_black_frames_aref,
								$total_pkts, $total_frames, $black_settings_href,



( run in 0.946 second using v1.01-cache-2.11-cpan-2398b32b56e )