sensible-cinema 0.25.0 → 0.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/TODO +12 -1
  2. data/VERSION +1 -1
  3. data/bin/sensible-cinema +3 -1
  4. data/bin/sensible-cinema-cli +4 -4
  5. data/change_log_with_feature_list.txt +7 -0
  6. data/conclusions +6 -0
  7. data/lib/blanker.rb +20 -1
  8. data/lib/mouse.rb +1 -1
  9. data/lib/mouse_draw.rb +41 -0
  10. data/lib/muter.rb +2 -30
  11. data/lib/screen_tracker.rb +21 -9
  12. data/lib/subtitle_profanity_finder.rb +3 -1
  13. data/spec/notes +19 -1
  14. data/spec/screen_tracker.spec.rb +4 -4
  15. data/todo.upconvert +30 -19
  16. data/upconvert.bat +0 -0
  17. data/upconvert_netflix/latest2/go_no_upscaling.bat +1 -0
  18. data/upconvert_netflix/latest2/go_upscaling.bat +12 -0
  19. data/upconvert_netflix/latest2/push2.GRF +0 -0
  20. data/upconvert_netflix/latest2/setup_capture_coords.rb +27 -0
  21. data/upconvert_netflix/latest2/setup_directshow_filter_params.rb +29 -0
  22. data/upconvert_netflix/latest2/upconvert_from_screen_me2.avs +19 -0
  23. data/upconvert_netflix/{latest_now_possibly_oudated → old/latest_now_possibly_oudated}/push2.GRF +0 -0
  24. data/upconvert_netflix/{latest_now_possibly_oudated → old/latest_now_possibly_oudated}/upconvert_from_screen_me2.avs +0 -0
  25. data/upconvert_netflix/{position_window.png → old/position_window.png} +0 -0
  26. data/upconvert_netflix/{push_source_desktop.GRF → old/push_source_desktop.GRF} +0 -0
  27. data/upconvert_netflix/{upconvert_from_screen.avs → old/upconvert_from_screen.avs} +0 -0
  28. data/upconvert_netflix/{upconvert_from_screen_me.avs → old/upconvert_from_screen_me.avs} +0 -0
  29. data/upconvert_netflix/{upconvert_from_screen_me2.avs → old/upconvert_from_screen_me2.avs} +0 -0
  30. data/upconvert_netflix/{upconvert_from_screen_me_push_source.avs → old/upconvert_from_screen_me_push_source.avs} +0 -0
  31. data/upconvert_netflix/{uscreen.GRF → old/uscreen.GRF} +0 -0
  32. data/upconvert_netflix/{uscreen_me.GRF → old/uscreen_me.GRF} +0 -0
  33. data/zamples/edit_decision_lists/dvds/bambi.txt +1 -4
  34. data/zamples/edit_decision_lists/dvds/edls_being_edited/test_delete_list_for_experimenting_with.txt +2 -2
  35. data/zamples/edit_decision_lists/dvds/{edls_being_edited/flight_of_the_navigator.txt → flight_of_the_navigator.txt} +1 -1
  36. data/zamples/edit_decision_lists/dvds/if_a_man_answers.txt +43 -0
  37. metadata +22 -15
  38. data/upconvert_netflix/HOW_TO_USE.txt +0 -37
  39. data/zamples/edit_decision_lists/dvds/edls_being_edited/other_side_of_heaven.txt +0 -19
data/TODO CHANGED
@@ -26,12 +26,17 @@
26
26
 
27
27
  == yes do ordered in conjunction with the above probably ==
28
28
  release at some point...Oliver? facebook?
29
- snapshots of snow white "normal", then deploy pics
29
+ snapshots of snow white "normal", then deploy the various pics
30
30
  lightning strike from various outlets...
31
31
  research VOB
32
32
  timesplits?
33
33
 
34
34
  == yes do, un-ordered currently, from the various future release options ==
35
+ todo.upconvert
36
+ except I'm really close [?] with netflix instant upconverter...hmm...
37
+ new open button "edit the one for current DVD"
38
+ the other button should open in the "editing" EDL dir.
39
+ overlapping mute failure when you hit the "watch edited realtime" should popup.
35
40
  split out the "dependency" code from main.
36
41
  try buy edit lists from all x,y,z [?] maybe ask for them for free first? ()
37
42
  http://www.familysafemovies.com
@@ -50,6 +55,7 @@
50
55
  make it load faster! this is cuh-razy! or splash screen! yes!
51
56
  netflix quality upconverter
52
57
  want a prototype mplayer upconverter...I guess...
58
+ add back in scale for OS X, see if it's expensive or not...I'd guess not though...
53
59
  research XBMC
54
60
  @XBMC: your stuff is broken in at least these two ways (bug reports)
55
61
  also are they 30fps or not? and how do they handle timesplits?
@@ -68,6 +74,7 @@
68
74
  0.3 ... ? huh?
69
75
  fix released version to work in mac
70
76
  release capture filter, advertise it :)
77
+ report ffmpeg bug, mplayer various :P
71
78
  note "you want to optimize your reverse blitting first... :)"
72
79
  test speed of from DESKTOP versus HWND.
73
80
  can use hwnd. Somehow automated.
@@ -81,6 +88,7 @@
81
88
  urug again?
82
89
  after works in mac. Why not?
83
90
  if 2 EDL's, still can choose a title track
91
+ advertise virtual audio
84
92
  auto-add largest title to the generator EDL
85
93
  complain if times looks wrong...on playback? sum time
86
94
  tighten old splits... [remove, really, I guess...sure while I only have few...and also add better instructions...]
