mediainfo-native 0.2.8 → 0.3.0

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
  SHA256:
3
- metadata.gz: 7872bbea265d1cc562d8684dceabc2624364550bdc74e07362e7ad5a696a0523
4
- data.tar.gz: d5feba86a2c1404029c0843b5d82c4f763296d7b8965726e16e9d637bec946c0
3
+ metadata.gz: c240897a580eb3de9faaf15a827f96d20d310b0532cb2b01b74bf481bbb31760
4
+ data.tar.gz: 41596ad2d43cb9141732bac08d7e4cf1a4939b1df6b50739edf4d6f44ea243e3
5
5
  SHA512:
6
- metadata.gz: ad9a1b66cc3b84134615e300b523c13092a0d8a4f647c722b474405bafa1b5bcd3d5a7131146e9baeae9b8f24956443a3c45e7de353dc1b090bb08664cd30716
7
- data.tar.gz: f1e0a56e056e6b296c8f7195fa6f2e73c5323828a011a3d0c81916d64209ba201b3db212f9d538ecb5057b05ac111d0f174923ae9644cd32e383e23f1c464778
6
+ metadata.gz: 34d30843f971abf092d7db9676176e7c9a76ea531156d1b053f58025a6cfb2063b0bb24d5ce6b1b1309d96d503e2788428e37aebe9bd78e1652d32d64b2a3086
7
+ data.tar.gz: 579b8b1185b0222f9ac99150a66fd29183b4a3fe91d301fff38610a076aa3e6a620a2a1bdca9cd17899ff019c604b832ec21f19d53b207114c8d9cfdc1060114
@@ -15,9 +15,12 @@
15
15
  #ifndef MediaInfoDLLH
16
16
  #define MediaInfoDLLH
17
17
 
18
-
18
+ #ifndef UNICODE
19
19
  #define UNICODE
20
+ #endif
21
+ #ifndef _UNICODE
20
22
  #define _UNICODE
23
+ #endif
21
24
 
22
25
  //***************************************************************************
23
26
  // Platforms (from libzen)
@@ -8,7 +8,7 @@ namespace MediaInfoNative
8
8
 
9
9
  #define GET_BASESTREAM(var) \
10
10
  BaseStream* var; \
11
- Data_Get_Struct(self, BaseStream, var)
11
+ TypedData_Get_Struct(self, BaseStream, &basestream_type, var)
12
12
 
13
13
  extern "C"
14
14
  {
@@ -18,6 +18,17 @@ extern "C"
18
18
  delete ((BaseStream*) ptr);
19
19
  }
20
20
 
21
+ static const rb_data_type_t basestream_type = {
22
+ "BaseStream",
23
+ {
24
+ nullptr, // mark function
25
+ bs_free, // free function
26
+ nullptr, // memsize function
27
+ },
28
+ nullptr, nullptr,
29
+ RUBY_TYPED_FREE_IMMEDIATELY
30
+ };
31
+
21
32
  static VALUE bs_lookup(VALUE self, VALUE key)
