sensible-cinema 0.25.3 → 0.25.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/TODO +42 -31
- data/VERSION +1 -1
- data/bin/sensible-cinema +56 -35
- data/bin/sensible-cinema-cli +5 -3
- data/change_log_with_feature_list.txt +18 -0
- data/lib/mouse.rb +31 -30
- data/lib/mouse_draw.rb +4 -2
- data/lib/muter.rb +8 -2
- data/lib/overlayer.rb +1 -0
- data/lib/storage.rb +3 -2
- data/spec/screen_tracker.spec.rb +1 -0
- data/spec/sensible_cinema_gui.spec.rb +3 -2
- data/todo.inventionzy.txt +7 -0
- data/upconvert.bat +1 -1
- data/zamples/edit_decision_lists/dvds/Harry Potter 2 chamber of secrets.txt +1 -1
- data/zamples/edit_decision_lists/dvds/edls_being_edited/cars_disney.txt +3 -1
- data/zamples/edit_decision_lists/dvds/harry_potter_3_prisoner_of_azkaban.txt +1 -1
- data/zamples/edit_decision_lists/dvds/tron_legacy.txt +1 -2
- data/zamples/players/vlc/windowed_total_length_under_an_hour.txt +1 -0
- metadata +2 -2
data/TODO
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
== roadmap [for just tasks, see below though] ==
|
|
2
2
|
|
|
3
|
-
netflix instant for OS X
|
|
4
3
|
upconvert DVD/netflix
|
|
4
|
+
srt release
|
|
5
|
+
tweaks/docu
|
|
5
6
|
C EDL
|
|
6
7
|
|
|
7
8
|
=== loose ordering/eventually ===
|
|
@@ -18,30 +19,38 @@
|
|
|
18
19
|
== high prio like blocking bugs ==
|
|
19
20
|
|
|
20
21
|
== under next release specific items: ==
|
|
22
|
+
make it suck in single EDL from imdb based on a list
|
|
21
23
|
|
|
22
24
|
== yes do ordered in conjunction with the above probably ==
|
|
23
25
|
|
|
24
26
|
== yes do, un-ordered currently, from the various future release options ==
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
change upconvert options needs its own "close" button
|
|
28
|
+
netflix instant for OS X
|
|
29
|
+
|
|
30
|
+
real docu on how to use the srt scanner
|
|
31
|
+
is there a bug if you switch DVD's
|
|
29
32
|
lightning strike from various outlets...
|
|
30
33
|
release at some point...Oliver? facebook? (one at a time...)
|
|
31
34
|
research VOB dirs
|
|
32
35
|
still needs timesplits? what about in XBMC? what about XBMC with DVD's
|
|
33
36
|
todo.upconvert
|
|
34
37
|
netflix quality upconverter, have a go at it
|
|
35
|
-
finalize screen
|
|
38
|
+
finalize screen capturer
|
|
36
39
|
have people test it
|
|
37
40
|
me test it
|
|
38
41
|
1x, 2x Sintel
|
|
39
42
|
snapshots of Sintel "normal", then deploy the various comparison pics
|
|
40
|
-
|
|
41
|
-
"
|
|
43
|
+
DVD test it (+- with others testing it for me too)
|
|
44
|
+
add new open button "edit the EDL for current DVD"
|
|
45
|
+
"fix" mplayer EDL pausing their code
|
|
42
46
|
the open button should open in the "editing" EDL dir.
|
|
47
|
+
test court jester :)
|
|
43
48
|
warn against makemkv (and check it, too, and offer a bounty! :)
|
|
49
|
+
(add the other type in there, esp. if a man answers, can parse it)
|
|
50
|
+
add to the template, DVD can use it
|
|
51
|
+
release
|
|
44
52
|
an overlapping mute failure when you hit the "watch edited realtime" should popup.
|
|
53
|
+
witch lady
|
|
45
54
|
split out the "dependency" code
|
|
46
55
|
try buy edit lists from all x,y,z [?] offer them money LOL
|
|
47
56
|
http://www.familysafemovies.com
|
|
@@ -69,21 +78,21 @@
|
|
|
69
78
|
consistency for flight of nav. srt? huh?
|
|
70
79
|
consistency of others, also "DVD reported full-time versus ts time" for others...
|
|
71
80
|
subtitles: if at beginning of a sub, add extra offset...hmm...why not?
|
|
72
|
-
fix released version to downloadable work in mac
|
|
73
|
-
report ffmpeg bug, mplayer various (as bugs):P
|
|
81
|
+
fix released version to downloadable work in mac [7zip won't cut it]
|
|
74
82
|
"--developer" mode
|
|
75
83
|
has "export JSON command line, reload code" , note it in the docu
|
|
76
84
|
new button "auto-test" a subtitles file for timing :)
|
|
77
85
|
new upconv button: auto-take some snapshots (just to straight mjpeg or jpeg or the what not [?])
|
|
78
86
|
advertise urug again?
|
|
79
87
|
after works in mac. Why not?
|
|
88
|
+
@ffmpeg windows builds += mulder +- VLC : libjpegturbo :)
|
|
80
89
|
advertise virtual audio
|
|
81
90
|
advertise screen capture
|
|
91
|
+
create skype fella...hmm...
|
|
82
92
|
mplayer directx patch check it...
|
|
83
93
|
auto-add largest title to the generator EDL
|
|
84
|
-
complain if times
|
|
85
|
-
|
|
86
|
-
"save to" -> same dir as "get from" yeah
|
|
94
|
+
complain if times look wrong...on playback? sum time
|
|
95
|
+
splits... [add better instructions...]
|
|
87
96
|
open EDL to edit it can have a rememberable DIR
|
|
88
97
|
@instructions "this is great for comparing srt's, except...when it isn't, then you have to..."
|
|
89
98
|
@instructions: full srt how-to document instead of tooltip [?] or combine the two! yes!
|
|
@@ -99,8 +108,7 @@
|
|
|
99
108
|
mac just die with instructions to use tsmuxer first...
|
|
100
109
|
actually don't do this, just make sure to warn them if they pass us an mkv...indeed.
|
|
101
110
|
check if some create buttons are now outdated...
|
|
102
|
-
check with blu-
|
|
103
|
-
donate tsmuxer (sent email), http://ffmpeg.zeranoe.com/builds, mulder +- [?] smplayer menumeter http://instantitunes.wordpress.com/2010/02/26/use-tsmuxer-on-snow-leopard
|
|
111
|
+
check with blu-rays...do they match timing-wise? sub-title wise?
|
|
104
112
|
youtube/hulu timings
|
|
105
113
|
split LLC's website+consumer
|
|
106
114
|
get LLC before a "real" domain name
|
|
@@ -109,17 +117,18 @@
|
|
|
109
117
|
try out libdvdcss + handbrake on the one that was totally broken...is it better?
|
|
110
118
|
it should work like a champ shouldn't it?
|
|
111
119
|
clear runnings
|
|
112
|
-
have ben and chris test it out, have it work, then ask about video quality
|
|
113
120
|
me try
|
|
121
|
+
have ben and chris test it out [realtime?]
|
|
114
122
|
try out disney digital copy
|
|
115
123
|
C player:
|
|
116
|
-
folder, look for title.edl
|
|
117
124
|
use DVD navigator (check)
|
|
118
125
|
just use mplayer EDL syntax, plus a title track (or just detect track change, if long enough, assume... :P) :)
|
|
119
126
|
http://msdn.microsoft.com/en-us/library/ms787412(VS.85).aspx
|
|
120
127
|
http://msdn.microsoft.com/en-us/library/dd407175(v=VS.85).aspx can be synchronous? might be a good first pass...
|
|
121
128
|
PlayPeriodInTitleAutoStop EC_DVD_PLAYPERIOD_AUTOSTOP
|
|
122
129
|
make it frame accurate output text :)
|
|
130
|
+
use 29.97 fps
|
|
131
|
+
folder, look for title.edl
|
|
123
132
|
allow it to "just play from X to Y exactly" ...
|
|
124
133
|
can start fullscreen
|
|
125
134
|
does this line up right/perfect? can it work, at all?
|
|
@@ -131,23 +140,15 @@
|
|
|
131
140
|
note to them windows vista/7: use ac3filter [?]
|
|
132
141
|
[A,B]
|
|
133
142
|
once I can jump around, advertise as a phantom editor :)
|
|
134
|
-
note better to previewer "you are about to preview these specific edits..." ?
|
|
135
143
|
ask for more beta testers for use, ask for more beta testers for creation, too
|
|
136
|
-
rinse and repeat with various ppl
|
|
137
144
|
create a semi-accurate phantom edit EDL [?] just with splits
|
|
138
145
|
http://www.chefelf.com/forums/index.php?showtopic=6176
|
|
139
|
-
|
|
140
|
-
add button "fast preview segment" (from dvd)
|
|
141
|
-
upconvert
|
|
142
|
-
test it out (+- with others)
|
|
146
|
+
add button "fast preview segment" (mplayer from dvd)
|
|
143
147
|
investigate WMC "call out to smplayer + EDL" or the like...
|
|
144
148
|
add to docu
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
call out to VLC on DVDNAV_ERROR occurrence? what the... if can reproduce, submit bug report with trace et al.
|
|
149
|
-
virtual desktop -> real input
|
|
150
|
-
|
|
149
|
+
refresh bug
|
|
150
|
+
can edit books, too.
|
|
151
|
+
|
|
151
152
|
== other lists to not do (duplicate the todo here if want to actually do it though) ==
|
|
152
153
|
|
|
153
154
|
todo.upconvert
|
|
@@ -161,13 +162,23 @@
|
|
|
161
162
|
== DVD decide later to move up or down ==
|
|
162
163
|
|
|
163
164
|
== DVD+-DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
|
|
165
|
+
accomodate ISO's as input as if they were DVD's themselves
|
|
166
|
+
make OCR actually use blanks versus skip
|
|
167
|
+
fix ffmpeg's "red hue" within their code
|
|
168
|
+
be a hero and sync the dvdnav repo's [?] also fix mplayer not being able to startup on some dvd's what the...this is nuts!
|
|
169
|
+
I'm almost beginning to think VLC for files, DEBUG_C player for DVD's (except on mac, where they just have to live hosed)
|
|
170
|
+
or maybe...umm...ask the dvdnav people why it might work with one and not the other? ask VLC? huh? what the...
|
|
171
|
+
call out to VLC on DVDNAV_ERROR occurrence? what the... if can reproduce, submit bug report with trace et al.
|
|
172
|
+
report ffmpeg bugs as real bugs, mplayer various (as bugs):P
|
|
173
|
+
the final "edited.avi" really "could/should" be playable in WMP...if possible
|
|
174
|
+
note better to previewer "you are about to preview these specific edits..." ?
|
|
175
|
+
"save to" -> same dir as "get from" yeah
|
|
164
176
|
inventionzy: blu-ray stuff from todo.inventionzy
|
|
165
177
|
figure out a way to get to the roku [ps3ms?], +- netflix edited to roku LOL
|
|
166
|
-
advertise virtual desktop :)
|
|
167
178
|
port to mac OS X
|
|
168
179
|
ppc dvdid? documentation button? notepad?
|
|
169
180
|
say something if the EDL is actually "empty" :)
|
|
170
|
-
already donated: unlocker, mac fan thing, open office, many sourceforge tops, 7zip, VLC, mplayer, cannot donate: ffmpeg
|
|
181
|
+
already donated: mplayer, vlc, menumeter, http://instantitunes.wordpress.com/2010/02/26/use-tsmuxer-on-snow-leopard, unlocker, mac fan thing, open office, many sourceforge tops, 7zip, VLC, mplayer, cannot donate: ffmpeg, http://ffmpeg.zeranoe.com/builds, tsmuxer (sent email), asked mulder, smplayer ($5)
|
|
171
182
|
note "you want to optimize your reverse blitting first... :)"
|
|
172
183
|
if 2 EDL's, still can choose a title track
|
|
173
184
|
fast preview: change it to be aggressive sometimes yes, other times no
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.25.
|
|
1
|
+
0.25.4
|
data/bin/sensible-cinema
CHANGED
|
@@ -93,14 +93,13 @@ module SensibleSwing
|
|
|
93
93
|
ARGV.index("--create-mode")
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
# currently advanced mode only *adds* buttons
|
|
97
96
|
def new_jbutton title, tooltip = nil
|
|
98
97
|
button = JButton.new title
|
|
99
98
|
button.tool_tip = tooltip
|
|
100
99
|
button.set_bounds(44, @starting_button_y, @button_width, 23)
|
|
101
100
|
@panel.add button
|
|
102
101
|
@buttons << button
|
|
103
|
-
if block_given? # allow for new_jbutton("xx") do ... end [this
|
|
102
|
+
if block_given? # allow for new_jbutton("xx") do ... end [this is possible through some miraculous means LOL]
|
|
104
103
|
button.on_clicked { yield }
|
|
105
104
|
end
|
|
106
105
|
increment_button_location
|
|
@@ -133,15 +132,14 @@ module SensibleSwing
|
|
|
133
132
|
end
|
|
134
133
|
|
|
135
134
|
LocalStorage = Storage.new("sensible_cinema_storage")
|
|
136
|
-
LocalStorage.set_default('screen_multiples', 1.5) # high compatibility :)
|
|
137
135
|
|
|
138
|
-
def close_when_done thread,
|
|
139
|
-
if
|
|
140
|
-
Thread.new { thread.join;
|
|
136
|
+
def close_when_done thread, j_item
|
|
137
|
+
if j_item
|
|
138
|
+
Thread.new { thread.join; j_item.dispose }
|
|
141
139
|
end
|
|
142
140
|
end
|
|
143
141
|
|
|
144
|
-
def
|
|
142
|
+
def add_play_upconvert_buttons
|
|
145
143
|
|
|
146
144
|
@watch_file_upconvert = new_jbutton( "Watch a movie file upconverted (unedited)") do
|
|
147
145
|
popup = warn_if_no_upconvert_options_currently_selected
|
|
@@ -167,17 +165,33 @@ module SensibleSwing
|
|
|
167
165
|
|
|
168
166
|
end
|
|
169
167
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
# a window that when closed doesn't bring the whole app down
|
|
169
|
+
def new_child_window
|
|
170
|
+
child = MainWindow.new
|
|
171
|
+
child.setDefaultCloseOperation(JFrame::DISPOSE_ON_CLOSE)
|
|
172
|
+
child.parent=self # this should have failed in the PPL
|
|
173
|
+
child
|
|
174
174
|
end
|
|
175
|
+
|
|
176
|
+
attr_accessor :parent, :upconv_line
|
|
175
177
|
|
|
176
178
|
def add_change_upconvert_options_button
|
|
177
|
-
@show_upconvert_options = new_jbutton("Set Playback Upconversion Options") do
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
@show_upconvert_options = new_jbutton("Set Playback Upconversion Quality Options") do
|
|
180
|
+
|
|
181
|
+
unless LocalStorage[ScreenMultipleFactor]
|
|
182
|
+
=begin show_blocking_message_dialog <<-EOL
|
|
183
|
+
With upconversion, if your monitor is 1024 pixels wide and you upconvert to 2048 pixels then display it on 1024, it looks better.
|
|
184
|
+
Sensible Cinema sets the default default resolution to be 2x your screen resolution, which is better for high end cpu's.
|
|
185
|
+
If you have a low powered system or laptop you may need to change it (drag the slider) lower to avoid it displaying only a black or white screen, as your system can't handle it,
|
|
186
|
+
so adjust accordingly if you have a lesser system. Also changing this setting can make it use more or less CPU overall.
|
|
187
|
+
EOL
|
|
188
|
+
=end
|
|
189
|
+
# LODO make into tooltip too [?]
|
|
190
|
+
LocalStorage['screen_multiples'] = 2.0
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
upconvert_window = new_child_window
|
|
194
|
+
upconvert_window.add_change_upconvert_buttons
|
|
181
195
|
end
|
|
182
196
|
@show_upconvert_options.tool_tip= "Allows you to set your upconvert options.\nUpconverting attempts to playback your movie with higher quality on high resolution monitors."
|
|
183
197
|
end
|
|
@@ -189,7 +203,13 @@ module SensibleSwing
|
|
|
189
203
|
end
|
|
190
204
|
|
|
191
205
|
def change_upconvert_line_to_current
|
|
192
|
-
|
|
206
|
+
current = get_current_upconvert_as_phrase
|
|
207
|
+
if @upconv_line
|
|
208
|
+
@upconv_line.set_text current
|
|
209
|
+
end
|
|
210
|
+
if @parent && @parent.upconv_line
|
|
211
|
+
@parent.upconv_line.set_text current
|
|
212
|
+
end # LODO we want both [?]
|
|
193
213
|
end
|
|
194
214
|
|
|
195
215
|
def select_new_sxs_style
|
|
@@ -209,9 +229,11 @@ module SensibleSwing
|
|
|
209
229
|
UpConvertKey = 'upconvert_setting'
|
|
210
230
|
UpConvertKeyExtra = 'upconvert_setting_extra'
|
|
211
231
|
UpConvertEnglish = 'upconvert_english_name'
|
|
232
|
+
ScreenMultipleFactor = 'screen_multiples'
|
|
212
233
|
|
|
213
|
-
def
|
|
214
|
-
|
|
234
|
+
def add_change_upconvert_buttons
|
|
235
|
+
raise 'should have already been set for us' unless LocalStorage[ScreenMultipleFactor]
|
|
236
|
+
@none = new_jbutton("Reset upconvert options to default (no upconversion)")
|
|
215
237
|
@none.tool_tip = "Having no upconvert options is reasonably good, might use directx for scaling, nice for slow cpu's"
|
|
216
238
|
@none.on_clicked {
|
|
217
239
|
LocalStorage[UpConvertKey] = nil
|
|
@@ -219,14 +241,14 @@ module SensibleSwing
|
|
|
219
241
|
LocalStorage[UpConvertEnglish] = nil
|
|
220
242
|
display_current_upconvert_setting
|
|
221
243
|
}
|
|
222
|
-
@medium_dvd = new_jbutton("Change upconvert options
|
|
244
|
+
@medium_dvd = new_jbutton("Change upconvert options for DVD-style video") {
|
|
223
245
|
LocalStorage[UpConvertKey] = "hqdn3d=0:1:4:4,scale=SCREEN_X:-10:0:0:2"
|
|
224
246
|
# hqdn3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
|
|
225
247
|
LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=75.0 -ssf cs=7.0"
|
|
226
248
|
LocalStorage[UpConvertEnglish] = "DVD"
|
|
227
249
|
display_current_upconvert_setting
|
|
228
250
|
}
|
|
229
|
-
high_compression = new_jbutton("Change upconvert options for playing
|
|
251
|
+
high_compression = new_jbutton("Change upconvert options for playing high compressed video files") {
|
|
230
252
|
# -autoq 6 -vf pp [?]
|
|
231
253
|
LocalStorage[UpConvertEnglish] = "high compressed"
|
|
232
254
|
LocalStorage[UpConvertKey] = "hqdn3d=0:1:4:4,pp=hb:y/vb:y,scale=SCREEN_X:-10:0:0:3" # pp should be after hqdn3d I think... and hqdn3d should be before scale...
|
|
@@ -240,8 +262,8 @@ module SensibleSwing
|
|
|
240
262
|
LocalStorage[UpConvertEnglish] = "experimental"
|
|
241
263
|
display_current_upconvert_setting
|
|
242
264
|
}
|
|
243
|
-
add_text_line "Multiple factor screen widths (higher is better, but uses more cpu, 2x is
|
|
244
|
-
add_text_line "If mplayer just dies or
|
|
265
|
+
add_text_line "Multiple factor screen widths (higher is better, but uses more cpu, 2x is good for high-end)."
|
|
266
|
+
add_text_line "If mplayer just dies or displays only a black or white screen then lower this setting."
|
|
245
267
|
slider = JSlider.new
|
|
246
268
|
slider.setBorder(BorderFactory.createTitledBorder("Screen resolution multiple"));
|
|
247
269
|
|
|
@@ -276,14 +298,14 @@ module SensibleSwing
|
|
|
276
298
|
slider.setPaintLabels(true)
|
|
277
299
|
slider.snap_to_ticks=true
|
|
278
300
|
|
|
279
|
-
slider.set_value LocalStorage[
|
|
301
|
+
slider.set_value LocalStorage[ScreenMultipleFactor] * 100
|
|
280
302
|
|
|
281
303
|
slider.add_change_listener { |event|
|
|
282
304
|
if !slider.value_is_adjusting
|
|
283
305
|
# they released their hold on it...
|
|
284
|
-
old_value = LocalStorage[
|
|
306
|
+
old_value = LocalStorage[ScreenMultipleFactor]
|
|
285
307
|
new_value = slider.value/100.0
|
|
286
|
-
LocalStorage[
|
|
308
|
+
LocalStorage[ScreenMultipleFactor] = new_value
|
|
287
309
|
if new_value != old_value
|
|
288
310
|
display_current_upconvert_setting
|
|
289
311
|
if slider.value == label_minimum
|
|
@@ -306,7 +328,7 @@ module SensibleSwing
|
|
|
306
328
|
settings = LocalStorage[UpConvertEnglish]
|
|
307
329
|
out = "Upconvert options currently #{ settings ? "are set to #{settings} style" : "are NOT SET"}"
|
|
308
330
|
if settings
|
|
309
|
-
multiple = LocalStorage[
|
|
331
|
+
multiple = LocalStorage[ScreenMultipleFactor]
|
|
310
332
|
out += " (screen multiplier #{multiple} = #{(multiple * get_current_max_width_resolution).to_i}px)."
|
|
311
333
|
end
|
|
312
334
|
out
|
|
@@ -320,7 +342,7 @@ module SensibleSwing
|
|
|
320
342
|
template = LocalStorage[UpConvertKey]
|
|
321
343
|
if template
|
|
322
344
|
# choose width of widest monitor (why would they display it on the other?)
|
|
323
|
-
screen_multiple = LocalStorage[
|
|
345
|
+
screen_multiple = LocalStorage[ScreenMultipleFactor]
|
|
324
346
|
upc = template.gsub('SCREEN_X', (get_current_max_width_resolution*screen_multiple).to_i.to_s) # has to be an integer...
|
|
325
347
|
upc = 'pullup,softskip,' + upc
|
|
326
348
|
p 'using upconvert settings ' + upc
|
|
@@ -345,7 +367,8 @@ module SensibleSwing
|
|
|
345
367
|
def setup_advanced_buttons
|
|
346
368
|
|
|
347
369
|
new_jbutton("Display the standard buttons") do
|
|
348
|
-
|
|
370
|
+
window = new_child_window
|
|
371
|
+
window.setup_normal_buttons
|
|
349
372
|
end
|
|
350
373
|
|
|
351
374
|
add_text_line 'Realtime/Create Options:'
|
|
@@ -413,8 +436,6 @@ module SensibleSwing
|
|
|
413
436
|
sleep 0.3 if OS.mac? # add delay...
|
|
414
437
|
open_file_to_edit_it EdlTempFile
|
|
415
438
|
end
|
|
416
|
-
|
|
417
|
-
|
|
418
439
|
|
|
419
440
|
@display_dvd_info = new_jbutton( "Display information about current DVD (ID, etc.)" )
|
|
420
441
|
@display_dvd_info.tool_tip = "This is useful to setup a DVD's 'unique ID' within an EDL for it. \nIf your EDL doesn't have a line like disk_unique_id => \"...\" then you will want to run this to be able to add that line in."
|
|
@@ -485,10 +506,10 @@ module SensibleSwing
|
|
|
485
506
|
# end
|
|
486
507
|
|
|
487
508
|
|
|
488
|
-
add_text_line 'Create Options
|
|
509
|
+
add_text_line 'Create Options with local intermediary file:'
|
|
489
510
|
|
|
490
|
-
new_jbutton("Show options
|
|
491
|
-
window =
|
|
511
|
+
new_jbutton("Show options with local intermediary file") do
|
|
512
|
+
window = new_child_window
|
|
492
513
|
window.add_options_that_use_local_files
|
|
493
514
|
end
|
|
494
515
|
|
|
@@ -643,7 +664,7 @@ module SensibleSwing
|
|
|
643
664
|
|
|
644
665
|
def setup_default_buttons
|
|
645
666
|
if we_are_in_upconvert_mode
|
|
646
|
-
|
|
667
|
+
add_play_upconvert_buttons
|
|
647
668
|
else
|
|
648
669
|
|
|
649
670
|
if we_are_in_create_mode
|
|
@@ -1446,7 +1467,7 @@ module SensibleSwing
|
|
|
1446
1467
|
return [filename, File.basename(filename), NonDvd]
|
|
1447
1468
|
else
|
|
1448
1469
|
disk = opticals[selected_idx]
|
|
1449
|
-
out = show_non_blocking_message_dialog "calculating current disk's unique id..." # useful, believe it or not
|
|
1470
|
+
out = show_non_blocking_message_dialog "calculating current disk's unique id...if this freezes clean your disk..." # useful, believe it or not
|
|
1450
1471
|
dvd_id = DriveInfo.md5sum_disk(disk.MountPoint)
|
|
1451
1472
|
out.dispose
|
|
1452
1473
|
@_choose_dvd_drive_or_file = [disk.MountPoint, opticals[selected_idx].VolumeName, dvd_id]
|
data/bin/sensible-cinema-cli
CHANGED
|
@@ -84,7 +84,7 @@ def go_sc(args)
|
|
|
84
84
|
# assume they want an online player, right? LODO player can tell us...
|
|
85
85
|
auto_found = AutoWindowFinder.search_for_single_url_match
|
|
86
86
|
if auto_found
|
|
87
|
-
p 'auto-discovered open window for EDL, using it ' + auto_found
|
|
87
|
+
p 'auto-discovered open window for player x EDL, using it ' + auto_found
|
|
88
88
|
settings = EdlParser.parse_file auto_found
|
|
89
89
|
if settings["from_url"]
|
|
90
90
|
require 'tempfile'
|
|
@@ -108,8 +108,8 @@ def go_sc(args)
|
|
|
108
108
|
puts 'Selected scene descriptions file ' + File.basename(edit_decision_list) + "\n\t(full path: #{edit_decision_list})"
|
|
109
109
|
Blanker.startup
|
|
110
110
|
# todo start it late as it has an annoying startup blip
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
end
|
|
112
|
+
overlay = OverLayer.new(edit_decision_list) if edit_decision_list
|
|
113
113
|
|
|
114
114
|
if File.exist? player_description.to_s
|
|
115
115
|
puts 'Selected player ' + File.basename(player_description) + "\n\t(full path: #{player_description})"
|
|
@@ -138,6 +138,8 @@ def go_sc(args)
|
|
|
138
138
|
|
|
139
139
|
OCR.unserialize_cache_from_disk # do this every time so we don't delete it if they don't have one...
|
|
140
140
|
|
|
141
|
+
p 'moving mouse to align it for muting down 10'
|
|
142
|
+
Mouse.move_mouse_relative 0, 10 # LODO
|
|
141
143
|
puts "Opening the curtains... (please play in your other video player now)"
|
|
142
144
|
overlay.start_thread true
|
|
143
145
|
key_input = KeyboardInput.new overlay
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
== 025.5==
|
|
2
|
+
|
|
3
|
+
Cleaned up upconverting options to hopefully cause less confusion. Until somebody complains otherwise.
|
|
4
|
+
|
|
5
|
+
Also note the existence of these files and their implication:
|
|
6
|
+
...\sensible-cinema>ls legal
|
|
7
|
+
control_youtube.html md5s.txt serve.rb transcript_mute_vlc.txt
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
== 0.25.4 ==
|
|
11
|
+
|
|
12
|
+
Also note experimented with diferent frequencies of mouse jitter at one point,
|
|
13
|
+
to preserve that the timestamp be available on screen, and also it
|
|
14
|
+
avoids annoying the user with mouse jerks when the user has been moving it,
|
|
15
|
+
and several other advanced features.
|
|
16
|
+
|
|
17
|
+
Add a mode for "skipping" when using OCR overlayer (mute and blank, basically).
|
|
18
|
+
|
|
1
19
|
== 0.25.3 ==
|
|
2
20
|
|
|
3
21
|
Mostly explore some more "inventionzy" ideas.
|
data/lib/mouse.rb
CHANGED
|
@@ -60,38 +60,24 @@ module Mouse
|
|
|
60
60
|
class << self
|
|
61
61
|
|
|
62
62
|
def jitter_forever_in_own_thread
|
|
63
|
-
|
|
64
|
-
myinput = Mouse::Input.new
|
|
65
|
-
myinput[:type] = Mouse::INPUT_MOUSE
|
|
66
|
-
|
|
67
|
-
in_evt = myinput[:evt][:mi]
|
|
68
|
-
|
|
69
|
-
in_evt[:mouse_data] = 0 # null it out
|
|
70
|
-
in_evt[:flags] = Mouse::MOUSEEVENTF_MOVE
|
|
71
|
-
in_evt[:time] = 0
|
|
72
|
-
in_evt[:extra] = 0
|
|
73
|
-
in_evt[:dx] = 0
|
|
74
|
-
in_evt[:dy] = 8 # just enough for VLC when full screened...
|
|
75
63
|
|
|
76
|
-
old_x = get_mouse_location
|
|
77
|
-
old_y = get_mouse_location.y
|
|
64
|
+
old_x, old_y = get_mouse_location
|
|
78
65
|
Thread.new {
|
|
79
66
|
loop {
|
|
80
|
-
|
|
81
|
-
cur_y = get_mouse_location
|
|
67
|
+
move_y = 8 # just enough for VLC when full screened...
|
|
68
|
+
cur_x, cur_y = get_mouse_location
|
|
82
69
|
if(cur_x == old_x && cur_y == old_y)
|
|
83
70
|
@total_movements += 1
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
71
|
+
# blit it up
|
|
72
|
+
move_mouse_relative(0, move_y)
|
|
73
|
+
move_mouse_relative(0, move_y * -1)
|
|
74
|
+
# let it move it back
|
|
87
75
|
sleep 0.05
|
|
88
|
-
|
|
89
|
-
old_x = get_mouse_location.x
|
|
90
|
-
old_y = get_mouse_location.y
|
|
76
|
+
old_x, old_y = get_mouse_location
|
|
91
77
|
sleep 0.75
|
|
92
78
|
else
|
|
93
|
-
|
|
94
|
-
old_y = get_mouse_location
|
|
79
|
+
# user has been moving the mouse around, so we don't need to, to not annoy them
|
|
80
|
+
old_x, old_y = get_mouse_location
|
|
95
81
|
sleep 3
|
|
96
82
|
end
|
|
97
83
|
}
|
|
@@ -99,6 +85,19 @@ module Mouse
|
|
|
99
85
|
|
|
100
86
|
end
|
|
101
87
|
|
|
88
|
+
def move_mouse_relative dx, dy
|
|
89
|
+
myinput = Mouse::Input.new
|
|
90
|
+
myinput[:type] = Mouse::INPUT_MOUSE
|
|
91
|
+
in_evt = myinput[:evt][:mi]
|
|
92
|
+
in_evt[:mouse_data] = 0 # null it out
|
|
93
|
+
in_evt[:flags] = Mouse::MOUSEEVENTF_MOVE
|
|
94
|
+
in_evt[:time] = 0
|
|
95
|
+
in_evt[:extra] = 0
|
|
96
|
+
in_evt[:dx] = dx
|
|
97
|
+
in_evt[:dy] = dy
|
|
98
|
+
SendInput(1, myinput, Mouse::Input.size)
|
|
99
|
+
end
|
|
100
|
+
|
|
102
101
|
def single_click_left_mouse_button
|
|
103
102
|
left_mouse_down!
|
|
104
103
|
left_mouse_up!
|
|
@@ -106,14 +105,14 @@ module Mouse
|
|
|
106
105
|
end
|
|
107
106
|
|
|
108
107
|
def left_mouse_down!
|
|
109
|
-
|
|
108
|
+
send_left_mouse_button MOUSEEVENTF_LEFTDOWN
|
|
110
109
|
end
|
|
111
110
|
|
|
112
111
|
def left_mouse_up!
|
|
113
|
-
|
|
112
|
+
send_left_mouse_button MOUSEEVENTF_LEFTUP
|
|
114
113
|
end
|
|
115
114
|
|
|
116
|
-
VK_LBUTTON = 0x01 # mouse left button for GetAsyncKeyState
|
|
115
|
+
VK_LBUTTON = 0x01 # mouse left button for GetAsyncKeyState (seeing if mouse down currently or not)
|
|
117
116
|
|
|
118
117
|
def left_mouse_button_state
|
|
119
118
|
GetAsyncKeyState(VK_LBUTTON) # ignore a first response, which also tells us if it has changed at all since last call
|
|
@@ -124,15 +123,17 @@ module Mouse
|
|
|
124
123
|
end
|
|
125
124
|
end
|
|
126
125
|
|
|
126
|
+
# [x, y]
|
|
127
127
|
def get_mouse_location
|
|
128
|
-
MouseInfo.getPointerInfo.getLocation
|
|
128
|
+
loc = MouseInfo.getPointerInfo.getLocation
|
|
129
|
+
[loc.x, loc.y]
|
|
129
130
|
end
|
|
130
131
|
|
|
131
132
|
attr_accessor :total_movements
|
|
132
133
|
|
|
133
134
|
private
|
|
134
135
|
|
|
135
|
-
def
|
|
136
|
+
def send_left_mouse_button action_type
|
|
136
137
|
myinput = Mouse::Input.new
|
|
137
138
|
myinput[:type] = Mouse::INPUT_MOUSE
|
|
138
139
|
in_evt = myinput[:evt][:mi]
|
|
@@ -144,4 +145,4 @@ module Mouse
|
|
|
144
145
|
end
|
|
145
146
|
|
|
146
147
|
end
|
|
147
|
-
Mouse.total_movements
|
|
148
|
+
Mouse.total_movements=0 # ruby is a bit freaky with these...
|
data/lib/mouse_draw.rb
CHANGED
|
@@ -20,7 +20,7 @@ class MouseDraw
|
|
|
20
20
|
# wait till mouse goes down...
|
|
21
21
|
while(Mouse.left_mouse_button_state == :up)
|
|
22
22
|
sleep 0.05
|
|
23
|
-
print '
|
|
23
|
+
print 'waiting'
|
|
24
24
|
end
|
|
25
25
|
f.undecorated = true
|
|
26
26
|
f.default_close_operation = JFrame::EXIT_ON_CLOSE
|
|
@@ -29,8 +29,10 @@ class MouseDraw
|
|
|
29
29
|
f.set_location(Mouse.get_mouse_location)
|
|
30
30
|
while(Mouse.left_mouse_button_state == :down)
|
|
31
31
|
# set_size
|
|
32
|
+
p 'waiting for end'
|
|
33
|
+
p Mouse.get_mouse_location
|
|
32
34
|
end
|
|
33
|
-
|
|
35
|
+
f.dispose
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
end
|
data/lib/muter.rb
CHANGED
|
@@ -56,12 +56,18 @@ module Muter
|
|
|
56
56
|
def mute!
|
|
57
57
|
#unmute! # just in case...somehow this was causing problems...windows 7 perhaps? VLC?
|
|
58
58
|
# anyway we just use a toggle for now...dangerous but works hopefully...
|
|
59
|
-
|
|
59
|
+
if @@use_mouse_click
|
|
60
|
+
Mouse.single_click_left_mouse_button
|
|
61
|
+
else
|
|
62
|
+
hit_mute_key
|
|
63
|
+
end
|
|
60
64
|
end
|
|
65
|
+
|
|
66
|
+
@@use_mouse_click = true
|
|
61
67
|
|
|
62
68
|
# LODO better for doze 7/xp
|
|
63
69
|
def unmute!
|
|
64
|
-
if @@
|
|
70
|
+
if @@use_mouse_click
|
|
65
71
|
Mouse.single_click_left_mouse_button
|
|
66
72
|
elsif @@use_static_on_top
|
|
67
73
|
stop_playing_static
|
data/lib/overlayer.rb
CHANGED
data/lib/storage.rb
CHANGED
|
@@ -15,7 +15,8 @@ This file is part of Sensible Cinema.
|
|
|
15
15
|
You should have received a copy of the GNU General Public License
|
|
16
16
|
along with Sensible Cinema. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
=end
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
# shamelessly stolen from the redcar project
|
|
19
20
|
|
|
20
21
|
class Storage
|
|
21
22
|
class << self
|
|
@@ -23,7 +24,7 @@ This file is part of Sensible Cinema.
|
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def self.storage_dir
|
|
26
|
-
@user_dir ||= File.join(File.expand_path('~'), ".
|
|
27
|
+
@user_dir ||= File.join(File.expand_path('~'), ".sensible_cinema_storage")
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
# Open a storage file or create it if it doesn't exist.
|
data/spec/screen_tracker.spec.rb
CHANGED
|
@@ -33,6 +33,7 @@ describe ScreenTracker do
|
|
|
33
33
|
rescue
|
|
34
34
|
silence = File.expand_path("../lib/silence.wav").gsub("/", "\\")
|
|
35
35
|
vlc = Dir['/program files*/videolan/VLC/vlc.exe'][0]
|
|
36
|
+
# /Applications/VLC.app/Contents/MacOS/VLC lib/silence.wav -f
|
|
36
37
|
Dir.chdir(File.dirname(vlc)) do; IO.popen("vlc.exe #{silence}").pid; end # includes a work around for JRUBY-4959 /4958
|
|
37
38
|
|
|
38
39
|
# now also work around JRUBY-5756
|
|
@@ -556,7 +556,8 @@ module SensibleSwing
|
|
|
556
556
|
|
|
557
557
|
it "should be able to upconvert at all" do
|
|
558
558
|
@subject = MainWindow.new false
|
|
559
|
-
|
|
559
|
+
MainWindow::LocalStorage['screen_multiples'] = 2.0 # default so it won't fail us...
|
|
560
|
+
@subject.add_change_upconvert_buttons
|
|
560
561
|
@subject.stub(:display_current_upconvert_setting) {} # no popup ;)
|
|
561
562
|
@subject.stub(:show_mplayer_instructions_once) {}
|
|
562
563
|
click_button(:@medium_dvd)
|
|
@@ -583,7 +584,7 @@ module SensibleSwing
|
|
|
583
584
|
end
|
|
584
585
|
|
|
585
586
|
it "should be able to play upconverted stuff" do
|
|
586
|
-
@subject.
|
|
587
|
+
@subject.add_play_upconvert_buttons
|
|
587
588
|
click_button(:@watch_file_upconvert)
|
|
588
589
|
assert_played_mplayer
|
|
589
590
|
click_button(:@watch_dvd_upconvert)
|
data/todo.inventionzy.txt
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
some blu-ray player descriptor somehow
|
|
5
5
|
can move the mouse 10 pixels down at the beginning, in order to...put it in the right place.
|
|
6
6
|
|
|
7
|
+
EDL can say "this exact text was at this exact time" to allow for matching with other videos of same content that may have slightly different timestamps/speeds/start time etc.
|
|
8
|
+
allow for extra start time offset for videos, if netflix instant has any
|
|
7
9
|
can "suck in" a large list of EDL's from imdb at build time, and/or from a wiki (github wiki in this case), and a "resync" button?
|
|
8
10
|
can handle multiple dvdid's et al (same EDL) (mostly do already though)
|
|
9
11
|
can overlay over online films too
|
|
@@ -12,7 +14,11 @@
|
|
|
12
14
|
can control volume *and* play other audio
|
|
13
15
|
can add to to supplement EDL + EDL timestamps
|
|
14
16
|
can pick specific profanities to avoid
|
|
17
|
+
it can scan "playing" instant streaming titles, and/or OCR or take the audio and look for words, to check for profanity.
|
|
18
|
+
it can examine "output volume level" to auto-detects violence.
|
|
19
|
+
similarly for "questionable" content
|
|
15
20
|
manual select which to include into an EDL
|
|
21
|
+
use multiple filters/complex mapping graphs to overlay just the correct frameage: http://ffmpeg.org/libavfilter.html
|
|
16
22
|
user preference "how many down clicks on volume for profanity"?
|
|
17
23
|
make it so it can suck in from "another wiki" the DL's, at package time, somehow (just one)
|
|
18
24
|
or even just suck in any web file, for starters
|
|
@@ -51,3 +57,4 @@
|
|
|
51
57
|
stage one: query, auto-download when they hit a netflix movie of some type
|
|
52
58
|
stage two: chrome plugin for the same, auto-detect, auto-user, auto-download, auto-watch edited :)
|
|
53
59
|
can insert deleted scenes et al [even external scenes :P] (already showed it somewhat)
|
|
60
|
+
many others were already completed and done from this list and removed
|
data/upconvert.bat
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
j bin/sensible-cinema --upconvert-mode
|
|
1
|
+
j %* bin/sensible-cinema --upconvert-mode
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
|
|
14
14
|
# "disk_unique_id" => "",
|
|
15
15
|
"title" => "Harry Potter 2 Chamber of secrets",
|
|
16
|
-
"mplayer_dvd_splits" => ["1:16:32"],
|
|
16
|
+
#"mplayer_dvd_splits" => ["1:16:32"], inaccurate slightly...
|
|
17
17
|
"not yet edited out" => "plenty of violence at the end with the snake, and also the spiders. hmmmm."
|
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
"01:28:01.615", "01:28:06.119", "profanity", "Thank the manufacturer",
|
|
20
20
|
"00:31:42.319", "00:31:46.406", "profanity", "innuendo", "Nah, I'm just kiddin'. She just likes me fer muh body.",
|
|
21
21
|
"52:52", "52:57", "profanity", "innuendo", "not with me but with me",
|
|
22
|
-
|
|
22
|
+
"28:00", "28:08", "profanity", "mumble l...",
|
|
23
23
|
],
|
|
24
|
+
# 00:48:09,264 --> 00:48:11,934
|
|
25
|
+
#That crazy old devil woman.
|
|
24
26
|
|
|
25
27
|
# sister DVD: CRZ0NNF1 track 21 "disk_unique_id" => "aa06ad1c|e1e62ad0"
|
|
26
28
|
|
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.
|
|
5
|
+
version: 0.25.4
|
|
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-
|
|
13
|
+
date: 2011-08-22 00:00:00 -06:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|