mediainfo-native 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf002bc10633a3fd63ea58f448f68cf18fb64d3e
4
- data.tar.gz: ffe64131588e071342e0b75f9c3193dd194c1b0d
3
+ metadata.gz: f64beab22d1edc8263d33f3e97f7bf8da57749a7
4
+ data.tar.gz: 1b9344a3f4e2b334a4fb9ddd8a94446b84716dc2
5
5
  SHA512:
6
- metadata.gz: 816058893a382fcf5302d943ca8a3f0c72d496cb84f3b12e5a56eb38cb41affd4d62cb3b8455b96b71e1f93f5c41b61f2c75af81029f070640e7e73da2eda550
7
- data.tar.gz: a26023d714e88311ce05a4a8d5318d0c20157ebfbd7e5f86bc6242da8e7afa3b1cdeefc3b6199030bed9bd149e35b50fe3d854ef127277809f8870e2527f57e3
6
+ metadata.gz: 09d1198564b03a3e6d9a2457a1852ce0ebf248cf36b073258fe7ce6967ffb691ba45e3525c66cce8dc61b817f209f39f57e18ad958fcbf5e1e6aa5b9dc77ff02
7
+ data.tar.gz: de2b77e3187849a19c84d66bd5b12307604537a9949aa3cceec7bc849d4d31d2f220f6c77d1d9abf646d4fb80b6fc9171494ce81609ec43a917b4ecf0fd43a8e
@@ -15,6 +15,10 @@
15
15
  #ifndef MediaInfoDLLH
16
16
  #define MediaInfoDLLH
17
17
 
18
+
19
+ #undef UNICODE
20
+ #undef _UNICODE
21
+
18
22
  //***************************************************************************
19
23
  // Platforms (from libzen)
20
24
  //***************************************************************************
@@ -1,4 +1,3 @@
1
- #include "MediaInfoDLL.h"
2
1
  #include "basestream.h"
3
2
  #include "mediainfo_wrapper.h"
4
3
 
@@ -27,28 +26,28 @@ extern "C"
27
26
 
28
27
  }
29
28
 
30
- VALUE stream_klasses[MediaInfoDLL::Stream_Max];
29
+ VALUE stream_klasses[STREAM_TYPE_MAX];
31
30
 
32
31
  void Init_BaseStream(VALUE mMediaInfoNative)
33
32
  {
34
33
  VALUE cBaseStream = rb_define_class_under(mMediaInfoNative, "BaseStream", rb_cObject);
35
34
 
36
- stream_klasses[MediaInfoDLL::Stream_General] = rb_define_class_under(mMediaInfoNative, "GeneralStream", cBaseStream);
37
- stream_klasses[MediaInfoDLL::Stream_Video] = rb_define_class_under(mMediaInfoNative, "VideoStream", cBaseStream);
38
- stream_klasses[MediaInfoDLL::Stream_Audio] = rb_define_class_under(mMediaInfoNative, "AudioStream", cBaseStream);
39
- stream_klasses[MediaInfoDLL::Stream_Text] = rb_define_class_under(mMediaInfoNative, "TextStream", cBaseStream);
40
- stream_klasses[MediaInfoDLL::Stream_Other] = rb_define_class_under(mMediaInfoNative, "OtherStream", cBaseStream);
41
- stream_klasses[MediaInfoDLL::Stream_Image] = rb_define_class_under(mMediaInfoNative, "ImageStream", cBaseStream);
42
- stream_klasses[MediaInfoDLL::Stream_Menu] = rb_define_class_under(mMediaInfoNative, "MenuStream", cBaseStream);
35
+ stream_klasses[GENERAL] = rb_define_class_under(mMediaInfoNative, "GeneralStream", cBaseStream);
36
+ stream_klasses[VIDEO] = rb_define_class_under(mMediaInfoNative, "VideoStream", cBaseStream);
37
+ stream_klasses[AUDIO] = rb_define_class_under(mMediaInfoNative, "AudioStream", cBaseStream);
38
+ stream_klasses[TEXT] = rb_define_class_under(mMediaInfoNative, "TextStream", cBaseStream);
39
+ stream_klasses[OTHER] = rb_define_class_under(mMediaInfoNative, "OtherStream", cBaseStream);
40
+ stream_klasses[IMAGE] = rb_define_class_under(mMediaInfoNative, "ImageStream", cBaseStream);
41
+ stream_klasses[MENU] = rb_define_class_under(mMediaInfoNative, "MenuStream", cBaseStream);
43
42
 
44
- for(unsigned int st = 0; st < MediaInfoDLL::Stream_Max; ++st) {
43
+ for(unsigned int st = 0; st < STREAM_TYPE_MAX; ++st) {
45
44
  rb_define_method(stream_klasses[st], "lookup", (VALUE(*)(...)) bs_lookup, 1);
46
45
  }
47
46
  }
48
47
 
49
48
  /* ************************** BaseStream ************************************ */
50
49
 
51
- BaseStream::BaseStream(MediaInfoDLL::stream_t _type, unsigned int _idx, MediaInfoWrapper* _wrapper)
50
+ BaseStream::BaseStream(StreamType _type, unsigned int _idx, MediaInfoWrapper* _wrapper)
52
51
  : valid(true), type(_type), idx(_idx), wrapper(_wrapper)
53
52
  {
54
53
  }
@@ -80,9 +79,7 @@ VALUE BaseStream::lookup(VALUE key) const
80
79
  if(!valid)
81
80
  rb_raise(rb_eStandardError, "stream is invalid");
82
81
 
83
-
84
- MediaInfoDLL::String mi_key(StringValueCStr(key));
85
- return rb_str_new2(wrapper->getMediaInfo()->Get(type, idx, mi_key).c_str());
82
+ return wrapper->get(type, idx, key);
86
83
  }
