mediainfo-ruby 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/Manifest +8 -0
- data/README.rdoc +40 -0
- data/Rakefile +16 -0
- data/ext/mediainfo_ruby/extconf.rb +39 -0
- data/ext/mediainfo_ruby/mediainfo_ruby.cpp +65 -0
- data/lib/mediainfo-ruby.rb +107 -0
- data/mediainfo-ruby.gemspec +36 -0
- data/spec/fixtures/README +1 -0
- data/spec/mediainfo_spec.rb +61 -0
- metadata +119 -0
- metadata.gz.sig +2 -0
data.tar.gz.sig
ADDED
Binary file
|
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
= MediaInfo-Ruby
|
2
|
+
|
3
|
+
== About MediaInfo-Ruby
|
4
|
+
|
5
|
+
MediaInfo-Ruby is a gem to use the mediainfolib libraries from http://mediainfo.sourceforge.net directly.
|
6
|
+
|
7
|
+
== Building MediaInfo-Ruby
|
8
|
+
|
9
|
+
To build, simply make sure you have built mediainfolib and the rice gem (mediainfolib is in c++) and installed them successfully, and also make sure the sources are in a place where the gem can get to them (/usr/local/src/mediainfolib is a good choice), then do:
|
10
|
+
|
11
|
+
gem install mediainfo-ruby
|
12
|
+
|
13
|
+
== Running the specs
|
14
|
+
|
15
|
+
If you do development on this gem, to test that it built correctly, put some videos on spec/fixtures and run the specs.
|
16
|
+
|
17
|
+
== Using MediaInfo-Ruby
|
18
|
+
|
19
|
+
Using MediaInfo-Ruby is simple. Just initialize the MediaInfoLib::MediaInfo class and start poking around:
|
20
|
+
|
21
|
+
# load the library
|
22
|
+
require 'mediainfo-ruby'
|
23
|
+
|
24
|
+
mediainfo = MediaInfoLib::MediaInfo.new
|
25
|
+
mediainfo.open("/path/to/my/video.mov")
|
26
|
+
begin
|
27
|
+
mediainfo.streams # 2
|
28
|
+
mediainfo.option_definitions # A giant map with instructions on each option
|
29
|
+
mediainfo.introspect # Asks and returns a giant map with all the options
|
30
|
+
finally
|
31
|
+
mediainfo.close
|
32
|
+
end
|
33
|
+
|
34
|
+
We'll add more rubyisms as we feel they are needed, but so far that's all. You can go lower level and call the MediaInfo library directly by using the methods that have been surfaced (option, state_get, count_get, etc)
|
35
|
+
|
36
|
+
== Mac OSX notes
|
37
|
+
|
38
|
+
If you have a pre-snow leopard OSX, you need to remove the x86_64 archflags that the extconf.rb adds. Patches appreciated.
|
39
|
+
|
40
|
+
Building mediainfolib on OSX is a bit challenging. I went the CMake route and had to do some changes. It worked but it put the libs directly on /usr/local (not on /usr/local/lib) and it didn't put any includes on /usr/local/include. I manually moved the libraries to /usr/local/lib and added code to check for the mediainfolib directory on /usr/local/src. It also listens to the environment variable MEDIAINFO_DIR which it uses to find its header files.
|
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new("mediainfo-ruby", "0.1.4") do |p|
|
6
|
+
p.description = "MediaInfo Ruby Bridge. Call MediaInfo lib directly"
|
7
|
+
p.url = "http://github.com/hackerdude/mediainfo-ruby"
|
8
|
+
p.author = "David Martinez"
|
9
|
+
p.ignore_pattern = ["tmp/*", "script/*", "pkg/*"]
|
10
|
+
p.dependencies = ["rice"] # TODO How to do native dependencies?
|
11
|
+
p.require_signed = true
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each{|ext| load ext }
|
16
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mkmf-rice'
|
4
|
+
|
5
|
+
#require 'ruby-debug'
|
6
|
+
#Debugger.start
|
7
|
+
|
8
|
+
if RUBY_PLATFORM == "universal-darwin10.0"
|
9
|
+
# TODO Set the archflags to -arch x86_64 ONLY if it's a 64-bit snow leopard machine.
|
10
|
+
ENV['ARCHFLAGS'] = "-arch x86_64"
|
11
|
+
#$CFLAGS.sub!("-arch x86_64", "")
|
12
|
+
end
|
13
|
+
|
14
|
+
MEDIAINFO_HEADER_FILE="MediaInfoDLL/MediaInfoDLL_Static.h"
|
15
|
+
|
16
|
+
HEADER_DIRS = [
|
17
|
+
"#{ENV['MEDIAINFO_DIR']}/Source",
|
18
|
+
'/usr/local/src/mediainfolib/Source',
|
19
|
+
'/opt/local/include',
|
20
|
+
'/usr/local/include',
|
21
|
+
'/usr/include'
|
22
|
+
]
|
23
|
+
HEADER_DIRS.shift if ENV['MEDIAINFO_DIR'].nil?
|
24
|
+
|
25
|
+
LIB_DIRS = [
|
26
|
+
"#{ENV['MEDIAINFO_DIR']}/Source",
|
27
|
+
'/opt/local/lib',
|
28
|
+
'/usr/local/lib',
|
29
|
+
'/usr/local', # For whatever reason, building mediainfo on Mac OSX put it here.
|
30
|
+
'/usr/lib'
|
31
|
+
]
|
32
|
+
LIB_DIRS.shift if ENV['MEDIAINFO_DIR'].nil?
|
33
|
+
dir_config("mediainfo", HEADER_DIRS, LIB_DIRS)
|
34
|
+
have_library("stdc++")
|
35
|
+
have_header "MediaInfoDLL/MediaInfoDLL_Static.h"
|
36
|
+
have_library("mediainfo", "MediaInfo_New", ['string.h', MEDIAINFO_HEADER_FILE])
|
37
|
+
|
38
|
+
create_makefile('mediainfo_ruby')
|
39
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
#include "rice/Class.hpp"
|
3
|
+
#include "rice/Data_Type.hpp"
|
4
|
+
#include "rice/Constructor.hpp"
|
5
|
+
#include "rice/Enum.hpp"
|
6
|
+
#include "rice/Module.hpp"
|
7
|
+
|
8
|
+
#include <string.h>
|
9
|
+
#include <MediaInfoDLL/MediaInfoDLL.h>
|
10
|
+
#define MediaInfoNameSpace MediaInfoDLL
|
11
|
+
|
12
|
+
using namespace Rice;
|
13
|
+
using namespace MediaInfoNameSpace;
|
14
|
+
|
15
|
+
extern "C" void Init_mediainfo_ruby()
|
16
|
+
{
|
17
|
+
//printf( "Dude!\n");
|
18
|
+
//define_module("MediaInfoLib").
|
19
|
+
define_enum<stream_t>("MediaInfoLib_StreamKind")
|
20
|
+
.define_value("General", Stream_General)
|
21
|
+
.define_value("Video", Stream_Video)
|
22
|
+
.define_value("Audio", Stream_Audio)
|
23
|
+
.define_value("Text", Stream_Text)
|
24
|
+
.define_value("Chapters", Stream_Chapters)
|
25
|
+
.define_value("Image", Stream_Image)
|
26
|
+
.define_value("Menu", Stream_Menu)
|
27
|
+
.define_value("Max", Stream_Max)
|
28
|
+
;
|
29
|
+
|
30
|
+
//define_module("MediaInfo").
|
31
|
+
define_enum<info_t>("MediaInfoLib_InfoKind")
|
32
|
+
.define_value("Name", Info_Name)
|
33
|
+
.define_value("Text", Info_Text)
|
34
|
+
.define_value("Measure", Info_Measure)
|
35
|
+
.define_value("Options", Info_Options)
|
36
|
+
.define_value("Name_Text", Info_Name_Text)
|
37
|
+
.define_value("Measure_Text", Info_Measure_Text)
|
38
|
+
.define_value("Info", Info_Info)
|
39
|
+
.define_value("HowTo", Info_HowTo)
|
40
|
+
//.define_value("Domain", Info_Domain)
|
41
|
+
.define_value("Max", Info_Max)
|
42
|
+
;
|
43
|
+
//define_class<File__Analyze>("File__Analyze")
|
44
|
+
//;
|
45
|
+
typedef std::string(MediaInfo::*get_info)(stream_t,size_t,size_t,info_t);
|
46
|
+
typedef std::string(MediaInfo::*get_info_somewhere)(stream_t, size_t,const std::string,info_t,info_t);
|
47
|
+
typedef std::string(MediaInfo::*get_info_string)(stream_t StreamKind, size_t StreamNumber, const std::string &Parameter, info_t InfoKind, info_t SearchKind);
|
48
|
+
|
49
|
+
|
50
|
+
define_module("MediaInfoLib").
|
51
|
+
define_class<MediaInfo>("MediaInfo")
|
52
|
+
.define_constructor(Constructor<MediaInfo>())
|
53
|
+
.define_method("_inform", &MediaInfo::Inform)
|
54
|
+
.define_method("option", &MediaInfo::Option)
|
55
|
+
.define_method("open", &MediaInfo::Open)
|
56
|
+
.define_method("close", &MediaInfo::Close)
|
57
|
+
.define_method("state_get", &MediaInfo::State_Get)
|
58
|
+
.define_method("count_get", &MediaInfo::Count_Get)
|
59
|
+
.define_method("get", get_info(&MediaInfo::Get))
|
60
|
+
// TODO Enabling this breaks with "address of overloaded function with no contextual type information".. Signature doesn't match
|
61
|
+
.define_method("get_value", get_info_string(&MediaInfo::Get))
|
62
|
+
//.define_method("_count_get", &MediaInfo::Count_Get)
|
63
|
+
;
|
64
|
+
//printf( "OK so at least MediaInfo is initialized now\n");
|
65
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# Load the C++ library.
|
2
|
+
$:.unshift "#{File.dirname(__FILE__)}/../ext/mediainfo_ruby/"
|
3
|
+
|
4
|
+
puts "Loading mediainfo"
|
5
|
+
require "mediainfo_ruby"
|
6
|
+
|
7
|
+
module MediaInfoRubyisms_Streams
|
8
|
+
# A symbol map to translate from the Rubyisms we use on mediainfo-ruby
|
9
|
+
# to the constants libmediainfo uses.
|
10
|
+
StreamKindSymbolsMap = {
|
11
|
+
:general=>MediaInfoLib_StreamKind::General,
|
12
|
+
:video=>MediaInfoLib_StreamKind::Video,
|
13
|
+
:audio=>MediaInfoLib_StreamKind::Audio,
|
14
|
+
:text=>MediaInfoLib_StreamKind::Text,
|
15
|
+
:chapters=>MediaInfoLib_StreamKind::Chapters,
|
16
|
+
:image=>MediaInfoLib_StreamKind::Image,
|
17
|
+
:menu=>MediaInfoLib_StreamKind::Menu,
|
18
|
+
:max=>MediaInfoLib_StreamKind::Max
|
19
|
+
}
|
20
|
+
|
21
|
+
# Call inform and remove the DOS-linefeeds. Useful for quick printout
|
22
|
+
# of a bunch of media information
|
23
|
+
def inform
|
24
|
+
self._inform.split("\r")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns how many streams in total this file has.
|
28
|
+
def streams; self.count_get(MediaInfoLib_StreamKind::General, -1) ; end
|
29
|
+
|
30
|
+
# Returns how many streams are audio streams
|
31
|
+
def audio_streams ; self.count_get(MediaInfoLib_StreamKind::Audio, -1) ; end
|
32
|
+
|
33
|
+
# Returns how many streams are video streams
|
34
|
+
def video_streams ; self.count_get(MediaInfoLib_StreamKind::Video, -1); end
|
35
|
+
|
36
|
+
# Returns how many streams are chapter streams
|
37
|
+
def chapter_streams ; self.count_get(MediaInfoLib_StreamKind::Chapters, -1); end
|
38
|
+
|
39
|
+
# Returns how many streams are image streams
|
40
|
+
def image_streams ; self.count_get(MediaInfoLib_StreamKind::Image, -1); end
|
41
|
+
|
42
|
+
# Returns how many streams are menu streams
|
43
|
+
def menu_streams ; self.count_get(MediaInfoLib_StreamKind::Menu, -1); end
|
44
|
+
|
45
|
+
# Returns a map of all the possible option definitions,
|
46
|
+
# where the key is the option we can ask for and the
|
47
|
+
# value is the help for that option.
|
48
|
+
# By default, anything marked as deprecated in the underlying
|
49
|
+
# library is removed.
|
50
|
+
def option_definitions(remove_deprecated=true)
|
51
|
+
option_map = {}
|
52
|
+
current = :general
|
53
|
+
switching = true
|
54
|
+
current_map = option_map[:general]
|
55
|
+
option_defs = self.option("Info_Parameters_CSV", "").split("\r").each{|row|
|
56
|
+
if row.strip == ""
|
57
|
+
switching = true
|
58
|
+
else
|
59
|
+
kv = row.split(";")
|
60
|
+
if kv.length == 1 && switching
|
61
|
+
topic = kv[0].downcase.to_sym
|
62
|
+
current_map = option_map[topic]
|
63
|
+
if current_map.nil?
|
64
|
+
option_map[topic] = current_map = {}
|
65
|
+
end
|
66
|
+
switching = false
|
67
|
+
else
|
68
|
+
current_map[kv[0]] = kv[1] unless remove_deprecated && kv[1].nil? ? false : kv[1].include?("Deprecated")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
}
|
72
|
+
option_map
|
73
|
+
end
|
74
|
+
|
75
|
+
# It introspects a video. This means returning a map of all the
|
76
|
+
# values for a definition. By default empty values are not returned.
|
77
|
+
# Send with true to return empty values
|
78
|
+
def introspect(empty_values=false,include_inform=false)
|
79
|
+
results = {}
|
80
|
+
self.option_definitions.each{|topic, topic_parameters|
|
81
|
+
kind_constant = StreamKindSymbolsMap[topic]
|
82
|
+
if ! kind_constant.nil?
|
83
|
+
results[topic] = {}
|
84
|
+
topic_parameters.each{|key, value|
|
85
|
+
# TODO Do this for multiple streams and whatnot?
|
86
|
+
#debugger if topic == :video && self.video_streams > 0
|
87
|
+
value = self.get_value(kind_constant, 0, key, MediaInfoLib_InfoKind::Text, MediaInfoLib_InfoKind::Name)
|
88
|
+
|
89
|
+
if empty_values == true || value.length > 0
|
90
|
+
results[topic][key] = value
|
91
|
+
end
|
92
|
+
if key == "Inform"
|
93
|
+
results[topic].delete(key) if ! include_inform
|
94
|
+
end
|
95
|
+
# self.get(kind_constant, 1,0, key) # Something like this
|
96
|
+
}
|
97
|
+
end
|
98
|
+
}
|
99
|
+
results
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
class MediaInfoLib::MediaInfo
|
105
|
+
include(MediaInfoRubyisms_Streams)
|
106
|
+
end
|
107
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{mediainfo-ruby}
|
5
|
+
s.version = "0.1.4"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["David Martinez"]
|
9
|
+
s.cert_chain = ["/Users/david/.ssh/gem-public_cert.pem"]
|
10
|
+
s.date = %q{2010-07-15}
|
11
|
+
s.description = %q{MediaInfo Ruby Bridge. Call MediaInfo lib directly}
|
12
|
+
s.email = %q{}
|
13
|
+
s.extensions = ["ext/mediainfo_ruby/extconf.rb"]
|
14
|
+
s.extra_rdoc_files = ["README.rdoc", "ext/mediainfo_ruby/extconf.rb", "ext/mediainfo_ruby/mediainfo_ruby.cpp", "lib/mediainfo-ruby.rb"]
|
15
|
+
s.files = ["Manifest", "README.rdoc", "Rakefile", "ext/mediainfo_ruby/extconf.rb", "ext/mediainfo_ruby/mediainfo_ruby.cpp", "lib/mediainfo-ruby.rb", "spec/fixtures/README", "spec/mediainfo_spec.rb", "mediainfo-ruby.gemspec"]
|
16
|
+
s.homepage = %q{http://github.com/hackerdude/mediainfo-ruby}
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Mediainfo-ruby", "--main", "README.rdoc"]
|
18
|
+
s.require_paths = ["lib", "ext"]
|
19
|
+
s.rubyforge_project = %q{mediainfo-ruby}
|
20
|
+
s.rubygems_version = %q{1.3.7}
|
21
|
+
s.signing_key = %q{/Users/david/.ssh/gem-private_key.pem}
|
22
|
+
s.summary = %q{MediaInfo Ruby Bridge. Call MediaInfo lib directly}
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
26
|
+
s.specification_version = 3
|
27
|
+
|
28
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
29
|
+
s.add_runtime_dependency(%q<rice>, [">= 0"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<rice>, [">= 0"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<rice>, [">= 0"])
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Put some videos here, then run the spec to try it out!
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../lib/mediainfo-ruby"
|
2
|
+
describe MediaInfoLib::MediaInfo do
|
3
|
+
VIDEO_FIXTURES = "#{File.dirname(__FILE__)}/fixtures"
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@video_files = Dir.new(VIDEO_FIXTURES).collect{|f|
|
7
|
+
f unless f[0..0] == "." || f.include?(".swf") || f.include?("flv")
|
8
|
+
}.compact
|
9
|
+
if @video_files.length == 0
|
10
|
+
puts "Please put some video files on spec/fixtures to test"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
context "When getting video files" do
|
14
|
+
before(:each) do
|
15
|
+
@mediainfo = MediaInfoLib::MediaInfo.new
|
16
|
+
end
|
17
|
+
after(:each) do
|
18
|
+
@mediainfo.close
|
19
|
+
end
|
20
|
+
it "Can open local files" do
|
21
|
+
@video_files.each{|video|
|
22
|
+
@mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
|
23
|
+
@mediainfo.inform.length.should > 0
|
24
|
+
}
|
25
|
+
end
|
26
|
+
it "Can get info from files" do
|
27
|
+
@video_files.each{|video|
|
28
|
+
@mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
|
29
|
+
@mediainfo.streams.should > 0
|
30
|
+
@mediainfo.streams.should < 1000
|
31
|
+
#@mediainfo.get(MediaInfoLib_StreamKind::General,1,0,MediaInfoLib_InfoKind::Name).should_not be_nil
|
32
|
+
}
|
33
|
+
end
|
34
|
+
it "Can get the option definitions for a file" do
|
35
|
+
definitions = @mediainfo.option_definitions
|
36
|
+
[:general, :audio, :video, :text, :chapters, :menu, :text, :image].each{|topic|
|
37
|
+
# All these topics should be there
|
38
|
+
definitions.keys.should include(topic)
|
39
|
+
# All these topics should have more than one item
|
40
|
+
definitions[topic].keys.length.should > 0
|
41
|
+
}
|
42
|
+
#pp definitions
|
43
|
+
end
|
44
|
+
it "Can get the Media Info values for a file" do
|
45
|
+
@video_files.each{|video|
|
46
|
+
@mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
|
47
|
+
values = @mediainfo.introspect
|
48
|
+
#puts "Streams for #{video}: Video:#{@mediainfo.video_streams} Audio:#{@mediainfo.audio_streams} Image:#{@mediainfo.image_streams}"
|
49
|
+
if @mediainfo.video_streams > 0
|
50
|
+
[:general, :audio, :video, :text, :chapters, :menu, :text, :image].each{|topic| values.should include(topic)}
|
51
|
+
# TODO Spot check some topics.
|
52
|
+
values[:general].keys.length.should > 0
|
53
|
+
values[:general]["CodecID"].should_not be_nil
|
54
|
+
values[:general]["CodecID"].should_not include("TODO")
|
55
|
+
#pp values
|
56
|
+
end
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mediainfo-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 4
|
10
|
+
version: 0.1.4
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- David Martinez
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain:
|
17
|
+
- |
|
18
|
+
-----BEGIN CERTIFICATE-----
|
19
|
+
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQ4wDAYDVQQDDAVkYXZp
|
20
|
+
ZDEaMBgGCgmSJomT8ixkARkWCmhhY2tlcmR1ZGUxEzARBgoJkiaJk/IsZAEZFgNj
|
21
|
+
b20wHhcNMTAwNzE1MTU0OTA4WhcNMTEwNzE1MTU0OTA4WjBBMQ4wDAYDVQQDDAVk
|
22
|
+
YXZpZDEaMBgGCgmSJomT8ixkARkWCmhhY2tlcmR1ZGUxEzARBgoJkiaJk/IsZAEZ
|
23
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZQOBPpc0c8HXH
|
24
|
+
shEk6kmOM7oJQMXTEbvaDgPrd4ZOQ2KWWIcrxb7kPlUzZJHXITzFylrNt7NRI3it
|
25
|
+
hZbhKaeN4EcRa5Sfeuzy21vXq37An/8DCVTEyNTrtB7eQlflb7DHGuTWx3ePfEnP
|
26
|
+
zJmC3CDk2mcbp1BSUQZtVB7p475whLTRFtjT7J0CItLIW8hZ1WAlMKGImcWM8Wst
|
27
|
+
9KZZ9uWFMhvPpfLQMZ4P2MjUqjHItOgprkAKH7JueckMygD93pSxLydPkE7HPXaG
|
28
|
+
5cY9UyW6JNfq0H3jvGYDAnXIKvf6sff5dtsSK/4wqqa8SRykshBvV1V3iMNcEKwo
|
29
|
+
aWqYKGppAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
30
|
+
BBSRlEGvaFh8owplxLanNW/kvZQpIjANBgkqhkiG9w0BAQUFAAOCAQEA022Ytoga
|
31
|
+
jUkbKpdZHE7Ri/aUtF7ObVfXIKr/MH/auHlBtb6wn24MThgK1pxI4Nvk17gsnnlg
|
32
|
+
Ve5/nH9boX9DRPO59kEi2gHN+TA+bno5VJn7cWJtPe/vB1qg7+GvNw3cooroP+Pd
|
33
|
+
2cGvFdPv4S4oxKYU84zVe32WRQKe+n+MD/wC17q3dMLOBd/6aKk5abXFtZFOndMn
|
34
|
+
WhQs04JgrcyE6lu109ilCjee26AbwXtufPEoOTiaGl7Bq5AqcNia9/1lcjRxbxGI
|
35
|
+
pMypEfoucyyqyj7Jl/UrpSEQ+kht4wz4MzsaIK/k978G2H1lvPccGxknSiHW5/I/
|
36
|
+
Kf0A+tvk/7CpmA==
|
37
|
+
-----END CERTIFICATE-----
|
38
|
+
|
39
|
+
date: 2010-07-15 00:00:00 -07:00
|
40
|
+
default_executable:
|
41
|
+
dependencies:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rice
|
44
|
+
prerelease: false
|
45
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
hash: 3
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id001
|
56
|
+
description: MediaInfo Ruby Bridge. Call MediaInfo lib directly
|
57
|
+
email: ""
|
58
|
+
executables: []
|
59
|
+
|
60
|
+
extensions:
|
61
|
+
- ext/mediainfo_ruby/extconf.rb
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.rdoc
|
64
|
+
- ext/mediainfo_ruby/extconf.rb
|
65
|
+
- ext/mediainfo_ruby/mediainfo_ruby.cpp
|
66
|
+
- lib/mediainfo-ruby.rb
|
67
|
+
files:
|
68
|
+
- Manifest
|
69
|
+
- README.rdoc
|
70
|
+
- Rakefile
|
71
|
+
- ext/mediainfo_ruby/extconf.rb
|
72
|
+
- ext/mediainfo_ruby/mediainfo_ruby.cpp
|
73
|
+
- lib/mediainfo-ruby.rb
|
74
|
+
- spec/fixtures/README
|
75
|
+
- spec/mediainfo_spec.rb
|
76
|
+
- mediainfo-ruby.gemspec
|
77
|
+
has_rdoc: true
|
78
|
+
homepage: http://github.com/hackerdude/mediainfo-ruby
|
79
|
+
licenses: []
|
80
|
+
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options:
|
83
|
+
- --line-numbers
|
84
|
+
- --inline-source
|
85
|
+
- --title
|
86
|
+
- Mediainfo-ruby
|
87
|
+
- --main
|
88
|
+
- README.rdoc
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
- ext
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 3
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 11
|
107
|
+
segments:
|
108
|
+
- 1
|
109
|
+
- 2
|
110
|
+
version: "1.2"
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project: mediainfo-ruby
|
114
|
+
rubygems_version: 1.3.7
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: MediaInfo Ruby Bridge. Call MediaInfo lib directly
|
118
|
+
test_files: []
|
119
|
+
|
metadata.gz.sig
ADDED