@@ -89,6 +97,7 @@
89
97
  @instructions "this is great for comparing srt's, except...when it isn't, then you have to..."
90
98
  @instructions: full srt how-to document instead of tooltip [?] or combine the two! yes!
91
99
  volume_name => dvd_volume_name
100
+ C-based stuff cleanup loose ends
92
101
  why is the Sintel's EDL seemingly off?
93
102
  ascertain how accurate mplayer EDL is...I guess compared to...umm...something?
94
103
  fix discrepancy between EDL mplayer and ffmpeg...maybe a new button "accurate EDL playback"?
@@ -175,6 +184,8 @@
175
184
  investigate: can I use zoomplayer max?
176
185
 
177
186
  == DVD+-DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
187
+ @ffdshow-tryouts: don't crash me!
188
+ conference it can "pick out songs" (like a music video? mp3's?)
178
189
  check with WME plugins, add instructions, then note in the README "support for x..."
179
190
  "1:07:5.718" , "1:07:10.447", "profanity", "ba.....", "Faraday that [ba.....] That ba He's gonna wish he never met us",
180
191
  should have dots uh guess...
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.25.0
1
+ 0.25.1
data/bin/sensible-cinema CHANGED
@@ -321,7 +321,9 @@ module SensibleSwing
321
321
  if OS.mac?
322
322
  '' # avoid odd message try appending the scale filter <sigh> I don't *want* the scale filter with no upconversion gah.
323
323
  else
324
- "pullup,softskip"
324
+ # until I find out if they were making me too slow on older comps'
325
+ # "pullup,softskip"
326
+ ''
325
327
  end
326
328
  end
327
329
  end
@@ -94,10 +94,10 @@ def go_sc(args)
94
94
  screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), overlay
95
95
  does_not_need_mouse_jerk = YAML.load_file(player_description)["does_not_need_mouse_movement"]
96
96
  unless does_not_need_mouse_jerk
97
- p 'yes mouse jitter' if $VERBOSE or $DEBUG
97
+ p 'yes using mouse jitter' if $VERBOSE or $DEBUG
98
98
  Mouse.jitter_forever_in_own_thread # when this ends you know a snapshot was taken...
99
99
  else
100
- p 'no mouse jitter' if $VERBOSE or $DEBUG
100
+ p 'not using mouse jitter' if $VERBOSE or $DEBUG
101
101
  end
102
102
 
103
103
  # exit early if we just wanted a screen dump...a little kludgey...
@@ -105,7 +105,7 @@ def go_sc(args)
105
105
  puts 'warning--only doing screen dump in t-minus 2s...'
106
106
  sleep 2
107
107
  puts 'snap!'
108
- screen_tracker.dump_bmp
108
+ screen_tracker.dump_bmps
109
109
  exit 1
110
110
  end
111
111
  screen_tracker.process_forever_in_thread
@@ -115,7 +115,7 @@ def go_sc(args)
115
115
 
116
116
  OCR.unserialize_cache_from_disk # do this every time so we don't delete it if they don't have one...
117
117
 
118
- puts "Opening the curtains... (please play in your other player now)"
118
+ puts "Opening the curtains... (please play in your other video player now)"
119
119
  overlay.start_thread true
120
120
  key_input = KeyboardInput.new overlay
121
121
  key_input.start_thread # status thread
@@ -1,3 +1,10 @@
1
+ == 0.25.1 ==
2
+
3
+ Added ability to dynamically "find" which window contained the playing movie, and capture it, from desktop,
4
+ for upscaling or capturing.
5
+
6
+ added ability to "minimize" and "unminimize" a movie player window in order to "simulate" blanking.
7
+
1
8
  == 0.25.0 ==
2
9
 
3
10
  Created my own directshow screen capture filter to go along with netflix instant upconvert,
data/conclusions ADDED
@@ -0,0 +1,6 @@
1
+ "commercial" players, like windows media player, will "seek" based on 30 fps, even if
2
+ the underlying is 29.97
3
+ however if you allow them to just continue playing, they use wall time, which is 29.97 fps
4
+
5
+ makemkv can give you streams that are up to like 2s out of whack with the DVD. tsmuxer
6
+ seems to fix those though, if you unmux them.
data/lib/blanker.rb CHANGED
@@ -47,11 +47,28 @@ else
47
47
  @fr.set_visible(false) # hide it to start
48
48
  end
49
49
 
50
- @@use_mouse = true
50
+ @@use_mouse = false
51
+ @@use_foreground_window_minimize = true
52
+ if @@use_foreground_window_minimize
53
+ require 'win32/screenshot'
54
+ SW_MINIMIZE = 6
55
+ end
56
+
57
+ def self.minimize_hwnd hwnd
58
+ Win32::Screenshot::BitmapMaker.show_window(hwnd, SW_MINIMIZE)
59
+ end
60
+
61
+ def self.restore_hwnd hwnd
62
+ Win32::Screenshot::BitmapMaker.restore(hwnd)
63
+ end
51
64
 
52
65
  def self.blank_full_screen! seconds
66
+
53
67
  if @@use_mouse
54
68
  Mouse.single_click_left_mouse_button
69
+ elsif @@use_foreground_window_minimize
70
+ @foreground_hwnd ||= Win32::Screenshot::BitmapMaker.foreground_window
71
+ minimize_hwnd @foreground_hwnd
55
72
  else
56
73
  # somewhat hacky work around for doze: http://www.experts-exchange.com/Programming/Languages/Java/Q_22977145.html
57
74
  @fr.setAlwaysOnTop(false)
