mediainfo-ruby 0.1.6 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new("mediainfo-ruby", "0.1.6") do |p|
5
+ Echoe.new("mediainfo-ruby", "0.1.9") do |p|
6
6
  p.description = "MediaInfo Ruby Bridge. Call MediaInfo lib directly"
7
7
  p.url = "http://github.com/hackerdude/mediainfo-ruby"
8
8
  p.author = "David Martinez"
@@ -5,6 +5,15 @@ puts "Loading mediainfo"
5
5
  require "mediainfo_ruby"
6
6
 
7
7
  module MediaInfoRubyisms_Streams
8
+ ThingsWithMultipleStreams = [:video, :audio]
9
+
10
+ # Set to true if you want empty values
11
+ attr_reader :empty_values
12
+
13
+ attr_reader :include_deprecated
14
+
15
+ attr_reader :include_inform
16
+
8
17
  # A symbol map to translate from the Rubyisms we use on mediainfo-ruby
9
18
  # to the constants libmediainfo uses.
10
19
  StreamKindSymbolsMap = {
@@ -47,12 +56,13 @@ module MediaInfoRubyisms_Streams
47
56
  # value is the help for that option.
48
57
  # By default, anything marked as deprecated in the underlying
49
58
  # library is removed.
50
- def option_definitions(remove_deprecated=true)
51
- option_map = {}
59
+ def option_definitions
60
+ option_map = {:general=>{}}
52
61
  current = :general
53
62
  switching = true
54
63
  current_map = option_map[:general]
55
- option_defs = self.option("Info_Parameters_CSV", "").each_line{|row|
64
+
65
+ option_defs = parameters_csv.each_line{|row|
56
66
  if row.strip == ""
57
67
  switching = true
58
68
  else
@@ -67,40 +77,57 @@ module MediaInfoRubyisms_Streams
67
77
  else
68
78
  key = kv[0]
69
79
  value = kv[1].nil? ? nil : kv[1].chomp
70
- current_map[key] = value unless remove_deprecated && kv[1].nil? ? false : kv[1].include?("Deprecated")
80
+ current_map[key] = value unless ! (self.include_deprecated ) && kv[1].nil? ? false : kv[1].include?("Deprecated")
71
81
  end
72
82
  end
73
83
  }
74
84
  option_map
75
85
  end
76
86
 
87
+ def parameters_csv
88
+ params_csv = self.option("Info_Parameters_CSV", "")
89
+ if RUBY_PLATFORM =~ /darwin/
90
+ params_csv = params_csv.gsub("\r", "\n")
91
+ end
92
+ params_csv
93
+ end
94
+
77
95
  # It introspects a video. This means returning a map of all the
78
96
  # values for a definition. By default empty values are not returned.
79
97
  # Send with true to return empty values
80
- def introspect(empty_values=false,include_inform=false)
98
+ def introspect
81
99
  results = {}
82
100
  self.option_definitions.each{|topic, topic_parameters|
83
101
  kind_constant = StreamKindSymbolsMap[topic]
84
102
  if ! kind_constant.nil?
85
- results[topic] = {}
86
- topic_parameters.each{|key, value|
87
- # TODO Do this for multiple streams and whatnot?
88
- #debugger if topic == :video && self.video_streams > 0
89
- value = self.get_value(kind_constant, 0, key, MediaInfoLib_InfoKind::Text, MediaInfoLib_InfoKind::Name)
90
-
91
- if empty_values == true || value.length > 0
92
- results[topic][key] = value
93
- end
94
- if key == "Inform"
95
- results[topic].delete(key) if ! include_inform
96
- end
97
- # self.get(kind_constant, 1,0, key) # Something like this
98
- }
103
+ if ThingsWithMultipleStreams.include?(topic)
104
+ streams = self.send("#{topic.to_s}_streams".to_sym)
105
+ results[topic] = 0.upto(streams-1).collect{|ix| introspect_topic(kind_constant, topic_parameters, ix) }
106
+ else
107
+ results[topic] = introspect_topic(kind_constant, topic_parameters)
108
+ end
99
109
  end
100
110
  }
101
111
  results
102
112
  end
103
113
 
114
+ private
115
+ def introspect_topic(kind_constant, topic_parameters, stream_index=0)
116
+ result = {}
117
+ topic_parameters.each{|key, value|
118
+ value = self.get_value(kind_constant, stream_index, key, MediaInfoLib_InfoKind::Text, MediaInfoLib_InfoKind::Name)
119
+
120
+ if self.empty_values == true || value.length > 0
121
+ result[key] = value
122
+ end
123
+ if key == "Inform"
124
+ result.delete(key) if ! self.include_inform
125
+ end
126
+ # self.get(kind_constant, 1,0, key) # Something like this
127
+ }
128
+ result
129
+ end
130
+
104
131
  end
105
132
 
106
133
  class MediaInfoLib::MediaInfo
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{mediainfo-ruby}
5
- s.version = "0.1.6"
5
+ s.version = "0.1.9"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["David Martinez"]
9
9
  s.cert_chain = ["/Users/david/.ssh/gem-public_cert.pem"]
10
- s.date = %q{2010-07-16}
10
+ s.date = %q{2010-07-19}
11
11
  s.description = %q{MediaInfo Ruby Bridge. Call MediaInfo lib directly}
12
12
  s.email = %q{}
13
13
  s.extensions = ["ext/mediainfo_ruby/extconf.rb"]
@@ -10,49 +10,59 @@ describe MediaInfoLib::MediaInfo do
10
10
  puts "Please put some video files on spec/fixtures to test"
11
11
  end
12
12
  end
13
+ it "Can get the option definitions for a file" do
14
+ @mediainfo = MediaInfoLib::MediaInfo.new
15
+ definitions = @mediainfo.option_definitions
16
+ [:general, :audio, :video, :text, :chapters, :menu, :text, :image].each{|topic|
17
+ # All these topics should be there
18
+ definitions.keys.should include(topic)
19
+ # All these topics should have more than one item
20
+ definitions[topic].keys.length.should > 0
21
+ }
22
+ #pp definitions
23
+ end
13
24
  context "When getting video files" do
14
25
  before(:each) do
15
- @mediainfo = MediaInfoLib::MediaInfo.new
16
26
  end
17
27
  after(:each) do
18
- @mediainfo.close
19
28
  end
20
29
  it "Can open local files" do
21
30
  @video_files.each{|video|
31
+ @mediainfo = MediaInfoLib::MediaInfo.new
22
32
  @mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
23
33
  @mediainfo.inform.length.should > 0
34
+ @mediainfo.close
24
35
  }
25
36
  end
26
37
  it "Can get info from files" do
27
38
  @video_files.each{|video|
39
+ @mediainfo = MediaInfoLib::MediaInfo.new
28
40
  @mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
29
41
  @mediainfo.streams.should > 0
30
42
  @mediainfo.streams.should < 1000
31
43
  #@mediainfo.get(MediaInfoLib_StreamKind::General,1,0,MediaInfoLib_InfoKind::Name).should_not be_nil
32
44
  }
33
45
  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
46
  it "Can get the Media Info values for a file" do
45
47
  @video_files.each{|video|
48
+ @mediainfo = MediaInfoLib::MediaInfo.new
49
+ puts "Reading #{video}"
46
50
  @mediainfo.open("#{VIDEO_FIXTURES}/#{video}").should > 0
47
51
  values = @mediainfo.introspect
48
52
  #puts "Streams for #{video}: Video:#{@mediainfo.video_streams} Audio:#{@mediainfo.audio_streams} Image:#{@mediainfo.image_streams}"
49
53
  if @mediainfo.video_streams > 0
50
54
  [:general, :audio, :video, :text, :chapters, :menu, :text, :image].each{|topic| values.should include(topic)}
51
- # TODO Spot check some topics.
52
55
  values[:general].keys.length.should > 0
53
- values[:general]["CodecID"].should_not be_nil
54
- values[:general]["CodecID"].should_not include("TODO")
56
+ values[:video][0]["Format"].should_not be_nil
57
+ values[:video][0]["Format"].should_not include("TODO")
58
+ if @mediainfo.audio_streams > 0
59
+ values[:audio][0]["Format"].should_not be_nil
60
+ values[:audio][0]["Format"].should_not include("TODO")
61
+ end
62
+ values[:audio].length.should == @mediainfo.audio_streams
63
+ values[:video].length.should == @mediainfo.video_streams
55
64
  #pp values
65
+ @mediainfo.close
56
66
  end
57
67
  }
58
68
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediainfo-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- version: 0.1.6
9
+ - 9
10
+ version: 0.1.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Martinez
@@ -36,7 +36,7 @@ cert_chain:
36
36
  Kf0A+tvk/7CpmA==
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2010-07-16 00:00:00 -07:00
39
+ date: 2010-07-19 00:00:00 -07:00
40
40
  default_executable:
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
metadata.gz.sig CHANGED
Binary file