hornetseye-qt4 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.md +143 -2
  2. data/Rakefile +6 -7
  3. data/ext/init.cc +2 -2
  4. metadata +12 -12
data/README.md CHANGED
@@ -1,4 +1,145 @@
1
1
  hornetseye-qt4
2
- ======
3
- This Ruby extension provides graphical output of images for Qt4.
2
+ ==============
4
3
 
4
+ **Author**: Jan Wedekind
5
+ **Copyright**: 2010
6
+ **License**: GPL
7
+
8
+ Synopsis
9
+ --------
10
+
11
+ This Ruby extension implements a Qt4 widget (compatible with *qtruby4*) for hardware accelerated video output.
12
+
13
+ Installation
14
+ ------------
15
+
16
+ This Ruby extension requires Qt4, QtRuby4 and the software scaling library. If you are running Debian or (K)ubuntu, you can install them like this:
17
+
18
+ $ sudo aptitude install libqt4-ruby1.8 qt4-dev-tools libswscale-dev
19
+
20
+ To install this Ruby extension, use the following command:
21
+
22
+ $ sudo gem install hornetseye-qt4
23
+
24
+ Alternatively you can build and install the Ruby extension from source as follows:
25
+
26
+ $ rake
27
+ $ sudo rake install
28
+
29
+ Usage
30
+ -----
31
+
32
+ Simply run Interactive Ruby:
33
+
34
+ $ irb
35
+
36
+ You can use {Hornetseye::XvWidget} as shown below. This example implements a video player with a minimalistic GUI.
37
+
38
+ require 'rubygems'
39
+ require 'hornetseye_ffmpeg'
40
+ require 'hornetseye_alsa'
41
+ require 'hornetseye_qt4'
42
+ require 'Qt4'
43
+ VIDEO = ARGV.first
44
+ class Win < Qt::Widget
45
+ slots 'seek(int)'
46
+ def initialize
47
+ super
48
+ @screen = Hornetseye::XvWidget.new self
49
+ @slider = Qt::Slider.new Qt::Horizontal
50
+ layout = Qt::VBoxLayout.new self
51
+ layout.addWidget @screen
52
+ layout.addWidget @slider
53
+ connect @slider, SIGNAL('valueChanged(int)'), self, SLOT('seek(int)')
54
+ @seeking = true
55
+ @video = nil
56
+ @timer = 0
57
+ start
58
+ @slider.tracking = false
59
+ @slider.minimum = 0
60
+ @slider.single_step = 60
61
+ @slider.page_step = 600
62
+ if @video.duration
63
+ @slider.maximum = @video.duration.to_i
64
+ else
65
+ @slider.maximum = ARGV[1] || 1
66
+ end
67
+ setWindowTitle 'XVideo'
68
+ end
69
+ def update_audio
70
+ @audio_frame = @video.read_audio unless @audio_frame
71
+ while @speaker.avail >= @audio_frame.shape[1]
72
+ @speaker.write @audio_frame
73
+ @audio_frame = @video.read_audio
74
+ end
75
+ end
76
+ def update_video
77
+ @screen.write @video.read_video
78
+ end
79
+ def timerEvent( e )
80
+ begin
81
+ update_audio
82
+ update_video
83
+ unless @slider.sliderDown
84
+ @seeking = false
85
+ p = @video.audio_pos.to_i
86
+ @slider.maximum = p if p > @slider.maximum
87
+ @slider.value = p
88
+ @seeking = true
89
+ end
90
+ t = @video.audio_pos - @speaker.delay.quo( @speaker.rate )
91
+ delay = [ 3.quo( 2 ) / @video.frame_rate,
92
+ [ @video.video_pos - t, 0 ].max ].min
93
+ killTimer @timer
94
+ @timer = startTimer( ( delay * 1000 ).to_i )
95
+ rescue Exception => e
96
+ p e
97
+ stop
98
+ end
99
+ end
100
+ def start
101
+ unless @video
102
+ stop
103
+ @video = Hornetseye::AVInput.new VIDEO
104
+ @audio_frame = nil
105
+ resize ( @video.width * @video.aspect_ratio ).to_i, @video.height
106
+ @speaker = Hornetseye::AlsaOutput.new 'default:0',
107
+ @video.sample_rate, @video.channels
108
+ @timer = startTimer 0
109
+ end
110
+ end
111
+ def stop
112
+ @audio_frame = nil
113
+ if @video
114
+ @video.close
115
+ @video = nil
116
+ end
117
+ if @speaker
118
+ @speaker.close
119
+ @speaker = nil
120
+ end
121
+ if @timer != 0
122
+ killTimer @timer
123
+ @timer = 0
124
+ @screen.clear
125
+ end
126
+ end
127
+ def seek( p )
128
+ if @seeking
129
+ begin
130
+ start
131
+ @audio_frame = nil
132
+ @video.pos = p
133
+ @speaker.drop
134
+ @speaker.prepare
135
+ rescue Exception => e
136
+ p e
137
+ stop
138
+ end
139
+ end
140
+ end
141
+ end
142
+ app = Qt::Application.new ARGV
143
+ Win.new.show
144
+ app.exec
145
+
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/loaders/makefile'
7
7
  require 'rbconfig'