@@ -69,6 +86,8 @@ else
69
86
  def self.unblank_full_screen!
70
87
  if @@use_mouse
71
88
  Mouse.single_click_left_mouse_button
89
+ elsif @@use_foreground_window_minimize
90
+ restore_hwnd @foreground_hwnd
72
91
  else
73
92
  # just move it off screen...lodo
74
93
  @fr.set_location(-2100, -2100)
data/lib/mouse.rb CHANGED
@@ -116,7 +116,7 @@ module Mouse
116
116
  VK_LBUTTON = 0x01 # mouse left button for GetAsyncKeyState
117
117
 
118
118
  def left_mouse_button_state
119
- GetAsyncKeyState(VK_LBUTTON) # ignore a first call, which also tells us if it has changed at all since last call
119
+ GetAsyncKeyState(VK_LBUTTON) # ignore a first response, which also tells us if it has changed at all since last call
120
120
  if GetAsyncKeyState(VK_LBUTTON) == 0 # zero means up
121
121
  :up
122
122
  else
data/lib/mouse_draw.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'mouse'
2
+
3
+
4
+ class MouseDraw
5
+
6
+ def self.go
7
+
8
+ require 'java'
9
+
10
+ java_import 'javax.swing.JFrame'
11
+ java_import 'javax.swing.JButton'
12
+ java_import 'com.sun.awt.AWTUtilities'
13
+
14
+ f = JFrame.new
15
+ f.add JButton.new('capture window')
16
+ f.set_size(200,200)
17
+
18
+ AWTUtilities.set_window_opacity(f, 0.5)
19
+
20
+ # wait till mouse goes down...
21
+ while(Mouse.left_mouse_button_state == :up)
22
+ sleep 0.05
23
+ print '.'
24
+ end
25
+ f.undecorated = true
26
+ f.default_close_operation = JFrame::EXIT_ON_CLOSE
27
+ f.always_on_top = true
28
+ f.visible = true
29
+ f.set_location(Mouse.get_mouse_location)
30
+ while(Mouse.left_mouse_button_state == :down)
31
+ # set_size
32
+ end
33
+ #f.close
34
+ end
35
+
36
+ end
37
+
38
+
39
+ if $0 == __FILE__
40
+ MouseDraw.go
41
+ end
data/lib/muter.rb CHANGED
@@ -53,38 +53,10 @@ module Muter
53
53
  keybd_event(VK_VOLUME_DOWN, 0, KEYEVENTF_KEYUP, nil)
54
54
  end
55
55
 
56
- @@use_mouse = false # inventionzy
57
- @@use_static_on_top = false # inventionzy
58
- @@use_down_volume_button = true
59
-
60
- def start_playing_static
61
- @player = PlayAudio.new(__DIR__ + '/static.wav')
62
- @player.loop
63
- p 'STARTED STATIC'
64
- end
65
-
66
- def stop_playing_static
67
- if @player
68
- p 'STOPPED STATIC'
69
- @player.stop
70
- @player = nil
71
- end
72
- end
73
-
74
- @@use_down_volume_button_number = 3
75
-
76
56
  def mute!
77
57
  #unmute! # just in case...somehow this was causing problems...windows 7 perhaps? VLC?
78
- # anyway we just use a toggle for now...dangerous but works hopefully
79
- if @@use_mouse
80
- Mouse.single_click_left_mouse_button
81
- elsif @@use_static_on_top
82
- start_playing_static
83
- elsif @@use_down_volume_button
84
- @@use_down_volume_button_number.times { hit_volume_down_key }
85
- else
86
- hit_mute_key
87
- end
58
+ # anyway we just use a toggle for now...dangerous but works hopefully...
59
+ hit_mute_key
88
60
  end
89
61
 
90
62
  # LODO better for doze 7/xp
@@ -19,10 +19,17 @@ require 'win32/screenshot'
19
19
  require 'sane'
20
20
  require 'yaml'
21
21
  require File.dirname(__FILE__)+ '/ocr'
22
+ require 'ffi'
22
23
 
23
24
  class ScreenTracker
24
25
 
25
- def self.new_from_yaml yaml, callback
26
+ extend FFI::Library
27
+ ffi_lib 'user32'
28
+ # second parameter, pointer, LPRECT is FFI::MemoryPointer.new(:long, 4)
29
+ # read it like rect.read_array_of_long(4)
30
+ attach_function :GetWindowRect, [:long, :pointer], :int # returns a BOOL
31
+
32
+ def self.new_from_yaml yaml, callback # callback can be nil, is used for timestamp changed stuff
26
33
  settings = YAML.load yaml
27
34
  return new(settings["name"], settings["x"], settings["y"], settings["width"],
28
35
  settings["height"], settings["use_class_name"], settings["digits"], callback)
@@ -32,13 +39,13 @@ class ScreenTracker
32
39
 
33
40
  # digits are like {:hours => [100,5], :minute_tens, :minute_ones, :second_tens, :second_ones}
34
41
  # digits share the height start point, have their own x and width...
35
- def initialize name_or_regex,x,y,width,height,use_class_name=nil,digits=nil,callback=nil
42
+ def initialize name_or_regex, x, y, width, height, use_class_name=nil, digits=nil, callback=nil
36
43
  # cache to save us 0.00445136 per time LOL
37
44
  @name_or_regex = name_or_regex
38
45
  @use_class_name = use_class_name
39
- get_hwnd
40
46
  pps 'height', height, 'width', width if $VERBOSE
41
47
  raise 'poor dimentia' if width <= 0 || height <= 0