22
33
  {
23
34
  GET_BASESTREAM(bs);
@@ -31,17 +42,21 @@ VALUE stream_klasses[STREAM_TYPE_MAX];
31
42
  void Init_BaseStream(VALUE mMediaInfoNative)
32
43
  {
33
44
  VALUE cBaseStream = rb_define_class_under(mMediaInfoNative, "BaseStream", rb_cObject);
45
+ rb_undef_alloc_func(cBaseStream);
46
+ VALUE cBaseStreamWithFramerate = rb_define_class_under(mMediaInfoNative, "BaseStreamWithFramerate", cBaseStream);
47
+ rb_undef_alloc_func(cBaseStreamWithFramerate);
34
48
 
35
49
  stream_klasses[GENERAL] = rb_define_class_under(mMediaInfoNative, "GeneralStream", cBaseStream);
36
- stream_klasses[VIDEO] = rb_define_class_under(mMediaInfoNative, "VideoStream", cBaseStream);
50
+ stream_klasses[VIDEO] = rb_define_class_under(mMediaInfoNative, "VideoStream", cBaseStreamWithFramerate);
37
51
  stream_klasses[AUDIO] = rb_define_class_under(mMediaInfoNative, "AudioStream", cBaseStream);
38
52
  stream_klasses[TEXT] = rb_define_class_under(mMediaInfoNative, "TextStream", cBaseStream);
39
- stream_klasses[OTHER] = rb_define_class_under(mMediaInfoNative, "OtherStream", cBaseStream);
53
+ stream_klasses[OTHER] = rb_define_class_under(mMediaInfoNative, "OtherStream", cBaseStreamWithFramerate);
40
54
  stream_klasses[IMAGE] = rb_define_class_under(mMediaInfoNative, "ImageStream", cBaseStream);
41
55
  stream_klasses[MENU] = rb_define_class_under(mMediaInfoNative, "MenuStream", cBaseStream);
42
56
 
43
57
  for(unsigned int st = 0; st < STREAM_TYPE_MAX; ++st) {
44
- rb_define_method(stream_klasses[st], "lookup", (VALUE(*)(...)) bs_lookup, 1);
58
+ rb_undef_alloc_func(stream_klasses[st]);
59
+ rb_define_method(stream_klasses[st], "lookup", RUBY_METHOD_FUNC(bs_lookup), 1);
45
60
  }
46
61
  }
47
62
 
@@ -54,7 +69,7 @@ BaseStream::BaseStream(StreamType _type, unsigned int _idx, MediaInfoWrapper* _w
54
69
 
55
70
  VALUE BaseStream::wrap()
56
71
  {
57
- return Data_Wrap_Struct(stream_klasses[type], 0, bs_free, this);
72
+ return TypedData_Wrap_Struct(stream_klasses[type], &basestream_type, this);
58
73
  }
59
74
 
60
75
  VALUE BaseStream::lookup(VALUE key) const
@@ -12,7 +12,7 @@ namespace MediaInfoNative
12
12
 
13
13
  #define GET_WRAPPER(var) \
14
14
  MediaInfoWrapper* var; \
15
- Data_Get_Struct(self, MediaInfoWrapper, var)
15
+ TypedData_Get_Struct(self, MediaInfoWrapper, &mediainfo_wrapper_type, var)
16
16
 
17
17
  typedef struct {
18
18
  MediaInfoWrapper* miw;
@@ -23,13 +23,22 @@ typedef struct {
23
23
  extern "C"
24
24
  {
25
25
 
26
- typedef VALUE(*RUBYFUNC)(...);
27
-
28
26
  static void miw_free(void* ptr)
29
27
  {
30
28
  delete ((MediaInfoWrapper*) ptr);
31
29
  }
32
30
 
31
+ static const rb_data_type_t mediainfo_wrapper_type = {
32
+ "MediaInfoWrapper",
33
+ {
34
+ nullptr, // mark function
35
+ miw_free, // free function
36
+ nullptr, // memsize function
37
+ },
38
+ nullptr, nullptr, // parent, data
39
+ RUBY_TYPED_FREE_IMMEDIATELY
40
+ };
41
+
33
42
  static VALUE miw_new(VALUE klass, VALUE args)
34
43
  {
35
44
  if(RARRAY_LEN(args) > 1)
@@ -46,7 +55,7 @@ extern "C"
46
55
  }
47
56
 
48
57
  MediaInfoWrapper* miw = new MediaInfoWrapper(ignore_continuous_file_names);
49
- return Data_Wrap_Struct(klass, 0, miw_free, miw);
58
+ return TypedData_Wrap_Struct(klass, &mediainfo_wrapper_type, miw);
50
59
  }
51
60
 
52
61
  static VALUE miw_close(VALUE self)
@@ -79,7 +88,7 @@ extern "C"
79
88
  }
80
89
 
81
90
  if(rb_block_given_p())
82
- return rb_ensure((RUBYFUNC) rb_yield, Qnil, (RUBYFUNC) miw_close, self);
91
+ return rb_ensure(rb_yield, Qnil, miw_close, self);
83
92
  else
84
93
  return Qnil;
85
94
  }
@@ -123,16 +132,17 @@ extern "C"
123
132
  void Init_MediaInfoWrapper(VALUE mMediaInfoNative)
124
133
  {
125
134
  VALUE cMediaInfo = rb_define_class_under(mMediaInfoNative, "MediaInfo", rb_cObject);
135
+ rb_undef_alloc_func(cMediaInfo);
126
136
 
127
- rb_define_singleton_method(cMediaInfo, "new", (RUBYFUNC) miw_new, -2);
137
+ rb_define_singleton_method(cMediaInfo, "new", RUBY_METHOD_FUNC(miw_new), -2);
128
138
 
129
- rb_define_method(cMediaInfo, "close", (RUBYFUNC) miw_close, 0);
130
- rb_define_method(cMediaInfo, "open", (RUBYFUNC) miw_open, 1);
131
- rb_define_method(cMediaInfo, "is_open?", (RUBYFUNC) miw_is_open, 0);
132
- rb_define_method(cMediaInfo, "streams", (RUBYFUNC) miw_streams, 0);
139
+ rb_define_method(cMediaInfo, "close", RUBY_METHOD_FUNC(miw_close), 0);
140
+ rb_define_method(cMediaInfo, "open", RUBY_METHOD_FUNC(miw_open), 1);
141
+ rb_define_method(cMediaInfo, "is_open?", RUBY_METHOD_FUNC(miw_is_open), 0);
142
+ rb_define_method(cMediaInfo, "streams", RUBY_METHOD_FUNC(miw_streams), 0);
133
143
 
134
- rb_define_method(cMediaInfo, "inform", (RUBYFUNC) miw_inform, 1);
135
- rb_define_method(cMediaInfo, "option", (RUBYFUNC) miw_option, 0);
144
+ rb_define_method(cMediaInfo, "inform", RUBY_METHOD_FUNC(miw_inform), 1);
145
+ rb_define_method(cMediaInfo, "option", RUBY_METHOD_FUNC(miw_option), 0);
136
146
  }
137
147
 
138
148
  /* ************************** MediaInfoWrapper ****************************** */
@@ -157,6 +167,9 @@ MediaInfoDLL::stream_t convertToMediaInfoStreamType(StreamType type)
157
167
  return MediaInfoDLL::Stream_Image;
158
168
  case MENU:
159
169
  return MediaInfoDLL::Stream_Menu;
170
+ default:
171
+ rb_raise(rb_eRuntimeError, "Invalid stream type: %d", (int)type);
172
+ __builtin_unreachable();
160
173
  }
161
174
  }
