hornetseye-ffmpeg 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
1
  Hornetseye-FFMPEG
2
2
  ======
3
- This Ruby extension defines the class {Hornetseye::AVInput} for reading frames from video files.
3
+ This Ruby extension defines the class {Hornetseye::AVInput} for reading frames from video files and the class {Hornetseye::AVOutput} for writing frames to video files.
4
4
 
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/loaders/makefile'
7
7
  require 'rbconfig'
8
8
 
9
9
  PKG_NAME = 'hornetseye-ffmpeg'
10
- PKG_VERSION = '0.3.2'
10
+ PKG_VERSION = '0.4.0'
11
11
  CXX = ENV[ 'CXX' ] || 'g++'
12
12
  STRIP = ENV[ 'STRIP' ] || 'strip'
13
13
  RB_FILES = FileList[ 'lib/**/*.rb' ]
@@ -21,7 +21,7 @@ PKG_FILES = [ 'Rakefile', 'README.md', 'COPYING', '.document' ] +
21
21
  BIN_FILES = [ 'README.md', 'COPYING', '.document', SO_FILE ] +
22
22
  RB_FILES + TS_FILES + TC_FILES
23
23
  SUMMARY = %q{Read/write video frames using libffmpeg}
24
- DESCRIPTION = %q{This Ruby extension defines the class Hornetseye::AVInput for reading frames from video files.}
24
+ DESCRIPTION = %q{This Ruby extension defines the class Hornetseye::AVInput for reading frames from video files and the class Hornetseye::AVOutput for writing frames to video files.}
25
25
  AUTHOR = %q{Jan Wedekind}
26
26
  EMAIL = %q{jan@wedesoft.de}
27
27
  HOMEPAGE = %q{http://wedesoft.github.com/hornetseye-ffmpeg/}
@@ -171,7 +171,9 @@ rule '.o' => '.cc' do |t|
171
171
  end
172
172
 
173
173
  file ".depends.mf" do |t|
174
- sh "makedepend -f- -- #{$CXXFLAGS} -- #{CC_FILES.join ' '} > #{t.name}"
174
+ sh "g++ -MM #{$CXXFLAGS} #{CC_FILES.join ' '} | " +
175
+ "sed -e :a -e N -e 's/\\n/\\$/g' -e ta | " +
176
+ "sed -e 's/ *\\\\\\$ */ /g' -e 's/\\$/\\n/g' | sed -e 's/^/ext\\//' > #{t.name}"
175
177
  end
176
178
  CC_FILES.each do |t|
177
179
  file t.ext(".o") => t
data/ext/avinput.cc CHANGED
@@ -159,6 +159,20 @@ AVRational AVInput::frameRate(void) throw (Error)
159
159
  return m_ic->streams[ m_idx ]->r_frame_rate;
160
160
  }
161
161
 
162
+ long long AVInput::duration(void) throw (Error)
163
+ {
164
+ ERRORMACRO( m_ic != NULL, Error, , "Video \"" << m_mrl << "\" is not open. "
165
+ "Did you call \"close\" before?" );
166
+ return m_ic->streams[ m_idx ]->duration;
167
+ }
168
+
169
+ long long AVInput::startTime(void) throw (Error)
170
+ {
171
+ ERRORMACRO( m_ic != NULL, Error, , "Video \"" << m_mrl << "\" is not open. "
172
+ "Did you call \"close\" before?" );
173
+ return m_ic->streams[ m_idx ]->start_time;
174
+ }
175
+
162
176
  void AVInput::seek( long timestamp ) throw (Error)