48
+ get_hwnd_loop_forever
42
49
  max_x, max_y = Win32::Screenshot::Util.dimensions_for(@hwnd)
43
50
  if(x < 0 || y < 0)
44
51
  if x < 0
@@ -48,7 +55,6 @@ class ScreenTracker
48
55
  y = max_y + y
49
56
  end
50
57
  end
51
- @height = height
52
58
  @x = x; @y = y; @x2 = x+width; @y2 = y+height; @callback = callback
53
59
  @max_x = max_x
54
60
  raise "poor width or wrong window #{@x2} #{max_x} #{x}" if @x2 > max_x || @x2 == x
@@ -65,7 +71,7 @@ class ScreenTracker
65
71
  pps 'using x',@x, 'from x', x, 'y', @y, 'from y', y,'x2',@x2,'y2',@y2,'digits', @digits.inspect if $VERBOSE
66
72
  end
67
73
 
68
- def get_hwnd
74
+ def get_hwnd_loop_forever
69
75
  if @name_or_regex.to_s.downcase == 'desktop'
70
76
  # full screen option
71
77
  assert !@use_class_name # not an option
@@ -89,7 +95,7 @@ class ScreenTracker
89
95
  end
90
96
  puts 're-established contact with window'
91
97
  end
92
-
98
+ true
93
99
  end
94
100
 
95
101
  # gets the snapshot of "all the digits together"
@@ -104,7 +110,7 @@ class ScreenTracker
104
110
  end
105
111
 
106
112
  # writes out all screen tracking info to various files in the current pwd
107
- def dump_bmp filename = 'dump.bmp'
113
+ def dump_bmps filename = 'dump.bmp'
108
114
  File.binwrite filename, get_bmp
109
115
  File.binwrite 'all.' + filename, get_full_bmp
110
116
  dump_digits(get_digits_as_bitmaps, 'dump_bmp') if @digits
@@ -144,10 +150,16 @@ class ScreenTracker
144
150
  out
145
151
  end
146
152
 
147
- def get_relative_coords
153
+ def get_relative_coords_of_timestamp_window
148
154
  [@x,@y,@x2,@y2]
149
155
  end
150
156
 
157
+ def get_coords_of_window_on_display # yea
158
+ out = FFI::MemoryPointer.new(:long, 4)
159
+ ScreenTracker.GetWindowRect @hwnd, out
160
+ out.read_array_of_long(4)
161
+ end
162
+
151
163
  def identify_digit bitmap
152
164
  OCR.identify_digit(bitmap, @digits)
153
165
  end
@@ -184,7 +196,7 @@ class ScreenTracker
184
196
  @previously_displayed_warning = true
185
197
  time_since_last_screen_change = Time.now
186
198
  # also reget window hwnd, just in case that's the problem...(can be with VLC moving from title to title)
187
- get_hwnd
199
+ get_hwnd_loop_forever
188
200
  end
189
201
  end
190
202
  }
@@ -116,6 +116,7 @@ module SubtitleProfanityFinder
116
116
  's'*2)) => ['a..', :full_word],
117
117
  arse + 'h' +
118
118
  'ole' => 'a..h...',
119
+ 'dieu' => ['deity', :full_word], # TODO fails...
119
120
  arse + 'wipe' => 'a..w....',
120
121
  'jes' +
121
122
  'u' + 's' => 'j....',
@@ -129,7 +130,7 @@ module SubtitleProfanityFinder
129
130
  bad_profanities.merge! extra_profanity_hash # LODO make easier to use...
130
131
 
131
132
  semi_bad_profanities = {}