162
175
 
@@ -10,20 +10,22 @@ module MediaInfoNative
10
10
  end
11
11
 
12
12
  def mediainfo_attr_reader(attribute, mediainfo_key)
13
- attribute_before_type_cast = "#{attribute}_before_type_cast"
13
+ # Sanitize for instance variable (remove ?)
14
+ ivar_name = attribute.to_s.tr('?', '')
15
+ attribute_before_type_cast = "#{ivar_name}_before_type_cast"
14
16
 
15
- define_method attribute_before_type_cast do
17
+ define_method "#{attribute}_before_type_cast" do
16
18
  instance_variable_get("@#{attribute_before_type_cast}") || instance_variable_set("@#{attribute_before_type_cast}", lookup(mediainfo_key))
17
19
  end
18
20
 
19
21
  define_method attribute do
20
- if v = instance_variable_get("@#{attribute}")
22
+ if v = instance_variable_get("@#{ivar_name}")
21
23
  v
22
24
  else
23
- v = send(attribute_before_type_cast)
25
+ v = send("#{attribute}_before_type_cast")
24
26
  v = yield v if v and block_given?
25
27
 
26
- instance_variable_set("@#{attribute}", v)
28
+ instance_variable_set("@#{ivar_name}", v)
27
29
  end
28
30
  end
29
31
 
