rays-video 0.1.2
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/.doc/ext/rays-video/native.cpp +17 -0
- data/.doc/ext/rays-video/video.cpp +257 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- data/.github/workflows/release-gem.yml +51 -0
- data/.github/workflows/tag.yml +35 -0
- data/.github/workflows/test.yml +37 -0
- data/.github/workflows/utils.rb +127 -0
- data/CONTRIBUTING.md +7 -0
- data/ChangeLog.md +19 -0
- data/Gemfile +5 -0
- data/LICENSE +21 -0
- data/README.md +147 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/ext/rays-video/defs.h +17 -0
- data/ext/rays-video/extconf.rb +23 -0
- data/ext/rays-video/native.cpp +17 -0
- data/ext/rays-video/video.cpp +282 -0
- data/include/rays/video.h +102 -0
- data/include/rays-video/ruby/video.h +47 -0
- data/include/rays-video/ruby.h +10 -0
- data/include/rays-video.h +10 -0
- data/lib/rays/video.rb +45 -0
- data/lib/rays-video/ext.rb +1 -0
- data/lib/rays-video/extension.rb +41 -0
- data/lib/rays-video.rb +3 -0
- data/rays-video.gemspec +39 -0
- data/src/ios/video.mm +633 -0
- data/src/ios/video_audio_in.h +22 -0
- data/src/ios/video_audio_in.mm +252 -0
- data/src/osx/video.mm +633 -0
- data/src/osx/video_audio_in.h +22 -0
- data/src/osx/video_audio_in.mm +252 -0
- data/src/sdl/video.cpp +86 -0
- data/src/sdl/video_audio_in.cpp +63 -0
- data/src/video.cpp +278 -0
- data/src/video.h +50 -0
- data/src/video_audio_in.h +57 -0
- data/src/win32/video.cpp +86 -0
- data/src/win32/video_audio_in.cpp +63 -0
- data/test/helper.rb +15 -0
- data/test/test_video.rb +165 -0
- metadata +145 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// -*- c++ -*-
|
|
2
|
+
#pragma once
|
|
3
|
+
#ifndef __RAYS_VIDEO_SRC_VIDEO_AUDIO_IN_H__
|
|
4
|
+
#define __RAYS_VIDEO_SRC_VIDEO_AUDIO_IN_H__
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
#include <vector>
|
|
8
|
+
#include <beeps/processor.h>
|
|
9
|
+
#include <rays/defs.h>
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
namespace Rays
|
|
13
|
+
{
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class VideoAudioIn : public Beeps::Generator
|
|
17
|
+
{
|
|
18
|
+
|
|
19
|
+
typedef Beeps::Generator Super;
|
|
20
|
+
|
|
21
|
+
public:
|
|
22
|
+
|
|
23
|
+
virtual ~VideoAudioIn ();
|
|
24
|
+
|
|
25
|
+
virtual double sample_rate () const;
|
|
26
|
+
|
|
27
|
+
virtual uint nchannels () const;
|
|
28
|
+
|
|
29
|
+
virtual uint nsamples () const;
|
|
30
|
+
|
|
31
|
+
virtual float seconds () const;
|
|
32
|
+
|
|
33
|
+
virtual operator bool () const override;
|
|
34
|
+
|
|
35
|
+
bool seekable () const override;
|
|
36
|
+
|
|
37
|
+
struct Data;
|
|
38
|
+
|
|
39
|
+
Xot::PSharedImpl<Data> self;
|
|
40
|
+
|
|
41
|
+
VideoAudioIn (Data* data);
|
|
42
|
+
|
|
43
|
+
protected:
|
|
44
|
+
|
|
45
|
+
virtual void generate (
|
|
46
|
+
Context* context, Beeps::Signals* signals, uint* offset) override;
|
|
47
|
+
|
|
48
|
+
};// VideoAudioIn
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
typedef std::vector<Xot::Ref<VideoAudioIn>> VideoAudioInList;
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
}// Rays
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#endif//EOH
|
data/src/win32/video.cpp
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#include "../video.h"
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
#include "rays/exception.h"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
namespace Rays
|
|
8
|
+
{
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
struct VideoReader::Data
|
|
12
|
+
{
|
|
13
|
+
};// VideoReader::Data
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
VideoReader::VideoReader ()
|
|
17
|
+
{
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
VideoReader::VideoReader (const char*)
|
|
21
|
+
{
|
|
22
|
+
not_implemented_error(__FILE__, __LINE__);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Image
|
|
26
|
+
VideoReader::decode_image (size_t, float) const
|
|
27
|
+
{
|
|
28
|
+
not_implemented_error(__FILE__, __LINE__);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
VideoAudioInList
|
|
32
|
+
VideoReader::get_audio_tracks () const
|
|
33
|
+
{
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
coord
|
|
38
|
+
VideoReader::width () const
|
|
39
|
+
{
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
coord
|
|
44
|
+
VideoReader::height () const
|
|
45
|
+
{
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
float
|
|
50
|
+
VideoReader::fps () const
|
|
51
|
+
{
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
size_t
|
|
56
|
+
VideoReader::size () const
|
|
57
|
+
{
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
VideoReader::operator bool () const
|
|
62
|
+
{
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
bool
|
|
67
|
+
VideoReader::operator ! () const
|
|
68
|
+
{
|
|
69
|
+
return !operator bool();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
void
|
|
74
|
+
Video::save (const char*)
|
|
75
|
+
{
|
|
76
|
+
not_implemented_error(__FILE__, __LINE__);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const StringList&
|
|
80
|
+
get_video_exts ()
|
|
81
|
+
{
|
|
82
|
+
not_implemented_error(__FILE__, __LINE__);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
}// Rays
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#include "../video_audio_in.h"
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
namespace Rays
|
|
5
|
+
{
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
struct VideoAudioIn::Data
|
|
9
|
+
{
|
|
10
|
+
};// VideoAudioIn::Data
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
VideoAudioIn::VideoAudioIn (Data* data)
|
|
14
|
+
: self(data)
|
|
15
|
+
{
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
VideoAudioIn::~VideoAudioIn ()
|
|
19
|
+
{
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
double
|
|
23
|
+
VideoAudioIn::sample_rate () const
|
|
24
|
+
{
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
uint
|
|
29
|
+
VideoAudioIn::nchannels () const
|
|
30
|
+
{
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
uint
|
|
35
|
+
VideoAudioIn::nsamples () const
|
|
36
|
+
{
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
float
|
|
41
|
+
VideoAudioIn::seconds () const
|
|
42
|
+
{
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
VideoAudioIn::operator bool () const
|
|
47
|
+
{
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
bool
|
|
52
|
+
VideoAudioIn::seekable () const
|
|
53
|
+
{
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void
|
|
58
|
+
VideoAudioIn::generate (Context* context, Beeps::Signals* signals, uint* offset)
|
|
59
|
+
{
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
}// Rays
|
data/test/helper.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
%w[../xot ../rucy ../beeps ../rays .]
|
|
2
|
+
.map {|s| File.expand_path "../#{s}/lib", __dir__}
|
|
3
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
|
4
|
+
|
|
5
|
+
require 'xot/test'
|
|
6
|
+
require 'rays'
|
|
7
|
+
require 'rays-video'
|
|
8
|
+
|
|
9
|
+
require 'test/unit'
|
|
10
|
+
require 'tmpdir'
|
|
11
|
+
|
|
12
|
+
include Xot::Test
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def tmpdir(&block) = Dir.mktmpdir(&block)
|
data/test/test_video.rb
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
return unless osx? || ios?
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class TestVideo < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def video(w = 10, h = 10, fps = 0, pd = 1)
|
|
10
|
+
Rays::Video.new(w, h, fps: fps, pixel_density: pd)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def image(w = 10, h = 10)
|
|
14
|
+
Rays::Image.new(w, h)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_initialize()
|
|
18
|
+
assert_equal 1, video(1, 2, 3, 4).width
|
|
19
|
+
assert_equal 2, video(1, 2, 3, 4).height
|
|
20
|
+
assert_equal 3, video(1, 2, 3, 4).fps
|
|
21
|
+
assert_equal 30, video(1, 2, 0, 4).fps
|
|
22
|
+
assert_equal 30, video(1, 2, -1, 4).fps
|
|
23
|
+
assert_equal 4, video(1, 2, 3, 4).pixel_density
|
|
24
|
+
|
|
25
|
+
assert_raise(ArgumentError) {video 0, 2, 3, 4}
|
|
26
|
+
assert_raise(ArgumentError) {video(-1, 2, 3, 4)}
|
|
27
|
+
assert_raise(ArgumentError) {video 1, 0, 3, 4}
|
|
28
|
+
assert_raise(ArgumentError) {video 1, -1, 3, 4}
|
|
29
|
+
assert_raise(ArgumentError) {video 1, 2, 3, 0}
|
|
30
|
+
assert_raise(ArgumentError) {video 1, 2, 3, -1}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_dup()
|
|
34
|
+
assert_equal 1, video(1, 2, 3, 4).dup.width
|
|
35
|
+
assert_equal 2, video(1, 2, 3, 4).dup.height
|
|
36
|
+
assert_equal 3, video(1, 2, 3, 4).dup.fps
|
|
37
|
+
assert_equal 4, video(1, 2, 3, 4).dup.pixel_density
|
|
38
|
+
|
|
39
|
+
v1 = video.tap {_1.append image}
|
|
40
|
+
v2 = v1.dup; assert_equal [1, 1], [v1.size, v2.size]
|
|
41
|
+
v2.append image; assert_equal [1, 2], [v1.size, v2.size]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_insert()
|
|
45
|
+
v = video; assert_equal [], v.map(&:width)
|
|
46
|
+
v.append image(1), image(2); assert_equal [1, 2], v.map(&:width)
|
|
47
|
+
v.insert 1, image(3); assert_equal [1, 3, 2], v.map(&:width)
|
|
48
|
+
v.insert 2, image(4), image(5); assert_equal [1, 3, 4, 5, 2], v.map(&:width)
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_append()
|
|
53
|
+
v = video; assert_equal [], v.map(&:width)
|
|
54
|
+
v.append image(1); assert_equal [1], v.map(&:width)
|
|
55
|
+
v.append image(2), image(3); assert_equal [1, 2, 3], v.map(&:width)
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_remove()
|
|
60
|
+
v = video; assert_equal [], v.map(&:width)
|
|
61
|
+
v.append image(1), image(2), image(3); assert_equal [1, 2, 3], v.map(&:width)
|
|
62
|
+
v.remove 1; assert_equal [1, 3], v.map(&:width)
|
|
63
|
+
|
|
64
|
+
assert_raise(NotImplementedError) {v.remove 1..}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_size()
|
|
68
|
+
v = video; assert_equal 0, v.size
|
|
69
|
+
v.append image, image; assert_equal 2, v.size
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_empty()
|
|
73
|
+
v = video; assert_true v.empty?
|
|
74
|
+
v.append image; assert_false v.empty?
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_position()
|
|
78
|
+
v = video
|
|
79
|
+
v.append image, image, image; assert_equal 0, v.pos
|
|
80
|
+
v.pos = 2; assert_equal 2, v.pos
|
|
81
|
+
v.pos = 3; assert_equal 2, v.pos
|
|
82
|
+
|
|
83
|
+
assert_raise(RangeError) {v.pos = -1}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_each()
|
|
87
|
+
v = video
|
|
88
|
+
v.append image(1), image(2), image(3)
|
|
89
|
+
|
|
90
|
+
assert_equal(
|
|
91
|
+
[[0, 1], [1, 2], [2, 3]],
|
|
92
|
+
v.map.with_index {|image, index| [index, image.width]})
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_to_image()
|
|
96
|
+
v = video.tap {_1.append image(1), image(2), image(3)}
|
|
97
|
+
assert_equal 1, v.to_image.width
|
|
98
|
+
v.pos = 1; assert_equal 2, v.to_image.width
|
|
99
|
+
v.pos = 2; assert_equal 3, v.to_image.width
|
|
100
|
+
v.pos = 3; assert_equal 3, v.to_image.width
|
|
101
|
+
v.pos = 9; assert_equal 3, v.to_image.width
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_at()
|
|
105
|
+
v = video
|
|
106
|
+
v.append image(1), image(2), image(3)
|
|
107
|
+
assert_equal 1, v[0].width
|
|
108
|
+
assert_equal 3, v[2].width
|
|
109
|
+
|
|
110
|
+
assert_raise(IndexError) {v[-1]}
|
|
111
|
+
assert_raise(IndexError) {v[3]}
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_save_mp4()
|
|
115
|
+
tmpdir do |dir|
|
|
116
|
+
v = video.tap {_1.append image, image, image}
|
|
117
|
+
path = File.join dir, 'test.mp4'
|
|
118
|
+
v.save path
|
|
119
|
+
assert File.exist?(path)
|
|
120
|
+
assert File.size(path) > 0
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_save_gif()
|
|
125
|
+
tmpdir do |dir|
|
|
126
|
+
v = video.tap {_1.append image, image, image}
|
|
127
|
+
path = File.join dir, 'test.gif'
|
|
128
|
+
v.save path
|
|
129
|
+
assert File.exist?(path)
|
|
130
|
+
assert File.size(path) > 0
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_save_empty()
|
|
135
|
+
v = video
|
|
136
|
+
tmpdir do |dir|
|
|
137
|
+
assert_raise(Rucy::NativeError) {v.save File.expand_path dir, 'test.mp4'}
|
|
138
|
+
assert_raise(Rucy::NativeError) {v.save File.expand_path dir, 'test.gif'}
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_load_mp4()
|
|
143
|
+
tmpdir do |dir|
|
|
144
|
+
v = video.tap {_1.append image, image, image}
|
|
145
|
+
path = File.join dir, 'test.mp4'
|
|
146
|
+
v.save path
|
|
147
|
+
assert_equal 3, Rays::Video.load(path).size
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_load_gif()
|
|
152
|
+
tmpdir do |dir|
|
|
153
|
+
v = video.tap {_1.append image, image, image}
|
|
154
|
+
path = File.join dir, 'test.gif'
|
|
155
|
+
v.save path
|
|
156
|
+
assert_equal 3, Rays::Video.load(path).size
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_exts()
|
|
161
|
+
assert_include Rays::Video.exts, 'mp4'
|
|
162
|
+
assert_include Rays::Video.exts, 'gif'
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
end# TestVideo
|
metadata
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rays-video
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- xordog
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-05-16 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: xot
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.3.13
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.3.13
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rucy
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.3.13
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.3.13
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: beeps
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 0.3.13
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 0.3.13
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rays
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.3.13
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 0.3.13
|
|
69
|
+
description: Video encoding/decoding with audio support using Rays and Beeps.
|
|
70
|
+
email: xordog@gmail.com
|
|
71
|
+
executables: []
|
|
72
|
+
extensions:
|
|
73
|
+
- Rakefile
|
|
74
|
+
extra_rdoc_files:
|
|
75
|
+
- ".doc/ext/rays-video/native.cpp"
|
|
76
|
+
- ".doc/ext/rays-video/video.cpp"
|
|
77
|
+
files:
|
|
78
|
+
- ".doc/ext/rays-video/native.cpp"
|
|
79
|
+
- ".doc/ext/rays-video/video.cpp"
|
|
80
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
|
81
|
+
- ".github/workflows/release-gem.yml"
|
|
82
|
+
- ".github/workflows/tag.yml"
|
|
83
|
+
- ".github/workflows/test.yml"
|
|
84
|
+
- ".github/workflows/utils.rb"
|
|
85
|
+
- CONTRIBUTING.md
|
|
86
|
+
- ChangeLog.md
|
|
87
|
+
- Gemfile
|
|
88
|
+
- LICENSE
|
|
89
|
+
- README.md
|
|
90
|
+
- Rakefile
|
|
91
|
+
- VERSION
|
|
92
|
+
- ext/rays-video/defs.h
|
|
93
|
+
- ext/rays-video/extconf.rb
|
|
94
|
+
- ext/rays-video/native.cpp
|
|
95
|
+
- ext/rays-video/video.cpp
|
|
96
|
+
- include/rays-video.h
|
|
97
|
+
- include/rays-video/ruby.h
|
|
98
|
+
- include/rays-video/ruby/video.h
|
|
99
|
+
- include/rays/video.h
|
|
100
|
+
- lib/rays-video.rb
|
|
101
|
+
- lib/rays-video/ext.rb
|
|
102
|
+
- lib/rays-video/extension.rb
|
|
103
|
+
- lib/rays/video.rb
|
|
104
|
+
- rays-video.gemspec
|
|
105
|
+
- src/ios/video.mm
|
|
106
|
+
- src/ios/video_audio_in.h
|
|
107
|
+
- src/ios/video_audio_in.mm
|
|
108
|
+
- src/osx/video.mm
|
|
109
|
+
- src/osx/video_audio_in.h
|
|
110
|
+
- src/osx/video_audio_in.mm
|
|
111
|
+
- src/sdl/video.cpp
|
|
112
|
+
- src/sdl/video_audio_in.cpp
|
|
113
|
+
- src/video.cpp
|
|
114
|
+
- src/video.h
|
|
115
|
+
- src/video_audio_in.h
|
|
116
|
+
- src/win32/video.cpp
|
|
117
|
+
- src/win32/video_audio_in.cpp
|
|
118
|
+
- test/helper.rb
|
|
119
|
+
- test/test_video.rb
|
|
120
|
+
homepage: https://github.com/xord/rays-video
|
|
121
|
+
licenses:
|
|
122
|
+
- MIT
|
|
123
|
+
metadata: {}
|
|
124
|
+
post_install_message:
|
|
125
|
+
rdoc_options: []
|
|
126
|
+
require_paths:
|
|
127
|
+
- lib
|
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - ">="
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: 3.0.0
|
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - ">="
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0'
|
|
138
|
+
requirements: []
|
|
139
|
+
rubygems_version: 3.4.19
|
|
140
|
+
signing_key:
|
|
141
|
+
specification_version: 4
|
|
142
|
+
summary: Video support for Rays.
|
|
143
|
+
test_files:
|
|
144
|
+
- test/helper.rb
|
|
145
|
+
- test/test_video.rb
|