132
- ['bloody', 'moron', 'idiot', 'butt', 'sex', 'genital', 'make love', 'suck',
133
+ ['bloody', 'moron', 'idiot', 'sex', 'genital', 'make love', 'suck',
133
134
  'making love', 'love mak',
134
135
  'breast',
135
136
  'piss'].each{|name|
@@ -137,6 +138,7 @@ module SubtitleProfanityFinder
137
138
  semi_bad_profanities[name] = name
138
139
  }
139
140
  semi_bad_profanities['crap'] = ['crap', :full_word]
141
+ semi_bad_profanities['crap'] = ['butt', :full_word]
140
142
 
141
143
  all_profanity_combinationss = [convert_to_regexps(bad_profanities), convert_to_regexps(semi_bad_profanities)]
142
144
 
data/spec/notes CHANGED
@@ -1,8 +1,26 @@
1
-
2
1
  up next:
3
2
 
3
+ == ==
4
+ desktop filter:
5
+ 1024x1024:
6
+ 15% one cpu used by the capture utility (0.013ms per capture)
7
+ good for now I guess (no transparency visible...)
8
+ 12 fps <sigh>
9
+
4
10
  == upconvert netflix ==
5
11
 
12
+ === mplayer avisynth ===
13
+ http://www.youtube.com/watch?v=hkOnH36S_pY&feature=player_profilepage
14
+ mplayer's default upscaling seems to introduce wild dots..probably
15
+ I think MS's bundled "magnifier" does some internal smudging for me, otherwise it would look awful
16
+ mplayer at default seems to be doing weird things?
17
+ paint.net on the win32::screenshot capture seemed to match quite well what the screen had.
18
+ ffplay seems to show an exact verbatim copy...
19
+ actually mplayer seems to be a good exact duplicate...
20
+
21
+ === other ===
22
+
23
+
6
24
  media player classic appears to have no cache.
7
25
  "uscreencapture settings" appears to be per app, so lost with a .grf file save [?]
8
26
  or maybe appear to be overridden...by WMC, mplayer10, not virtualdub, not ffmpeg, yes mplayer
@@ -83,7 +83,7 @@ describe ScreenTracker do
83
83
 
84
84
  it "should have different bmp if sizes different" do
85
85
  a = ScreenTracker.new("VLC",10,10,5,5)
86
- assert a.get_relative_coords == [10,10,15,15]
86
+ assert a.get_relative_coords_of_timestamp_window == [10,10,15,15]
87
87
  b = ScreenTracker.new("VLC",10,10,50,50)
88
88
  assert a.get_bmp != b.get_bmp
89
89
  end
@@ -106,7 +106,7 @@ describe ScreenTracker do
106
106
  it "should assign right offsets" do
107
107
  a = ScreenTracker.new("VLC",-10,-10,5,5)
108
108
  a.get_bmp
109
- x,y,x2,y2=a.get_relative_coords
109
+ x,y,x2,y2=a.get_relative_coords_of_timestamp_window
110
110
  hwnd = Win32::Screenshot::BitmapMaker.hwnd("VLC")
111
111
  max_x, max_y = Win32::Screenshot::Util.dimensions_for(hwnd)
112
112
  x.should == max_x-10
@@ -120,7 +120,7 @@ describe ScreenTracker do
120
120
  b = ScreenTracker.new("VLC",10,10,50,50)
121
121
  c = ScreenTracker.new("VLC",-99,-99,50,50)
122
122
  assert a.get_bmp == b.get_bmp
123
- assert c.get_relative_coords != b.get_relative_coords
123
+ assert c.get_relative_coords_of_timestamp_window != b.get_relative_coords_of_timestamp_window
124
124
  cb = c.get_bmp
125
125
  bb = b.get_bmp
126
126
  c.get_bmp.length == b.get_bmp.length
@@ -160,7 +160,7 @@ describe ScreenTracker do
160
160
  - 7
161
161
  YAML
162
162
  a = ScreenTracker.new_from_yaml(yaml,nil)
163
- a.get_relative_coords.should == [32,34,132,54]
163
+ a.get_relative_coords_of_timestamp_window.should == [32,34,132,54]
164
164
  end
165
165
 
166
166
  it "should be able to dump images it uses" do
data/todo.upconvert CHANGED
@@ -1,6 +1,8 @@
1
+ == dvd ==
2
+
1
3
  compare with powerdvd/ffdshow
2
4
 
3
- compare various computers/monitors...
5
+ compare (DVD) various computers/monitors...
4
6
 
5
7
  experiment with 2x or not with various people...
6
8
  also should I change screen resolution down to 800x600 then double upconvert? better?
@@ -9,34 +11,43 @@ lanczos 10? is filter length 4 better? huh? what?
9
11
 
10
12
  hqdn3d settings?
11
13
 
12
- upconvert netflix instant yes!
13
-
14
14
  do I need double tapping? http://archive2.avsforum.com/avs-vb/showthread.php?s=&postid=4760581#post4760581
15
15
 
16
- my own Dshow input filter, which also has a "command line" way of configuring it, for ease of use.
17
- could "just" use the push source + mplayer maybe [?]
18
- would be nice to retrofit it with real "video capture source" to see if it works well with VLC or not...
19
- assume it would similarly fail LOL. I think what you need is either sleeps or...or...IAmPushSource I guess.
20
-
21
- It probably needs to send out input "only if it's changed" I'm thinkin..."
22
-
23
16
  === netflix/OS screen capture ===
24
17
 
25
- update the OS README file
26
- warn on aero (dual monitor?)
27
- troubleshooting: tell them to use the BitTest, reverse should be at least 200 fps I guess...
28
18
  make it able to grab from a window, and work when dragged too...
29
19
  can I make it look awesome?
20
+ tell mplayer how to fix directx :)
21
+
30
22
  ==== some day ====