@@ -0,0 +1,9 @@
1
+ module MediaInfoNative
2
+ class BaseStreamWithFramerate < BaseStream
3
+ mediainfo_attr_reader :frame_rate, 'FrameRate'
4
+ def fps
5
+ frame_rate[/[\d.]+/].to_f if frame_rate
6
+ end
7
+ alias_method :framerate, :fps
8
+ end
9
+ end
@@ -16,6 +16,9 @@ module MediaInfoNative
16
16
  mediainfo_int_reader :datasize, 'DataSize'
17
17
  mediainfo_int_reader :footersize, 'FooterSize'
18
18
  alias_method :writing_application, :encoded_application_string
19
+ mediainfo_attr_reader :streamable?, 'IsStreamable' do |value|
20
+ value.empty? ? nil : value == 'Yes'
21
+ end
19
22
 
20
23
  # Since MediaInfo v0.7.76 encoded_application is replaced by
21
24
  # encoded_application_string. So lets check which one is empty.
@@ -1,5 +1,5 @@
1
1
  module MediaInfoNative
2
- class OtherStream < BaseStream
2
+ class OtherStream < BaseStreamWithFramerate
3
3
  mediainfo_attr_reader :stream_id, 'ID'
4
4
  mediainfo_attr_reader :type, 'Type'
5
5
  mediainfo_attr_reader :timecode, 'TimeCode_FirstFrame'
@@ -1,5 +1,5 @@
1
1
  module MediaInfoNative
2
- class VideoStream < BaseStream
2
+ class VideoStream < BaseStreamWithFramerate
3
3
  mediainfo_attr_reader :stream_id, 'ID'
4
4
 
5
5
  mediainfo_duration_reader :duration, 'Duration'
@@ -57,12 +57,6 @@ module MediaInfoNative
57
57
  mediainfo_attr_reader :codec, 'Codec'
58
58
  alias_method :codec_id_info, :codec_info
59
59
 
60
- mediainfo_attr_reader :frame_rate, 'FrameRate'
61
- def fps
62
- frame_rate[/[\d.]+/].to_f if frame_rate
63
- end
64
- alias_method :framerate, :fps
65
-
66
60
  mediainfo_attr_reader :nominal_frame_rate, 'FrameRate_Nominal'
67
61
  def nominal_fps
68
62
  nominal_frame_rate[/[\d.]+/].to_f if nominal_frame_rate
@@ -1,3 +1,3 @@
1
1
  module MediaInfoNative
2
- VERSION = '0.2.8'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -2,6 +2,7 @@ require 'mediainfo_native.so'
2
2
 
3
3
  require 'mediainfo-native/attr_readers'
4
4
  require 'mediainfo-native/base_stream'
5
+ require 'mediainfo-native/base_stream_with_framerate'
5
6
  require 'mediainfo-native/streams/audio'
6
7
  require 'mediainfo-native/streams/general'
7
8
  require 'mediainfo-native/streams/image'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediainfo-native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Projective Technology GmbH
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-01-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake-compiler
@@ -57,6 +56,7 @@ files:
57
56
  - lib/mediainfo-native.rb
58
57
  - lib/mediainfo-native/attr_readers.rb
59
58
  - lib/mediainfo-native/base_stream.rb
59
+ - lib/mediainfo-native/base_stream_with_framerate.rb
60
60
  - lib/mediainfo-native/mediainfo.rb
61
61
  - lib/mediainfo-native/streams/audio.rb
62
62
  - lib/mediainfo-native/streams/general.rb
@@ -70,7 +70,6 @@ homepage: https://github.com/projectivetech/mediainfo-native
70
70
  licenses:
71
71
  - MIT
72
72
  metadata: {}
73
- post_install_message:
74
73
  rdoc_options: []
75
74
  require_paths:
76
75
  - lib
@@ -85,8 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
84
  - !ruby/object:Gem::Version
86
85
  version: '0'
87
86
  requirements: []
88
- rubygems_version: 3.2.15
89
- signing_key:
87
+ rubygems_version: 3.6.7
90
88
  specification_version: 4
91
89
  summary: Native bindings for mediainfo
92
90
  test_files: []