ffruby 0.2.2 → 0.2.3
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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/Gemfile +2 -0
- data/README.rdoc +8 -3
- data/Rakefile +12 -47
- data/VERSION +1 -1
- data/ext/ffruby/extconf.rb +15 -6
- data/ext/ffruby/ffruby.c +1 -1
- data/ext/ffruby/ffruby.h +2 -1
- data/ext/ffruby/ffrubyfile.c +84 -23
- data/ext/ffruby/ffrubystream.c +6 -4
- data/ffruby.gemspec +21 -0
- metadata +74 -47
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 38afb037560dc46fb90736c4c3ef17b6e407bf6c
|
4
|
+
data.tar.gz: a9d56a47829cd214d8bad7326c357f607bff0c4a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e27aadabdf44538cd1d01b6666385ec7c36dcc0097575bf638fc087eaeb6dbb5009e6a91d64535feeedefc3fc1e985b5177e7c42ea65eacfd38bc1133ac62a80
|
7
|
+
data.tar.gz: 6a28bdb98bc27da21a9897dab827efee3086e5f7bf37321da4ccf007a07c386433876e1dbdd0e4eb688914b7d457239788a12635072ffd4dae5c93edee934c86
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -6,11 +6,11 @@ FFruby is a Ruby interface to FFmpeg's libavformat and libavcodec. It allows you
|
|
6
6
|
|
7
7
|
=== Where do I go for support and contributions?
|
8
8
|
|
9
|
-
We are hosted
|
9
|
+
We are hosted on GitHub at https://github.com/chewi/ffruby.
|
10
10
|
|
11
11
|
=== Where do I get the latest version?
|
12
12
|
|
13
|
-
It should be available through RubyGems as ffruby. Failing that, try
|
13
|
+
It should be available through RubyGems as ffruby. Failing that, try GitHub.
|
14
14
|
|
15
15
|
=== What about transcoding?
|
16
16
|
|
@@ -22,6 +22,11 @@ Being able to reliably read the source file's metadata is very important in deci
|
|
22
22
|
|
23
23
|
== Changes
|
24
24
|
|
25
|
+
=== 0.2.3 (2014/11/15)
|
26
|
+
|
27
|
+
- Compatibility with newer FFmpeg versions.
|
28
|
+
- Compatibility with Ruby 1.9.
|
29
|
+
|
25
30
|
=== 0.2.2 (2010/11/29)
|
26
31
|
|
27
32
|
- Fix compilation with -fno-common for OS X.
|
@@ -50,4 +55,4 @@ Being able to reliably read the source file's metadata is very important in deci
|
|
50
55
|
|
51
56
|
== Copyright
|
52
57
|
|
53
|
-
Copyright (c) 2007-
|
58
|
+
Copyright (c) 2007-2014 James Le Cuirot. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,48 +1,13 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
gem.email = "chewi@aura-online.co.uk"
|
14
|
-
gem.rubyforge_project = "ffruby"
|
15
|
-
gem.homepage = "http://rubyforge.org/projects/ffruby/"
|
16
|
-
gem.summary = "A Ruby interface to FFmpeg's libavformat and libavcodec."
|
17
|
-
gem.description = "A Ruby interface to FFmpeg's libavformat and libavcodec. It allows you to query metadata from a wide variety of media files through some simple classes."
|
18
|
-
gem.requirements = "FFmpeg libraries and also development headers if building."
|
19
|
-
gem.files = RDOC_FILES + [ "LICENSE", "Rakefile", "VERSION", "ext/ffruby/{extconf.rb,ffruby.h}" ]
|
20
|
-
gem.extra_rdoc_files = RDOC_FILES
|
21
|
-
end
|
22
|
-
Jeweler::GemcutterTasks.new
|
23
|
-
Jeweler::RubyforgeTasks.new do |rubyforge|
|
24
|
-
rubyforge.doc_task = "rdoc"
|
25
|
-
rubyforge.remote_doc_path = ""
|
26
|
-
end
|
27
|
-
rescue LoadError
|
28
|
-
puts "To prepare a gem, please install the jeweler gem."
|
29
|
-
end
|
30
|
-
|
31
|
-
begin
|
32
|
-
require 'rake/rdoctask'
|
33
|
-
Rake::RDocTask.new do |rdoc|
|
34
|
-
rdoc.rdoc_dir = 'rdoc'
|
35
|
-
rdoc.title = "FFruby " + File.read('VERSION')
|
36
|
-
rdoc.rdoc_files.include *RDOC_FILES
|
37
|
-
end
|
38
|
-
rescue LoadError
|
39
|
-
puts "To build the documentation, please install the rdoc gem."
|
40
|
-
end
|
41
|
-
|
42
|
-
begin
|
43
|
-
require 'rake/extensiontask'
|
44
|
-
Rake::ExtensionTask.new('ffruby')
|
45
|
-
task :default => :compile
|
46
|
-
rescue LoadError
|
47
|
-
puts "To build the library, please install the rake-compiler gem."
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/extensiontask"
|
3
|
+
require "rdoc/task"
|
4
|
+
|
5
|
+
spec = Gem::Specification.load(File.expand_path("../ffruby.gemspec", __FILE__))
|
6
|
+
Rake::ExtensionTask.new("ffruby", spec)
|
7
|
+
|
8
|
+
RDoc::Task.new do |rdoc|
|
9
|
+
rdoc.main = "README.rdoc"
|
10
|
+
rdoc.rdoc_dir = "rdoc"
|
11
|
+
rdoc.title = "FFruby " + File.read(File.expand_path("../VERSION", __FILE__)).chomp
|
12
|
+
rdoc.rdoc_files.include *`git ls-files \*.{c,h,rdoc}`.split("\n")
|
48
13
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/ext/ffruby/extconf.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "mkmf"
|
4
|
+
$DEFLIBPATH = []
|
4
5
|
|
5
6
|
dir_config("ffmpeg")
|
7
|
+
libs = %w( avutil avformat avcodec )
|
8
|
+
headers = []
|
6
9
|
|
7
|
-
|
10
|
+
libs.each do |lib|
|
11
|
+
have_library(lib)
|
12
|
+
end
|
13
|
+
|
14
|
+
libs.each do |lib|
|
8
15
|
header = "#{lib}.h"
|
9
16
|
result = false
|
10
17
|
|
@@ -12,7 +19,7 @@ dir_config("ffmpeg")
|
|
12
19
|
path = File.join(dir, header)
|
13
20
|
|
14
21
|
if checking_for(path) { try_cpp(cpp_include(path)) }
|
15
|
-
result = path
|
22
|
+
headers << result = path
|
16
23
|
break
|
17
24
|
end
|
18
25
|
end
|
@@ -20,11 +27,13 @@ dir_config("ffmpeg")
|
|
20
27
|
$defs.push "-D#{lib.upcase}_H_PATH=\"<#{result || header}>\""
|
21
28
|
end
|
22
29
|
|
23
|
-
have_library("avformat")
|
24
|
-
have_library("avcodec")
|
25
|
-
|
26
30
|
%w( iformat oformat codec ).each do |func|
|
27
|
-
have_func("av_#{func}_next")
|
31
|
+
have_func("av_#{func}_next", headers)
|
32
|
+
end
|
33
|
+
|
34
|
+
%w( av_dict_get avformat_open_input avformat_close_input avformat_find_stream_info avcodec_open2 ).each do |func|
|
35
|
+
have_func(func, headers)
|
28
36
|
end
|
29
37
|
|
38
|
+
have_const("AVMEDIA_TYPE_UNKNOWN", headers)
|
30
39
|
create_makefile("ffruby")
|
data/ext/ffruby/ffruby.c
CHANGED
data/ext/ffruby/ffruby.h
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2007-
|
2
|
+
* Copyright (c) 2007-2014 James Le Cuirot
|
3
3
|
*
|
4
4
|
* This file is part of FFruby.
|
5
5
|
*
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#define _FFRUBY_H_
|
23
23
|
|
24
24
|
#include <ruby.h>
|
25
|
+
#include AVUTIL_H_PATH
|
25
26
|
#include AVFORMAT_H_PATH
|
26
27
|
#include AVCODEC_H_PATH
|
27
28
|
|
data/ext/ffruby/ffrubyfile.c
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2007-
|
2
|
+
* Copyright (c) 2007-2014 James Le Cuirot
|
3
3
|
*
|
4
4
|
* This file is part of FFruby.
|
5
5
|
*
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include "ffruby.h"
|
22
22
|
#include <string.h>
|
23
23
|
#include <stdio.h>
|
24
|
+
#include <stdlib.h>
|
24
25
|
|
25
26
|
VALUE cFFrubyFile;
|
26
27
|
|
@@ -41,7 +42,11 @@ static void ffrf_free(AVFormatContext *fmt)
|
|
41
42
|
avcodec_close(fmt->streams[i]->codec);
|
42
43
|
}
|
43
44
|
|
45
|
+
#ifdef HAVE_AVFORMAT_CLOSE_INPUT
|
46
|
+
avformat_close_input(&fmt);
|
47
|
+
#else
|
44
48
|
av_close_input_file(fmt);
|
49
|
+
#endif
|
45
50
|
}
|
46
51
|
}
|
47
52
|
|
@@ -57,60 +62,99 @@ static AVFormatContext* ffrf_get_fmt(VALUE self)
|
|
57
62
|
return fmt;
|
58
63
|
}
|
59
64
|
|
60
|
-
|
61
|
-
|
65
|
+
#ifdef HAVE_AV_DICT_GET
|
66
|
+
|
67
|
+
static VALUE ffrf_get_metadata_str(VALUE self, const char *key)
|
62
68
|
{
|
63
69
|
AVFormatContext *fmt = ffrf_get_fmt(self);
|
64
|
-
|
70
|
+
AVDictionaryEntry *tag = av_dict_get(fmt->metadata, key, NULL, 0);
|
71
|
+
return (tag && *tag->value) ? rb_str_new2(tag->value) : Qnil;
|
65
72
|
}
|
66
73
|
|
67
|
-
|
68
|
-
static VALUE ffrf_author(VALUE self)
|
74
|
+
static VALUE ffrf_get_metadata_int(VALUE self, const char *key)
|
69
75
|
{
|
70
76
|
AVFormatContext *fmt = ffrf_get_fmt(self);
|
71
|
-
|
77
|
+
AVDictionaryEntry *tag = av_dict_get(fmt->metadata, key, NULL, 0);
|
78
|
+
|
79
|
+
if (tag)
|
80
|
+
{
|
81
|
+
int value = atoi(tag->value);
|
82
|
+
if (value != 0) return INT2NUM(value);
|
83
|
+
}
|
84
|
+
|
85
|
+
return Qnil;
|
86
|
+
}
|
87
|
+
|
88
|
+
#define METADATA_STR(key) ffrf_get_metadata_str(self, # key)
|
89
|
+
#define METADATA_INT(key) ffrf_get_metadata_int(self, # key)
|
90
|
+
|
91
|
+
#else
|
92
|
+
|
93
|
+
static VALUE ffrf_get_metadata_str(char* value)
|
94
|
+
{
|
95
|
+
return (value && *value) ? rb_str_new2(value) : Qnil;
|
96
|
+
}
|
97
|
+
|
98
|
+
static VALUE ffrf_get_metadata_int(int value)
|
99
|
+
{
|
100
|
+
return value != 0 ? INT2NUM(value) : Qnil;
|
101
|
+
}
|
102
|
+
|
103
|
+
#define METADATA_STR(key) ffrf_get_metadata_str(ffrf_get_fmt(self)->key)
|
104
|
+
#define METADATA_INT(key) ffrf_get_metadata_int(ffrf_get_fmt(self)->key)
|
105
|
+
|
106
|
+
#endif
|
107
|
+
|
108
|
+
/* Returns the title string. */
|
109
|
+
static VALUE ffrf_title(VALUE self)
|
110
|
+
{
|
111
|
+
return METADATA_STR(title);
|
112
|
+
}
|
113
|
+
|
114
|
+
/* Returns the artist/author string. */
|
115
|
+
static VALUE ffrf_artist(VALUE self)
|
116
|
+
{
|
117
|
+
#ifdef HAVE_AV_DICT_GET
|
118
|
+
return METADATA_STR(artist);
|
119
|
+
#else
|
120
|
+
return METADATA_STR(author);
|
121
|
+
#endif
|
72
122
|
}
|
73
123
|
|
74
124
|
/* Returns the copyright string. */
|
75
125
|
static VALUE ffrf_copyright(VALUE self)
|
76
126
|
{
|
77
|
-
|
78
|
-
return rb_str_new2(fmt->copyright);
|
127
|
+
return METADATA_STR(copyright);
|
79
128
|
}
|
80
129
|
|
81
130
|
/* Returns the comment string. */
|
82
131
|
static VALUE ffrf_comment(VALUE self)
|
83
132
|
{
|
84
|
-
|
85
|
-
return rb_str_new2(fmt->comment);
|
133
|
+
return METADATA_STR(comment);
|
86
134
|
}
|
87
135
|
|
88
136
|
/* Returns the album string. */
|
89
137
|
static VALUE ffrf_album(VALUE self)
|
90
138
|
{
|
91
|
-
|
92
|
-
return rb_str_new2(fmt->album);
|
139
|
+
return METADATA_STR(album);
|
93
140
|
}
|
94
141
|
|
95
142
|
/* Returns the genre string. */
|
96
143
|
static VALUE ffrf_genre(VALUE self)
|
97
144
|
{
|
98
|
-
|
99
|
-
return rb_str_new2(fmt->genre);
|
145
|
+
return METADATA_STR(genre);
|
100
146
|
}
|
101
147
|
|
102
148
|
/* Returns the year. */
|
103
149
|
static VALUE ffrf_year(VALUE self)
|
104
150
|
{
|
105
|
-
|
106
|
-
return INT2NUM(fmt->year);
|
151
|
+
return METADATA_INT(year);
|
107
152
|
}
|
108
153
|
|
109
154
|
/* Returns the track number. */
|
110
155
|
static VALUE ffrf_track(VALUE self)
|
111
156
|
{
|
112
|
-
|
113
|
-
return INT2NUM(fmt->track);
|
157
|
+
return METADATA_INT(track);
|
114
158
|
}
|
115
159
|
|
116
160
|
/* Returns the duration in seconds as a float. */
|
@@ -157,10 +201,18 @@ static VALUE ffrf_streams(VALUE self)
|
|
157
201
|
|
158
202
|
switch (fmt->streams[i]->codec->codec_type)
|
159
203
|
{
|
204
|
+
#ifdef HAVE_CONST_AVMEDIA_TYPE_UNKNOWN
|
205
|
+
case AVMEDIA_TYPE_VIDEO:
|
206
|
+
#else
|
160
207
|
case CODEC_TYPE_VIDEO:
|
208
|
+
#endif
|
161
209
|
rb_ary_push(streams, rb_class_new_instance(2, args, cFFrubyVideoStream));
|
162
210
|
break;
|
211
|
+
#ifdef HAVE_CONST_AVMEDIA_TYPE_UNKNOWN
|
212
|
+
case AVMEDIA_TYPE_AUDIO:
|
213
|
+
#else
|
163
214
|
case CODEC_TYPE_AUDIO:
|
215
|
+
#endif
|
164
216
|
rb_ary_push(streams, rb_class_new_instance(2, args, cFFrubyAudioStream));
|
165
217
|
break;
|
166
218
|
default:
|
@@ -183,7 +235,7 @@ static VALUE ffrf_av_streams(VALUE self, VALUE klass)
|
|
183
235
|
typed_streams = rb_ary_new();
|
184
236
|
Check_Type(streams, T_ARRAY);
|
185
237
|
|
186
|
-
for (i = 0; i <
|
238
|
+
for (i = 0; i < RARRAY_LEN(streams); i++)
|
187
239
|
{
|
188
240
|
if (rb_obj_is_kind_of((stream = rb_ary_entry(streams, i)), klass))
|
189
241
|
rb_ary_push(typed_streams, stream);
|
@@ -212,13 +264,17 @@ static VALUE ffrf_initialize(VALUE self, VALUE filename)
|
|
212
264
|
{
|
213
265
|
size_t len;
|
214
266
|
char* msg;
|
215
|
-
AVFormatContext *fmt;
|
216
267
|
VALUE exception;
|
268
|
+
AVFormatContext *fmt = NULL;
|
217
269
|
|
218
270
|
VALUE filename_str = rb_funcall(filename, rb_intern("to_s"), 0);
|
219
|
-
|
271
|
+
char* filename_ptr = RSTRING_PTR(filename_str);
|
220
272
|
|
273
|
+
#ifdef HAVE_AVFORMAT_OPEN_INPUT
|
274
|
+
if (avformat_open_input(&fmt, filename_ptr, NULL, NULL) != 0)
|
275
|
+
#else
|
221
276
|
if (av_open_input_file(&fmt, filename_ptr, NULL, 0, NULL) != 0)
|
277
|
+
#endif
|
222
278
|
{
|
223
279
|
len = strlen("Cannot open file !") + strlen(filename_ptr) + 1;
|
224
280
|
msg = ALLOC_N(char, len);
|
@@ -228,7 +284,11 @@ static VALUE ffrf_initialize(VALUE self, VALUE filename)
|
|
228
284
|
rb_exc_raise(exception);
|
229
285
|
}
|
230
286
|
|
287
|
+
#ifdef HAVE_AVFORMAT_FIND_STREAM_INFO
|
288
|
+
if (avformat_find_stream_info(fmt, NULL) < 0)
|
289
|
+
#else
|
231
290
|
if (av_find_stream_info(fmt) < 0)
|
291
|
+
#endif
|
232
292
|
{
|
233
293
|
len = strlen("Problem reading file !") + strlen(filename_ptr) + 1;
|
234
294
|
msg = ALLOC_N(char, len);
|
@@ -252,7 +312,7 @@ void Init_ffrf()
|
|
252
312
|
rb_define_alloc_func(cFFrubyFile, ffrf_alloc);
|
253
313
|
rb_define_method(cFFrubyFile, "initialize", ffrf_initialize, 1);
|
254
314
|
rb_define_method(cFFrubyFile, "title", ffrf_title, 0);
|
255
|
-
rb_define_method(cFFrubyFile, "
|
315
|
+
rb_define_method(cFFrubyFile, "artist", ffrf_artist, 0);
|
256
316
|
rb_define_method(cFFrubyFile, "copyright", ffrf_copyright, 0);
|
257
317
|
rb_define_method(cFFrubyFile, "comment", ffrf_comment, 0);
|
258
318
|
rb_define_method(cFFrubyFile, "album", ffrf_album, 0);
|
@@ -265,4 +325,5 @@ void Init_ffrf()
|
|
265
325
|
rb_define_method(cFFrubyFile, "streams", ffrf_streams, 0);
|
266
326
|
rb_define_method(cFFrubyFile, "video_streams", ffrf_video_streams, 0);
|
267
327
|
rb_define_method(cFFrubyFile, "audio_streams", ffrf_audio_streams, 0);
|
328
|
+
rb_define_alias(cFFrubyFile, "author", "artist");
|
268
329
|
}
|
data/ext/ffruby/ffrubystream.c
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2007-
|
2
|
+
* Copyright (c) 2007-2014 James Le Cuirot
|
3
3
|
*
|
4
4
|
* This file is part of FFruby.
|
5
5
|
*
|
@@ -50,7 +50,11 @@ static void ffrs_open_codec(AVStream* stream)
|
|
50
50
|
if ((codec = avcodec_find_decoder(stream->codec->codec_id)) == NULL)
|
51
51
|
rb_raise(rb_eIOError, "Cannot find codec!");
|
52
52
|
|
53
|
+
#ifdef HAVE_AVCODEC_OPEN2
|
54
|
+
if (avcodec_open2(stream->codec, codec, NULL) < 0)
|
55
|
+
#else
|
53
56
|
if (avcodec_open(stream->codec, codec) < 0)
|
57
|
+
#endif
|
54
58
|
rb_raise(rb_eIOError, "Cannot open codec!");
|
55
59
|
}
|
56
60
|
}
|
@@ -179,16 +183,14 @@ static VALUE ffras_sample_rate(VALUE self)
|
|
179
183
|
static VALUE ffrs_initialize(VALUE self, VALUE file, VALUE index)
|
180
184
|
{
|
181
185
|
AVFormatContext *fmt;
|
182
|
-
AVStream *stream;
|
183
186
|
unsigned int i = FIX2UINT(index);
|
184
187
|
|
185
188
|
Data_Get_Struct(file, AVFormatContext, fmt);
|
186
189
|
|
187
|
-
if (i
|
190
|
+
if (i >= fmt->nb_streams)
|
188
191
|
rb_raise(rb_eIndexError, "Stream index out of range!");
|
189
192
|
|
190
193
|
DATA_PTR(self) = fmt->streams[i];
|
191
|
-
stream = ffrs_get_stream(self);
|
192
194
|
|
193
195
|
return self;
|
194
196
|
}
|
data/ffruby.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "ffruby"
|
5
|
+
s.version = File.read(File.expand_path("../VERSION", __FILE__)).chomp
|
6
|
+
s.license = "LGPL-2.1"
|
7
|
+
s.authors = ["James Le Cuirot"]
|
8
|
+
s.email = "chewi@aura-online.co.uk"
|
9
|
+
s.homepage = "https://github.com/chewi/ffruby"
|
10
|
+
s.summary = "A Ruby interface to FFmpeg's libavformat and libavcodec."
|
11
|
+
s.description = "A Ruby interface to FFmpeg's libavformat and libavcodec. It allows you to query metadata from a wide variety of media files through some simple classes."
|
12
|
+
s.requirements = "FFmpeg libraries and also development headers if building."
|
13
|
+
|
14
|
+
s.extensions = ["ext/ffruby/extconf.rb"]
|
15
|
+
s.extra_rdoc_files = `git ls-files \*.{c,h,rdoc}`.split("\n")
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
|
18
|
+
s.add_development_dependency "bundler"
|
19
|
+
s.add_development_dependency "rake"
|
20
|
+
s.add_development_dependency "rake-compiler"
|
21
|
+
end
|
metadata
CHANGED
@@ -1,36 +1,72 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffruby
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 2
|
10
|
-
version: 0.2.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- James Le Cuirot
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
date: 2014-11-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake-compiler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A Ruby interface to FFmpeg's libavformat and libavcodec. It allows you
|
56
|
+
to query metadata from a wide variety of media files through some simple classes.
|
23
57
|
email: chewi@aura-online.co.uk
|
24
58
|
executables: []
|
25
|
-
|
26
|
-
extensions:
|
59
|
+
extensions:
|
27
60
|
- ext/ffruby/extconf.rb
|
28
|
-
extra_rdoc_files:
|
61
|
+
extra_rdoc_files:
|
29
62
|
- README.rdoc
|
30
63
|
- ext/ffruby/ffruby.c
|
64
|
+
- ext/ffruby/ffruby.h
|
31
65
|
- ext/ffruby/ffrubyfile.c
|
32
66
|
- ext/ffruby/ffrubystream.c
|
33
|
-
files:
|
67
|
+
files:
|
68
|
+
- ".gitignore"
|
69
|
+
- Gemfile
|
34
70
|
- LICENSE
|
35
71
|
- README.rdoc
|
36
72
|
- Rakefile
|
@@ -40,39 +76,30 @@ files:
|
|
40
76
|
- ext/ffruby/ffruby.h
|
41
77
|
- ext/ffruby/ffrubyfile.c
|
42
78
|
- ext/ffruby/ffrubystream.c
|
43
|
-
|
44
|
-
homepage:
|
45
|
-
licenses:
|
79
|
+
- ffruby.gemspec
|
80
|
+
homepage: https://github.com/chewi/ffruby
|
81
|
+
licenses:
|
46
82
|
- LGPL-2.1
|
83
|
+
metadata: {}
|
47
84
|
post_install_message:
|
48
|
-
rdoc_options:
|
49
|
-
|
50
|
-
require_paths:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
51
87
|
- lib
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
-
|
54
|
-
requirements:
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
55
90
|
- - ">="
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
version: "0"
|
61
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
-
none: false
|
63
|
-
requirements:
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
64
95
|
- - ">="
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
|
68
|
-
- 0
|
69
|
-
version: "0"
|
70
|
-
requirements:
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements:
|
71
99
|
- FFmpeg libraries and also development headers if building.
|
72
|
-
rubyforge_project:
|
73
|
-
rubygems_version:
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.2.2
|
74
102
|
signing_key:
|
75
|
-
specification_version:
|
103
|
+
specification_version: 4
|
76
104
|
summary: A Ruby interface to FFmpeg's libavformat and libavcodec.
|
77
105
|
test_files: []
|
78
|
-
|