31
- more precise timing...why not?
32
- can I live with aero wasn't bitblt getting like 800fps *with* aero?
33
- threading
34
- shearing
35
- perfect looks LOL
36
- make really low q stuff like youtube 360 look good
23
+ shearing
24
+ perfect looks of absolutely everything upconverted LOL
25
+ # TODO cut off all black edges too...why not, eh? mplayer has crop detect...
26
+ make really low q stuff like youtube less than even 360 look good
27
+ # TODO can align better youtube
28
+ better benchmarker (windows vs. desktop, just show reverse)
29
+
30
+ == OS dshow screen tracker ==
31
+
32
+ It probably needs to send out input "only if it's changed" I'm thinkin..." for my purposes anyway...
33
+ VLC compatible'ify it..
34
+ can limit it to only 5 fps [?]
35
+ @ avisynth wiki: max fps
36
+ is ffplay on avisynth piece of crud compared to the other? vs. mplayer? why only like 10 fps? what the...
37
+
38
+ jruby "drag to select"
39
+
40
+ === some day ===
41
+ bounty multi-thread scaling, iff it seems helpful-er for quad core.
42
+ threading the input [?] (a bit complicated because of the "only if it's changed" mantra)
43
+ can I live with aero wasn't bitblt getting like 800fps *with* aero?
44
+ more efficient by skipping an extra copy (we're already pretty fast though...)
37
45
 
38
46
  == never ==
39
47
 
40
48
  add another sharpen filter?
41
49
 
42
50
  add a VLC version?
51
+
52
+
53
+ prop: http://ubuntuforums.org/showthread.php?t=804537 didn't I have another list somewhere... ?
data/upconvert.bat CHANGED
Binary file
@@ -0,0 +1 @@
1
+ mplayer -nocache -vo direct3d upconvert_from_screen_me2.avs
@@ -0,0 +1,12 @@
1
+ mplayer -nocache -geometry 70%x70% -sws 9 -ssf ls=25.0 -ssf cs=7.0 -vf hqdn3d=7:7:7:7,scale=1680:-10:0:0:3 upconvert_from_screen_me2.avs
2
+
3
+ @rem hqdn3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
4
+
5
+
6
+
7
+
8
+ @rem 0:1:4:4 for DVD LOL
9
+ @rem pp=hb:y/vb:y,
10
+
11
+
12
+ @rem mplayer autoq=100 -nocache -geometry 50%x40% -sws 9 -ssf ls=75.0 -ssf cs=7.0 -vf nr=1000,scale=1680:-10:0:0:4 upconvert_from_screen_me2.avs
Binary file
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ gem 'ffi'
3
+ require 'ffi'
4
+ begin
5
+ require 'sane'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'sane' # LODO
9
+ end
10
+ require_relative '../../lib/screen_tracker.rb'
11
+ require_relative './setup_directshow_filter_params'
12
+
13
+ player_description = "..\\..\\zamples\\players\\youtube\\normal_in_youtube.com.chrome.txt" # right path...
14
+ screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), nil
15
+ p screen_tracker.get_hwnd_loop_forever
16
+ p screen_tracker.get_coords_of_window_on_display
17
+ x,y,x2,y2 = screen_tracker.get_coords_of_window_on_display
18
+
19
+ # numbers are all right, except, for youtube "within a user window", when the y2 is too high, and includes the red at the bottom
20
+ y2 -= 50
21
+ setter = SetupDirectshowFilterParams.new
22
+ setter.set_single_setting 'height', y2 - y
23
+ setter.set_single_setting 'width', x2 - x
24
+ setter.set_single_setting 'start_x', x
25
+ setter.set_single_setting 'start_y', y
26
+ p 'set it to', x, y, x2, y2, 'width', x2-x, 'height', y2-y
27
+ screen_tracker.dump_bmps
@@ -0,0 +1,29 @@
1
+ # taken from https://github.com/rdp/open-source-directshow-screen-capture-filter/tree/master/configuration_setup_utility
2
+
3
+ class SetupDirectshowFilterParams
4
+
5
+ Settings = ['height', 'width', 'start_x', 'start_y']
6
+
7
+ def initialize
8
+ require 'win32/registry'
9
+ @screen_reg = Win32::Registry::HKEY_CURRENT_USER.create "Software\\os_screen_capture" # LODO .keys fails?
10
+ end
11
+
12
+ def set_single_setting name, value
13
+ raise unless Settings.include?(name)
14
+ raise unless value.is_a? Fixnum
15
+ # raise value.to_s if value < 0
16
+ @screen_reg.write(name, Win32::Registry::REG_DWORD, value.to_i)
17
+ end
18
+
19
+ # can be nil if not set...
20
+ def read_single_setting name
21
+ @screen_reg[name]
22
+ end
23
+
24
+ def teardown
25
+ @screen_reg.close
26
+ @screen_reg = nil
27
+ end
28
+
29
+ end
@@ -0,0 +1,19 @@
1
+ # from http://avisynth.org/mediawiki/Enhancing_dvd_videos
2
+
3
+ Video = DirectShowSource("push2.GRF", fps=35, audio=False, framecount=1000000) # fps appears to be a "max" fps
4
+ Return Video
5
+
6
+ #
7
+ # these are the size of your monitor that the output is displayed on. Unless it lags too much, then try experimenting with smaller values
8
+ # Video = ConvertToYUY2 (Video)
9
+ # screen_width = 1024 # CHANGE THIS TODO propagate it...
10
+ # screen_height = 768 # CHANGE THIS
11
+ #
12
+ # # note that you can get even better looking images by say, upscaling to 2x your current screen resolution, by uncommenting the following two lines
13
+ # screen_width = screen_width*2
14
+ # screen_height = screen_height*2
15
+ #
16
+ # Video = Lanczos4Resize (Video, screen_width, screen_height) # said to be a good upsampler...hmm...
17
+ #
18
+ # Video = Sharpen (Video, 0.78) # Helps sharpen smoothness enlarging does. 0.78 = (1.25*(1024/720))-1
19
+ # Return Video
File without changes
@@ -1,13 +1,10 @@
1
1
  # comments can go after a # on any line, for example this one.
2
2
 
3
3
  "mutes" => [
4
- # example line, uncomment the leading "#" to make it active
5
- # "0:00:01.0", "0:00:02.0", "profanity", "da..",
4
+ # it's clean!
6
5
  ],
7
6
 
8
7
  "blank_outs" => [
9
- # example line, uncomment the leading "#" to make it active
10
- # "00:03:00.0" , "00:04:00.0", "violence", "of some sort",
11
8
  ],
12
9
 
13
10
  "name" => "Bambi",
@@ -3,8 +3,8 @@
3
3
  ],
4
4
 
5
5
  "blank_outs" => [
6
- "00:02:00.0" , "00:02:10", "blanked out demo section",
6
+ "00:02:00.0" , "00:02:10", "blank out demo",
7
7
  ],
8
8
 
9
- "name" => "test delete list",
9
+ "name" => "test delete list for demos/inventionzy",
10
10
 
@@ -31,4 +31,4 @@
31
31
  "dvd_title_track" => "1",
32
32
  # "not edited out stuff" => "some violence",
33
33
  # "closing thoughts" => "still...",