87
84
 
88
85
  } /* namespace MediaInfoNative */
@@ -2,17 +2,28 @@
2
2
  #define MEDIAINFO_NATIVE_BASESTREAM_H
3
3
 
4
4
  #include <ruby.h>
5
- #include "MediaInfoDLL.h"
6
5
 
7
6
  namespace MediaInfoNative
8
7
  {
9
8
 
9
+ enum StreamType
10
+ {
11
+ GENERAL,
12
+ VIDEO,
13
+ AUDIO,
14
+ TEXT,
15
+ OTHER,
16
+ IMAGE,
17
+ MENU,
18
+ STREAM_TYPE_MAX
19
+ };
20
+
10
21
  class MediaInfoWrapper;
11
22
 
12
23
  class BaseStream
13
24
  {
14
25
  public:
15
- BaseStream(MediaInfoDLL::stream_t _type, unsigned int _idx, MediaInfoWrapper* _wrapper);
26
+ BaseStream(StreamType _type, unsigned int _idx, MediaInfoWrapper* _wrapper);
16
27
  ~BaseStream();
17
28
  void notifyOfWrapperDestruction();
18
29
  void invalidate();
@@ -22,7 +33,7 @@ public:
22
33
 
23
34
  private:
24
35
  bool valid;
25
- const MediaInfoDLL::stream_t type;
36
+ const StreamType type;
26
37
  const unsigned int idx;
27
38
  MediaInfoWrapper* wrapper;
28
39
  };
@@ -1,7 +1,17 @@
1
1
  require 'mkmf'
2
2
 
3
- unless have_library('mediainfo') || pkg_config('libmediainfo')
4
- abort 'Failed to locate libmediainfo. Please install it from https://mediaarea.net/en/MediaInfo/Download/Source.'
3
+ unless (mediainfo_cfg = pkg_config('libmediainfo'))
4
+ abort 'Failed to locate pkg-config file for libmediainfo.'
5
5
  end
6
6
 
7
- create_makefile('mediainfo_native')
7
+ unless have_library('mediainfo')
8
+ abort 'Failed to test-link against libmediainfo.'
9
+ end
10
+
11
+ location = (mediainfo_cfg.detect { |flag| flag =~ /^-L/ }).gsub('-L', '')
12
+ $LDFLAGS << " -Wl,-rpath,#{location}"
13
+ message "embedding path to library into libmediainfo.so: #{location}\n"
14
+
15
+ with_cppflags("#{(mediainfo_cfg.detect { |flag| flag =~ /^-I/ })}") do
16
+ create_makefile('mediainfo_native')
17
+ end
@@ -1,6 +1,6 @@
1
1
  #include "MediaInfoDLL.h"
2
2
  #include "mediainfo_wrapper.h"
3
- #include "basestream.h"
3
+ #include "unicode.h"
4
4
 
5
5
  namespace MediaInfoNative
6
6
  {
@@ -87,6 +87,31 @@ void Init_MediaInfoWrapper(VALUE mMediaInfoNative)
87
87
  #define CHECK_OPEN \
88
88
  if(!file_opened) rb_raise(rb_eStandardError, "no file opened")
89
89
 
90
+ MediaInfoDLL::stream_t convertToMediaInfoStreamType(StreamType type)
91
+ {
92
+ switch(type) {
93
+ case GENERAL:
94
+ return MediaInfoDLL::Stream_General;
95
+ case VIDEO:
96
+ return MediaInfoDLL::Stream_Video;
97
+ case AUDIO:
98
+ return MediaInfoDLL::Stream_Audio;
99
+ case TEXT:
100
+ return MediaInfoDLL::Stream_Text;
101
+ case OTHER:
102
+ return MediaInfoDLL::Stream_Other;
103
+ case IMAGE:
104
+ return MediaInfoDLL::Stream_Image;
105
+ case MENU:
106
+ return MediaInfoDLL::Stream_Menu;
107
+ }
108
+ }
109
+
110
+ MediaInfoDLL::stream_t convertToMediaInfoStreamType(unsigned int type)
111
+ {
112
+ return convertToMediaInfoStreamType((StreamType) type);
113
+ }
114
+
90
115
  MediaInfoWrapper::MediaInfoWrapper()
91
116
  : file_opened(false)
92
117
  {
@@ -114,7 +139,7 @@ void MediaInfoWrapper::open(VALUE path)
114
139
  if(file_opened)
115
140
  rb_raise(rb_eStandardError, "already opened a file");
116
141
 
117
- MediaInfoDLL::String mi_path(StringValuePtr(path));
142
+ MediaInfoDLL::String mi_path = value_to_ansi_string(path);
118
143
 
119
144
  if(mi->Open(mi_path) != 1)
120
145
  rb_raise(rb_eStandardError, "failed to open");
@@ -140,9 +165,9 @@ VALUE MediaInfoWrapper::wrapStreams()
140
165
  CHECK_OPEN;
141
166
 
142
167
  VALUE ary = rb_ary_new();
143
- for(unsigned int st = 0; st < ((unsigned int) MediaInfoDLL::Stream_Max); ++st) {
144
- for(unsigned int count = 0; count < mi->Count_Get((MediaInfoDLL::stream_t) st); ++count) {
145
- BaseStream* bs = new BaseStream((MediaInfoDLL::stream_t) st, count, this);
168
+ for(unsigned int st = 0; st < ((unsigned int) STREAM_TYPE_MAX); ++st) {
169
+ for(unsigned int count = 0; count < mi->Count_Get(convertToMediaInfoStreamType(st)); ++count) {
170
+ BaseStream* bs = new BaseStream((StreamType) st, count, this);
146
171
  rb_ary_push(ary, bs->wrap());
147
172
  }
148
173
  }
@@ -150,11 +175,17 @@ VALUE MediaInfoWrapper::wrapStreams()
150
175
  return ary;
151
176
  }
152
177
 
178
+ VALUE MediaInfoWrapper::get(StreamType type, unsigned int idx, VALUE key) const
179
+ {
180
+ MediaInfoDLL::String mi_key(value_to_ansi_string(key));
181
+ return ansi_string_to_value(mi->Get(convertToMediaInfoStreamType(type), idx, mi_key));
182
+ }
183
+
153
184
  VALUE MediaInfoWrapper::inform() const
154
185
  {
155
186
  CHECK_OPEN;
156
187
 
157
- return rb_str_new2(mi->Inform().c_str());
188
+ return ansi_string_to_value(mi->Inform());
158
189
  }
159
190
 
160
191
  void MediaInfoWrapper::notifyOfStreamDestruction(BaseStream* stream)
@@ -162,23 +193,4 @@ void MediaInfoWrapper::notifyOfStreamDestruction(BaseStream* stream)
162
193
  streams.remove(stream);
163
194
  }
164
195
 
165
- MediaInfoDLL::MediaInfo* MediaInfoWrapper::getMediaInfo()
166
- {
167
- return mi;
168
- }
169
-
170
- void MediaInfoWrapper::lzld() const
171
- {
172
- /*
173
- * NOTE: Due to the weird manual way of lazy runtime linking
174
- * used in MediaInfoDLL.h, this useless function is needed
175
- * to tell the compiler to load the MediaInfo_Get symbol
176
- * from the shared library (probably on MediaInfoWrapper
177
- * class instantiation). If this is commented out, calls
178
- * to Get() in the BaseStream will fail with a segmentation
179
- * fault.
180
- */
181
- mi->Get((MediaInfoDLL::stream_t) 0, 0, "");
182
- }
183
-
184
196
  } /* namespace MediaInfoNative */
@@ -3,13 +3,13 @@
3
3
 
4
4
  #include <list>
5
5
  #include <ruby.h>
6
- #include "MediaInfoDLL.h"
6
+ #include "basestream.h"
7
+
8
+ namespace MediaInfoDLL { class MediaInfo; }
7
9
 
8
10
  namespace MediaInfoNative
9
11
  {
10
12
 
11
- class BaseStream;
12
-
13
13
  class MediaInfoWrapper
14
14
  {
15
15
  public:
@@ -19,17 +19,16 @@ public:
19
19
  void open(VALUE path);
20
20
  void close();
21
21
  VALUE wrapStreams();
22
+
22
23
  VALUE inform() const;
24
+ VALUE get(StreamType type, unsigned int idx, VALUE key) const;
23
25
 
24
26
  void notifyOfStreamDestruction(BaseStream* stream);
25
- MediaInfoDLL::MediaInfo* getMediaInfo();
26
27
 
27
28
  private:
28
- void lzld() const;
29
-
30
29
  bool file_opened;
31
30
  MediaInfoDLL::MediaInfo* mi;
32
- std::list<BaseStream*> streams;
31
+ std::list<BaseStream*> streams;
33
32
  };
34
33
 
35
34
  void Init_MediaInfoWrapper(VALUE mMediaInfoNative);
@@ -0,0 +1,15 @@
1
+ #include <ruby.h>
2
+ #include <ruby/encoding.h>
3
+ #include "unicode.h"
4
+
5
+ MediaInfoDLL::String value_to_ansi_string(VALUE s)
6
+ {
7
+ rb_encoding* enc = rb_enc_find("ANSI");
8
+ VALUE exported = rb_str_export_to_enc(s, enc);
9
+ return MediaInfoDLL::String(StringValueCStr(exported));
10
+ }
11
+
12
+ VALUE ansi_string_to_value(MediaInfoDLL::String s)
13
+ {
14
+ return rb_external_str_new_with_enc(s.c_str(), s.length(), rb_enc_find("ANSI"));
15
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef MEDIAINFO_NATIVE_UNICODE_H
2
+ #define MEDIAINFO_NATIVE_UNICODE_H
3
+
4
+ #include <ruby.h>
5
+ #include "MediaInfoDLL.h"
6
+
7
+ MediaInfoDLL::String value_to_ansi_string(VALUE s);
8
+ VALUE ansi_string_to_value(MediaInfoDLL::String s);
9
+
10
+ #endif /* MEDIAINFO_NATIVE_UNICODE_H */
@@ -1,3 +1,3 @@
1
1
  module MediaInfoNative
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediainfo-native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - FlavourSys Technology GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-28 00:00:00.000000000 Z
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -57,7 +57,9 @@ files:
57
57
  - lib/mediainfo-native/streams/text.rb
58
58
  - lib/mediainfo-native/streams/general.rb
59
59
  - lib/mediainfo-native/mediainfo.rb
60
+ - ext/mediainfo_native/unicode.cpp
60
61
  - ext/mediainfo_native/MediaInfoDLL.h
62
+ - ext/mediainfo_native/unicode.h
61
63
  - ext/mediainfo_native/extconf.rb
62
64
  - ext/mediainfo_native/mediainfo_wrapper.cpp
63
65
  - ext/mediainfo_native/basestream.h