8
8
 
9
9
  PKG_NAME = 'hornetseye-qt4'
10
- PKG_VERSION = '0.1.1'
10
+ PKG_VERSION = '0.2.0'
11
11
  CFG = RbConfig::CONFIG
12
12
  CXX = ENV[ 'CXX' ] || 'g++'
13
13
  RB_FILES = FileList[ 'lib/**/*.rb' ]
@@ -120,8 +120,7 @@ end
120
120
  begin
121
121
  require 'yard'
122
122
  YARD::Rake::YardocTask.new :yard do |y|
123
- y.options << '--no-private'
124
- y.files << FileList[ 'lib/**/*.rb' ]
123
+ y.files << RB_FILES
125
124
  end
126
125
  rescue LoadError
127
126
  STDERR.puts 'Please install \'yard\' if you want to generate documentation'
@@ -155,8 +154,8 @@ begin
155
154
  s.rdoc_options = %w{--no-private}
156
155
  s.add_dependency %<qtruby4>, [ '~> 2.1' ]
157
156
  s.add_dependency %<malloc>, [ '~> 1.1' ]
158
- s.add_dependency %<multiarray>, [ '~> 0.9' ]
159
- s.add_dependency %<hornetseye-frame>, [ '~> 0.6' ]
157
+ s.add_dependency %<multiarray>, [ '~> 0.23' ]
158
+ s.add_dependency %<hornetseye-frame>, [ '~> 0.11' ]
160
159
  s.add_development_dependency %q{rake}
161
160
  end
162
161
  GEM_SOURCE = "#{PKG_NAME}-#{PKG_VERSION}.gem"
@@ -179,8 +178,8 @@ begin
179
178
  s.rdoc_options = %w{--no-private}
180
179
  s.add_dependency %<qtruby4>, [ '~> 2.1' ]
181
180
  s.add_dependency %<malloc>, [ '~> 1.1' ]
182
- s.add_dependency %<multiarray>, [ '~> 0.9' ]
183
- s.add_dependency %<hornetseye-frame>, [ '~> 0.6' ]
181
+ s.add_dependency %<multiarray>, [ '~> 0.23' ]
182
+ s.add_dependency %<hornetseye-frame>, [ '~> 0.11' ]
184
183
  end
185
184
  GEM_BINARY = "#{PKG_NAME}-#{PKG_VERSION}-#{$BINSPEC.platform}.gem"
186
185
  desc "Build the gem file #{GEM_SOURCE}"
data/ext/init.cc CHANGED
@@ -31,8 +31,8 @@ extern "C" {
31
31
  void Init_hornetseye_qt4(void)
32
32
  {
33
33
  // XInitThreads();
34
- rb_require( "hornetseye_frame" );
35
- rb_require( "Qt4" );
34
+ rb_eval_string("require 'hornetseye_frame'");
35
+ rb_eval_string("require 'Qt4'");
36
36
  VALUE rbHornetseye = rb_define_module( "Hornetseye" );
37
37
  VALUE rbQt = rb_define_module( "Qt" );
38
38
  VALUE cWidget = rb_const_get( rbQt, rb_intern( "Widget" ) );
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jan Wedekind
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-21 00:00:00 +00:00
17
+ date: 2011-06-29 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -55,8 +55,8 @@ dependencies:
55
55
  - !ruby/object:Gem::Version
56
56
  segments:
57
57
  - 0
58
- - 9
59
- version: "0.9"
58
+ - 23
59
+ version: "0.23"
60
60
  type: :runtime
61
61
  version_requirements: *id003
62
62
  - !ruby/object:Gem::Dependency
@@ -69,8 +69,8 @@ dependencies:
69
69
  - !ruby/object:Gem::Version
70
70
  segments:
71
71
  - 0
72
- - 6
73
- version: "0.6"
72
+ - 11
73
+ version: "0.11"
74
74
  type: :runtime
75
75
  version_requirements: *id004
76
76
  - !ruby/object:Gem::Dependency
@@ -99,16 +99,16 @@ files:
99
99
  - README.md
100
100
  - COPYING
101
101
  - .document
102
- - lib/hornetseye-qt4/xvwidget.rb
103
102
  - lib/hornetseye_qt4_ext.rb
103
+ - lib/hornetseye-qt4/xvwidget.rb
104
104
  - ext/init.cc
105
- - ext/xvwidget.cc
106
105
  - ext/frame.cc
106
+ - ext/xvwidget.cc
107
107
  - ext/frame.hh
108
108
  - ext/rubytools.hh
109
- - ext/xvwidget.hh
110
- - ext/rubyinc.hh
111
109
  - ext/error.hh
110
+ - ext/rubyinc.hh
111
+ - ext/xvwidget.hh
112
112
  - ext/rubytools.tcc
113
113
  has_rdoc: yard
114
114
  homepage: http://wedesoft.github.com/hornetseye-qt4/