34
- "mplayer_dvd_splits" => [],
34
+ "mplayer_dvd_splits" => [],
@@ -0,0 +1,43 @@
1
+ # comments can go after a # on any line, for example this one.
2
+ "name" => "if a man answers",
3
+
4
+ "mutes" => [
5
+
6
+ "00:15:02.167", "00:15:04.692", "profanity", "deity", "mon [deity]",
7
+ # got weird overlapping subtitles in this one...
8
+ #"0:35:54.318" , "0:35:59.515", "profanity", "goodness", "Maman thank [goodness] for you",
9
+ #"0:35:57.588" , "0:35:59.613", "profanity", "goodness", "Thank [goodness] for love",
10
+ "0:35:54.318" , "0:35:59.615", "profanity", "goodness", "Maman thank [goodness] for you",
11
+ "1:35:39.834" , "1:35:43.326", "profanity", "he..", "A little [he..] to make those two devils feel at home",
12
+
13
+ # put back this once blank outs are more precise
14
+ # "0:03:17.630" , "0:03:23.500", "profanity", "sex", "In the beglnnlng Father consldered Me Tarzan you Jane an adequate [sex] educatlon",
15
+ "0:05:50.249" , "0:05:54.743", "profanity", "make love", "And maman says that the only thing a man would rather do than [make love] is talk about himself",
16
+ "0:08:01.714" , "0:08:05.707", "profanity", "make love", "Chuckles So they won't [make love] to me all the time",
17
+ "0:24:46.017" , "0:24:50.579", "profanity", "sex", "Imagine our daughter alone with that seedy poverty stricken [sex] maniac",
18
+ "0:39:27.465" , "0:39:29.933", "profanity", "sex", "and keep an eye on daddy with all those [sex]y models",
19
+ "0:43:15.960" , "0:43:19.293", "profanity", "sex", "and keep an eye on daddy wlth all those [sex]y models",
20
+ "0:46:22.980" , "0:46:27.440", "profanity", "sex", "He just pooh poohed me but I know when one of my own [sex] has known love",
21
+ "0:25:05", "0:25:10", "sex", "mention nude",
22
+ "0:25:18", "0:25:21", "sex", "mention nude",
23
+
24
+ ],
25
+
26
+ "blank_outs" => [
27
+ # 1:46 2:00
28
+ # 2:25 2:50
29
+ # 3:06 3:43
30
+ # 4:45 5:05
31
+ "1:46", "5:05", "scantily clad pictures, could be split up more precisely", # TODO
32
+ "20:58", "21:20", "lingerie putting on",
33
+ "22:35", "22:43", "lingerie pics",
34
+ ],
35
+
36
+ "volume_name" => "IF_A_MAN_ANSWERS",
37
+ "disk_unique_id" => "270df07b|62294c73",
38
+ "dvd_title_track" => "1",
39
+ "dvd_title_track_length" => "6104.2", # sum length, on the DVD, use the show DVD info button to retrieve it.
40
+ "opensubtitles_number" => "238037",
41
+ # "not edited out stuff" => "some violence left in...",
42
+ "closing thoughts" => "a fun flick. this EDL needs to be double checked a bit still",
43
+ "mplayer_dvd_splits" => [],
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sensible-cinema
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.25.0
5
+ version: 0.25.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Roger Pack
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-02 00:00:00 -06:00
13
+ date: 2011-08-10 00:00:00 -06:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -222,6 +222,7 @@ files:
222
222
  - bin/sensible-cinema-cli
223
223
  - business_ideas.txt
224
224
  - change_log_with_feature_list.txt
225
+ - conclusions
225
226
  - developer_how_to_contribute_to_the_project.txt
226
227
  - documentation/DOCUMENTATION_README.TXT
227
228
  - documentation/how_to_create_your_own_delete_lists.txt
@@ -255,6 +256,7 @@ files:
255
256
  - lib/media_info_parser.rb
256
257
  - lib/mencoder_wrapper.rb
257
258
  - lib/mouse.rb
259
+ - lib/mouse_draw.rb
258
260
  - lib/mouse_forever.rb
259
261
  - lib/mplayer_edl.rb
260
262
  - lib/muter.rb
@@ -313,17 +315,22 @@ files:
313
315
  - todo.subtitle
314
316
  - todo.upconvert
315
317
  - upconvert.bat
316
- - upconvert_netflix/HOW_TO_USE.txt
317
- - upconvert_netflix/latest_now_possibly_oudated/push2.GRF
318
- - upconvert_netflix/latest_now_possibly_oudated/upconvert_from_screen_me2.avs
319
- - upconvert_netflix/position_window.png
320
- - upconvert_netflix/push_source_desktop.GRF
321
- - upconvert_netflix/upconvert_from_screen.avs
322
- - upconvert_netflix/upconvert_from_screen_me.avs
323
- - upconvert_netflix/upconvert_from_screen_me2.avs
324
- - upconvert_netflix/upconvert_from_screen_me_push_source.avs
325
- - upconvert_netflix/uscreen.GRF
326
- - upconvert_netflix/uscreen_me.GRF
318
+ - upconvert_netflix/latest2/go_no_upscaling.bat
319
+ - upconvert_netflix/latest2/go_upscaling.bat
320
+ - upconvert_netflix/latest2/push2.GRF
321
+ - upconvert_netflix/latest2/setup_capture_coords.rb
322
+ - upconvert_netflix/latest2/setup_directshow_filter_params.rb
323
+ - upconvert_netflix/latest2/upconvert_from_screen_me2.avs
324
+ - upconvert_netflix/old/latest_now_possibly_oudated/push2.GRF
325
+ - upconvert_netflix/old/latest_now_possibly_oudated/upconvert_from_screen_me2.avs
326
+ - upconvert_netflix/old/position_window.png
327
+ - upconvert_netflix/old/push_source_desktop.GRF
328
+ - upconvert_netflix/old/upconvert_from_screen.avs
329
+ - upconvert_netflix/old/upconvert_from_screen_me.avs
330
+ - upconvert_netflix/old/upconvert_from_screen_me2.avs
331
+ - upconvert_netflix/old/upconvert_from_screen_me_push_source.avs
332
+ - upconvert_netflix/old/uscreen.GRF
333
+ - upconvert_netflix/old/uscreen_me.GRF
327
334
  - vendor/jruby-complete-1.6.2.jar