163
177
  {
164
178
  ERRORMACRO( m_ic != NULL, Error, , "Video \"" << m_mrl << "\" is not open. "
@@ -185,6 +199,8 @@ VALUE AVInput::registerRubyClass( VALUE rbModule )
185
199
  rb_define_method( cRubyClass, "read", RUBY_METHOD_FUNC( wrapRead ), 0 );
186
200
  rb_define_method( cRubyClass, "time_base", RUBY_METHOD_FUNC( wrapTimeBase ), 0 );
187
201
  rb_define_method( cRubyClass, "frame_rate", RUBY_METHOD_FUNC( wrapFrameRate ), 0 );
202
+ rb_define_method( cRubyClass, "duration", RUBY_METHOD_FUNC( wrapDuration ), 0 );
203
+ rb_define_method( cRubyClass, "start_time", RUBY_METHOD_FUNC( wrapStartTime ), 0 );
188
204
  rb_define_method( cRubyClass, "width", RUBY_METHOD_FUNC( wrapWidth ), 0 );
189
205
  rb_define_method( cRubyClass, "height", RUBY_METHOD_FUNC( wrapHeight ), 0 );
190
206
  rb_define_method( cRubyClass, "seek", RUBY_METHOD_FUNC( wrapSeek ), 1 );
@@ -258,6 +274,30 @@ VALUE AVInput::wrapFrameRate( VALUE rbSelf )
258
274
  return retVal;
259
275
  }
260
276
 
277
+ VALUE AVInput::wrapDuration( VALUE rbSelf )
278
+ {
279
+ VALUE retVal = Qnil;
280
+ try {
281
+ AVInputPtr *self; Data_Get_Struct( rbSelf, AVInputPtr, self );
282
+ retVal = LL2NUM( (*self)->duration() );
283
+ } catch( exception &e ) {
284
+ rb_raise( rb_eRuntimeError, "%s", e.what() );
285
+ };
286
+ return retVal;
287
+ }
288
+
289
+ VALUE AVInput::wrapStartTime( VALUE rbSelf )
290
+ {
291
+ VALUE retVal = Qnil;
292
+ try {
293
+ AVInputPtr *self; Data_Get_Struct( rbSelf, AVInputPtr, self );
294
+ retVal = LL2NUM( (*self)->startTime() );
295
+ } catch( exception &e ) {
296
+ rb_raise( rb_eRuntimeError, "%s", e.what() );
297
+ };
298
+ return retVal;
299
+ }
300
+
261
301
  VALUE AVInput::wrapWidth( VALUE rbSelf )
262
302
  {
263
303
  VALUE retVal = Qnil;
data/ext/avinput.hh CHANGED
@@ -36,6 +36,8 @@ public:
36
36
  int height(void) const throw (Error);
37
37
  AVRational timeBase(void) throw (Error);
38
38
  AVRational frameRate(void) throw (Error);
39
+ long long duration(void) throw (Error);
40
+ long long startTime(void) throw (Error);
39
41
  void seek( long timestamp ) throw (Error);
40
42
  long long pts(void) throw (Error);
41
43
  static VALUE cRubyClass;
@@ -46,6 +48,8 @@ public:
46
48
  static VALUE wrapRead( VALUE rbSelf );
47
49
  static VALUE wrapTimeBase( VALUE rbSelf );
48
50
  static VALUE wrapFrameRate( VALUE rbSelf );
51
+ static VALUE wrapDuration( VALUE rbSelf );
52
+ static VALUE wrapStartTime( VALUE rbSelf );
49
53
  static VALUE wrapWidth( VALUE rbSelf );
50
54
  static VALUE wrapHeight( VALUE rbSelf );
51
55
  static VALUE wrapSeek( VALUE rbSelf, VALUE rbPos );
@@ -55,6 +55,18 @@ module Hornetseye
55
55
  pts * time_base
56
56
  end
57
57
 
58
+ alias_method :orig_duration, :duration
59
+
60
+ def duration
61
+ orig_duration * time_base
62
+ end
63
+
64
+ alias_method :orig_start_time, :start_time
65
+
66
+ def start_time
67
+ orig_start_time * time_base
68
+ end
69
+
58
70
  end
59
71
 
60
72
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 2
9
- version: 0.3.2
7
+ - 4
8
+ - 0
9
+ version: 0.4.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-10-05 00:00:00 +01:00
17
+ date: 2010-10-06 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -72,7 +72,7 @@ dependencies:
72
72
  version: "0"
73
73
  type: :development
74
74
  version_requirements: *id004
75
- description: This Ruby extension defines the class Hornetseye::AVInput for reading frames from video files.
75
+ description: This Ruby extension defines the class Hornetseye::AVInput for reading frames from video files and the class Hornetseye::AVOutput for writing frames to video files.
76
76
  email: jan@wedesoft.de
77
77
  executables: []
78
78