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 )