328
335
  - vendor/mac_dvdid/bin/dvdid
329
336
  - vendor/mac_dvdid/include/dvdid/dvdid.h
@@ -348,13 +355,13 @@ files:
348
355
  - zamples/edit_decision_lists/dvds/cool runnings.txt
349
356
  - zamples/edit_decision_lists/dvds/edls_being_edited/court_jester.txt
350
357
  - zamples/edit_decision_lists/dvds/edls_being_edited/edl_for_unit_tests.txt
351
- - zamples/edit_decision_lists/dvds/edls_being_edited/flight_of_the_navigator.txt
352
- - zamples/edit_decision_lists/dvds/edls_being_edited/other_side_of_heaven.txt
353
358
  - zamples/edit_decision_lists/dvds/edls_being_edited/test_delete_list_for_experimenting_with.txt
359
+ - zamples/edit_decision_lists/dvds/flight_of_the_navigator.txt
354
360
  - zamples/edit_decision_lists/dvds/happiest baby on the block.txt
355
361
  - zamples/edit_decision_lists/dvds/harry_potter_3_prisoner_of_azkaban.txt
356
362
  - zamples/edit_decision_lists/dvds/hitchhiker's_guide_to_the_galaxy.txt
357
363
  - zamples/edit_decision_lists/dvds/how_to_train_your_dragon.txt
364
+ - zamples/edit_decision_lists/dvds/if_a_man_answers.txt
358
365
  - zamples/edit_decision_lists/dvds/iq.txt
359
366
  - zamples/edit_decision_lists/dvds/kung_fu_panda_1.txt
360
367
  - zamples/edit_decision_lists/dvds/legend_of_the_guardians_the_owls_of_gahoole.txt
@@ -1,37 +0,0 @@
1
- To use this (upscaling from your own computer):
2
-
3
- Steps:
4
-
5
- download/install uscreencapture: http://www.umediaserver.net/umediaserver/download.html
6
-
7
- download+install "windows sdk" http://msdn.microsoft.com/en-us/windows/bb980924 (rather big one here :) )
8
-
9
- download virtualdub: http://www.virtualdub.org/download.html
10
-
11
- Now start your "subject" to upconvert (ex: hulu, or netflix instant).
12
- You can pause it if desired. Don't fullscreen it.
13
- You'll want to leave it on its smallest "window" possible, that still has the most detail.
14
- So basically don't let your "subject" player do any stretching, you want to leave all of that for
15
- this program to do.
16
-
17
- Next you'll need dual monitor, ex: laptop screen plus the VGA out on the laptop.
18
- Position your "subject" movie so that it is flush in the top right of either monitor.
19
- See the file "position_window.png" for an demo. Installing NiftyWindows then
20
- "right mouse button+drag" can help you reposition it just right.
21
-
22
- Now in virtualdub, open the file upconvert_from_screen.avs.
23
-
24
- Click the "play" bottom left button.
25
- See if it is capturing the right monitor, how much of the video it is capturing, if any.
26
-
27
- Now search for the program "graphedt.exe", for me, this was in C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
28
-
29
- Run it. Use it to open the file uscreen.GRF
30
- Right click on the box "uscreencapture"
31
- Adjust the various properties so that it captures the video region you desire, by editing values, click "Apply",
32
- then clicking the "save" icon within graphedit. Then reopen the file within virtualdub to test your new settings.
33
- Note the x and y values you use.
34
-
35
- Now edit the text upconvert_from_screen.avs and fill in appropriate values.
36
-
37
- Now run it in virtualdub again, move virtualdub to your output display, enjoy watching it.
@@ -1,19 +0,0 @@
1
- # comments can go after a # on any line, for example this one.
2
- "name" => "The other side of heaven",
3
-
4
- "mutes" => [
5
- # an example line, uncomment the leading "#" to make it active
6
- # "0:00:01.0", "0:00:02.0", "profanity", "da..",
7
- ],
8
-
9
- "blank_outs" => [
10
- # an example line, uncomment the leading "#" to make it active
11
- # "00:03:00.0" , "00:04:00.0", "violence", "of some sort",
12
- ],
13
-
14
- "volume_name" => "OTHER_SIDE_OF_HEAVEN",
15
- "disk_unique_id" => "9338ab59|48d01042",
16
- "dvd_title_track" => "1", # most DVD's use title 1. Not all do, though. If sensible-cinema plays anything except the main title (for example, it plays a trailer), when you use it, see http://goo.gl/QHLIF to set this right.
17
- # "not edited out stuff" => "some violence",
18
- # "closing thoughts" => "still...",
19
- # "mplayer_dvd_splits" => ["59:59", "1:04:59"], # in mplayer, the DVD timestamp "resets" to zero for some reason, see http://goo.gl/yMfqX to set this value right. Note that [] is valid, if there are no resets.