wiretap 0.1 → 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.
- data/README +2 -1
- data/ext/Makefile +27 -24
- data/ext/audio_format.cpp +10 -8
- data/ext/charstream.h +41 -0
- data/ext/extconf.rb +8 -10
- data/ext/frame_io.cpp +120 -0
- data/ext/frame_io.h +45 -0
- data/ext/image_format.cpp +49 -169
- data/ext/image_io.cpp +466 -0
- data/ext/image_io.h +73 -0
- data/ext/node.cpp +71 -48
- data/ext/nodeframes.cpp +36 -34
- data/ext/nodemetadata.cpp +21 -3
- data/ext/server.cpp +2 -2
- data/ext/serverlist.cpp +20 -8
- data/ext/wiretap.cpp +11 -8
- data/ext/wiretap.h +17 -13
- data/lib/wiretap.rb +65 -5
- data/test_new/common.rb +8 -0
- data/{test/wiretap-images → test_new/fixtures/img/ppm-8bit}/01.ppm +0 -0
- data/test_new/fixtures/raw/cube_2k_12bitP_1f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_2k_8bit_1f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_10bit_5f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_10bit_5f/1.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_10bit_5f/2.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_10bit_5f/3.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_10bit_5f/4.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitP_5f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitP_5f/1.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitP_5f/2.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitP_5f/3.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitP_5f/4.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitU_5f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitU_5f/1.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitU_5f/2.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitU_5f/3.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_12bitU_5f/4.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/0.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/1.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/2.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/3.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/4.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/5.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/6.stoneimage +0 -0
- data/test_new/fixtures/raw/cube_SD_8bit_8f/7.stoneimage +0 -0
- data/{test/wiretap-images/b1.stonesound → test_new/fixtures/raw-snd/simple.stonesound} +0 -0
- data/{test/wiretap-images/output.wav → test_new/fixtures/snd/simple-wave.wav} +0 -0
- data/test_new/test_audio_conversions.rb +28 -0
- data/test_new/test_image_conversions.rb +132 -0
- data/test_new/test_parts/connect_to_test_host.rb +27 -0
- data/test_new/test_parts/constants.rb +7 -0
- data/test_new/test_parts/create_test_project.rb +37 -0
- data/test_new/test_parts/raw_formats_and_uploads.rb +170 -0
- data/test_new/test_parts/server_list.rb +20 -0
- data/test_new/test_parts/simple_node_lookup_and_browsing.rb +76 -0
- data/test_new/test_suite.rb +70 -0
- data/{test/convert.rb → test_new/test_thread_worker.rb} +2 -3
- metadata +71 -61
- data/ext/bmp.cpp +0 -65
- data/ext/image.h +0 -27
- data/ext/ppm.cpp +0 -132
- data/ext/sgi.cpp +0 -69
- data/test/audio.rb +0 -27
- data/test/image.rb +0 -101
- data/test/read_frames.rb +0 -142
- data/test/wiretap-images/32bit.stoneimage +0 -621
- data/test/wiretap-images/36bit.stoneimage +0 -1036
- data/test/wiretap-images/48bit.stoneimage +1 -800
- data/test/wiretap-images/a.stoneimage +0 -0
- data/test/wiretap-images/a0.stoneimage +0 -0
- data/test/wiretap-images/a1.stoneimage +0 -0
- data/test/wiretap-images/a2.stoneimage +0 -0
- data/test/wiretap-images/a3.stoneimage +0 -0
- data/test/wiretap-images/a4.stoneimage +0 -0
- data/test/wiretap-images/importable-seq/00000001.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000002.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000003.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000004.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000005.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000006.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000007.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000008.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000009.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000010.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000011.ppm +0 -0
- data/test/wiretap-images/importable-seq/00000012.ppm +0 -0
- data/test/wiretap-images/monsters_001.tif +0 -0
- data/test/wiretap-images/monsters_002.tif +0 -0
- data/test/wiretap-images/monsters_003.tif +0 -0
- data/test/wiretap-images/output.mov +0 -0
- data/test/write_frames.rb +0 -82
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module TestSimpleNodeLookupAndBrowsing
|
|
2
|
+
def test_03_simple_node_lookup_and_browsing
|
|
3
|
+
@root = @server.root
|
|
4
|
+
assert_kind_of Wiretap::Node, @root, "Root of the server should be a Wiretap::RootNode"
|
|
5
|
+
assert_equal @test_host + '//', @root.uri, "Root of the server should have the uri of #{@test_host}//"
|
|
6
|
+
assert_equal '/', @root.id, "Root of the server should have the ID of /"
|
|
7
|
+
|
|
8
|
+
assert_kind_of Wiretap::NodeChildren, @root.children, "Root should have NodeChildren as children"
|
|
9
|
+
assert_equal @root.children.length, @root.children.count, "NodeChildre#length should equal NodeChildren#count"
|
|
10
|
+
assert (@root.children.length > 0), "Root should have at least 1 node"
|
|
11
|
+
assert_equal @server, @root.server, "A root node should provide the handle to the server that it is attached to"
|
|
12
|
+
|
|
13
|
+
assert !@root.reel?, "Root node is not a reel"
|
|
14
|
+
assert !@root.library?, "Root node is not a library"
|
|
15
|
+
assert !@root.clip?, "Root node is not a clip"
|
|
16
|
+
assert !@root.project?, "Root node is not a project"
|
|
17
|
+
assert_nil @root.parent, "Root node should not have a parent"
|
|
18
|
+
|
|
19
|
+
assert_kind_of Wiretap::Volume, @root.children[0], "The first child should be a Volume node"
|
|
20
|
+
assert_kind_of Wiretap::Volume, @root[0], "The first child should be a Volume node and accessible via parent[]"
|
|
21
|
+
|
|
22
|
+
@volume = @root.children[0]
|
|
23
|
+
assert_equal "stonefs", @volume.name, "Most likely the first child should be called /stonefs :-)"
|
|
24
|
+
assert_kind_of Wiretap::Node, @volume.parent, "The parent method should return the node above this one"
|
|
25
|
+
assert_equal "#{@test_host}//", @volume.parent.uri, "And this should be the root node of the server"
|
|
26
|
+
assert_equal @server, @volume.server, "A volume should provide the handle to the server that it is attached to"
|
|
27
|
+
|
|
28
|
+
@project = @volume.children[0]
|
|
29
|
+
assert_kind_of Wiretap::Project, @project, "The first node of the volume should be a project"
|
|
30
|
+
|
|
31
|
+
assert_equal @project, @volume[0], "The child node shoud be accessible directly via []"
|
|
32
|
+
assert_kind_of Wiretap::NodeChildren, @project.children, "Project should have NodeChildren as children"
|
|
33
|
+
|
|
34
|
+
assert_kind_of String, @project.name, "The project should have a name and it should be a String"
|
|
35
|
+
proj_uri = "#{@test_host}//#{@volume.name}/#{@project.name}"
|
|
36
|
+
assert_equal proj_uri, @project.uri, "The project should have the uri #{proj_uri}"
|
|
37
|
+
|
|
38
|
+
assert_equal @project, @server.find("//#{@volume.name}/#{@project.name}"), "The server should support name-based lookup via uri"
|
|
39
|
+
assert_equal @project, @volume.find(@project.name), "The volume node should support name-based lookup via name"
|
|
40
|
+
|
|
41
|
+
@root_meta, @project_meta = @root.metadata, @project.meta
|
|
42
|
+
|
|
43
|
+
assert_kind_of Wiretap::NodeMetaData, @root_meta
|
|
44
|
+
assert_kind_of Array, @root_meta.streams
|
|
45
|
+
assert @root_meta.streams.empty?, "Root metadata streams are most likely empty"
|
|
46
|
+
|
|
47
|
+
assert_kind_of Wiretap::NodeMetaData, @project_meta
|
|
48
|
+
assert @root_meta.streams.empty?, "Project metadata streams are most likely empty (unless this is a 2007 server)"
|
|
49
|
+
|
|
50
|
+
# Now try to find a project that has some libraries
|
|
51
|
+
@volume.children.each do | p |
|
|
52
|
+
@project = p and break if p.children.any?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# We proceed only of this project HAS children (by occasion)
|
|
56
|
+
unless @project
|
|
57
|
+
$stderr.puts "We could not find any projects that have libraries on #{@test_host}, so the test will be skipped"
|
|
58
|
+
return
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
@lib = @project[0]
|
|
62
|
+
assert_equal @lib, @project.children[0], "node[i] and node.children[i] should return equivalent results"
|
|
63
|
+
assert_kind_of Wiretap::Library, @lib, "A child of a project can only be a Library"
|
|
64
|
+
|
|
65
|
+
assert @lib.library?, "Library node is a library"
|
|
66
|
+
assert !@lib.reel?, "Library node is not a reel"
|
|
67
|
+
assert !@lib.clip?, "Library node is not a clip"
|
|
68
|
+
assert !@lib.project?, "Library node is not a project"
|
|
69
|
+
assert_equal @project, @lib.parent, "Library node should have the project as parent"
|
|
70
|
+
assert_kind_of String, @lib.name, "Library node should have a name in a String"
|
|
71
|
+
|
|
72
|
+
return if @lib.name.empty?
|
|
73
|
+
assert_equal @lib, @project[0], "The library fetched by index from the project should be equivalent to the one we retrieved"
|
|
74
|
+
assert_equal @lib, @project[@lib.name], "The library fetched by name from the project should be equivalent to the one we retrieved"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/common'
|
|
2
|
+
|
|
3
|
+
class RubyWiretapTest < Test::Unit::TestCase
|
|
4
|
+
OLD_SERVER = " This functionality is only supported in hosts running 2007."
|
|
5
|
+
CLIP_TYPE_METHODS = %(
|
|
6
|
+
node?
|
|
7
|
+
clip?
|
|
8
|
+
root?
|
|
9
|
+
desktop?
|
|
10
|
+
project?
|
|
11
|
+
library?
|
|
12
|
+
user?
|
|
13
|
+
audio?
|
|
14
|
+
hires?
|
|
15
|
+
lowres?
|
|
16
|
+
slate?
|
|
17
|
+
)
|
|
18
|
+
HAS_OPEN = (RUBY_PLATFORM =~ /darwin/i) ? true : false
|
|
19
|
+
|
|
20
|
+
modules_dir = File.dirname(__FILE__) + '/test_parts'
|
|
21
|
+
Dir.entries(modules_dir).grep(/\.rb$/).each do | p |
|
|
22
|
+
require File.join(modules_dir, p)
|
|
23
|
+
modname = p.gsub(/\.rb$/, '')
|
|
24
|
+
self.send(:include, Inflector::camelize("test_" + modname).constantize)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def setup
|
|
28
|
+
@test_host = ENV['RUBY_WIRETAP_TEST_HOST'] || 'Backdraft'
|
|
29
|
+
@test_project_name = ENV['RUBY_WIRETAP_TEST_PROJECT'] || "RubyWiretapTest"
|
|
30
|
+
@test_library = ENV['RUBY_WIRETAP_TEST_LIBRARY'] || "Default"
|
|
31
|
+
@test_run = ENV['RUBY_WIRETAP_TEST_RUN'] || Time.now.to_i.to_s
|
|
32
|
+
|
|
33
|
+
@server = Wiretap::Server.new(@test_host)
|
|
34
|
+
@volume = @server.root[0]
|
|
35
|
+
@deletables = []
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def teardown
|
|
40
|
+
begin
|
|
41
|
+
@server.close! if @server
|
|
42
|
+
rescue Wiretap::Error # if the connecton has been closed in the test itself
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
while(elem = @deletables.pop) do
|
|
46
|
+
begin
|
|
47
|
+
# We run destroy twice here to ascertain that it does not do anything nasty
|
|
48
|
+
elem.destroy
|
|
49
|
+
elem.destroy
|
|
50
|
+
rescue Wiretap::Error
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_07_ppm_uploads
|
|
56
|
+
# flunk
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
def open_images_in_viewer(imgs, specialty = nil)
|
|
61
|
+
if imgs.any?
|
|
62
|
+
$stderr.puts "Don't be scared - after a few seconds some images will open in your image editor. Take care to examine them
|
|
63
|
+
carefully - you should see a rotating color cube! #{specialty}"
|
|
64
|
+
sleep 5
|
|
65
|
+
imgs.each do | c |
|
|
66
|
+
`open #{c}` if HAS_OPEN
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../lib/wiretap'
|
|
|
3
3
|
require 'benchmark'
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class
|
|
6
|
+
class ThreadWorkerTest < Test::Unit::TestCase
|
|
7
7
|
|
|
8
8
|
def setup
|
|
9
9
|
@temp_outdir = "/tmp/wiretap_tests/thread_convert"
|
|
@@ -11,8 +11,7 @@ class ConvertTest < Test::Unit::TestCase
|
|
|
11
11
|
`mkdir -p #{@temp_outdir} 2>/dev/null`
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
def test_convert
|
|
14
|
+
def xtest_convert
|
|
16
15
|
num = 1
|
|
17
16
|
iteration = 0
|
|
18
17
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
|
-
rubygems_version: 0.
|
|
2
|
+
rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: wiretap
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version:
|
|
7
|
-
date: 2007-01
|
|
6
|
+
version: 0.1.2
|
|
7
|
+
date: 2007-02-01 00:00:00 +01:00
|
|
8
8
|
summary: WireTap driver
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
11
|
-
email:
|
|
11
|
+
email: tools@hecticelectric.nl
|
|
12
12
|
homepage: http://rubyforge.org/projects/wiretap/
|
|
13
13
|
rubyforge_project: wiretap
|
|
14
14
|
description:
|
|
@@ -25,72 +25,82 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
|
25
25
|
platform: ruby
|
|
26
26
|
signing_key:
|
|
27
27
|
cert_chain:
|
|
28
|
-
post_install_message:
|
|
29
28
|
authors:
|
|
30
|
-
- Max Lapshin
|
|
29
|
+
- Max Lapshin, Julik Tarkhanov, HecticElectric BV
|
|
31
30
|
files:
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
31
|
+
- test_new/common.rb
|
|
32
|
+
- test_new/fixtures
|
|
33
|
+
- test_new/test_audio_conversions.rb
|
|
34
|
+
- test_new/test_image_conversions.rb
|
|
35
|
+
- test_new/test_parts
|
|
36
|
+
- test_new/test_suite.rb
|
|
37
|
+
- test_new/test_thread_worker.rb
|
|
38
|
+
- test_new/fixtures/img
|
|
39
|
+
- test_new/fixtures/raw
|
|
40
|
+
- test_new/fixtures/raw-snd
|
|
41
|
+
- test_new/fixtures/snd
|
|
42
|
+
- test_new/fixtures/img/ppm-8bit
|
|
43
|
+
- test_new/fixtures/img/sgi-16bit-rle
|
|
44
|
+
- test_new/fixtures/img/sgi-16bit-std
|
|
45
|
+
- test_new/fixtures/img/sgi-8bit-rle
|
|
46
|
+
- test_new/fixtures/img/sgi-8bit-std
|
|
47
|
+
- test_new/fixtures/img/ppm-8bit/01.ppm
|
|
48
|
+
- test_new/fixtures/raw/cube_2k_12bitP_1f
|
|
49
|
+
- test_new/fixtures/raw/cube_2k_8bit_1f
|
|
50
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f
|
|
51
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f
|
|
52
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f
|
|
53
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f
|
|
54
|
+
- test_new/fixtures/raw/cube_2k_12bitP_1f/0.stoneimage
|
|
55
|
+
- test_new/fixtures/raw/cube_2k_8bit_1f/0.stoneimage
|
|
56
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f/0.stoneimage
|
|
57
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f/1.stoneimage
|
|
58
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f/2.stoneimage
|
|
59
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f/3.stoneimage
|
|
60
|
+
- test_new/fixtures/raw/cube_SD_10bit_5f/4.stoneimage
|
|
61
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f/0.stoneimage
|
|
62
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f/1.stoneimage
|
|
63
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f/2.stoneimage
|
|
64
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f/3.stoneimage
|
|
65
|
+
- test_new/fixtures/raw/cube_SD_12bitP_5f/4.stoneimage
|
|
66
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f/0.stoneimage
|
|
67
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f/1.stoneimage
|
|
68
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f/2.stoneimage
|
|
69
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f/3.stoneimage
|
|
70
|
+
- test_new/fixtures/raw/cube_SD_12bitU_5f/4.stoneimage
|
|
71
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/0.stoneimage
|
|
72
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/1.stoneimage
|
|
73
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/2.stoneimage
|
|
74
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/3.stoneimage
|
|
75
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/4.stoneimage
|
|
76
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/5.stoneimage
|
|
77
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/6.stoneimage
|
|
78
|
+
- test_new/fixtures/raw/cube_SD_8bit_8f/7.stoneimage
|
|
79
|
+
- test_new/fixtures/raw-snd/simple.stonesound
|
|
80
|
+
- test_new/fixtures/snd/simple-wave.wav
|
|
81
|
+
- test_new/test_parts/connect_to_test_host.rb
|
|
82
|
+
- test_new/test_parts/constants.rb
|
|
83
|
+
- test_new/test_parts/create_test_project.rb
|
|
84
|
+
- test_new/test_parts/raw_formats_and_uploads.rb
|
|
85
|
+
- test_new/test_parts/server_list.rb
|
|
86
|
+
- test_new/test_parts/simple_node_lookup_and_browsing.rb
|
|
78
87
|
- lib/wiretap.rb
|
|
79
88
|
- ext/audio_format.cpp
|
|
80
|
-
- ext/
|
|
89
|
+
- ext/charstream.h
|
|
81
90
|
- ext/extconf.rb
|
|
82
91
|
- ext/format.cpp
|
|
83
|
-
- ext/
|
|
92
|
+
- ext/frame_io.cpp
|
|
93
|
+
- ext/frame_io.h
|
|
84
94
|
- ext/image_format.cpp
|
|
95
|
+
- ext/image_io.cpp
|
|
96
|
+
- ext/image_io.h
|
|
85
97
|
- ext/Makefile
|
|
86
98
|
- ext/node.cpp
|
|
87
99
|
- ext/nodechildren.cpp
|
|
88
100
|
- ext/nodeframes.cpp
|
|
89
101
|
- ext/nodemetadata.cpp
|
|
90
|
-
- ext/ppm.cpp
|
|
91
102
|
- ext/server.cpp
|
|
92
103
|
- ext/serverlist.cpp
|
|
93
|
-
- ext/sgi.cpp
|
|
94
104
|
- ext/testserver
|
|
95
105
|
- ext/thread_worker.cpp
|
|
96
106
|
- ext/wiretap.cpp
|
|
@@ -106,11 +116,11 @@ files:
|
|
|
106
116
|
- README
|
|
107
117
|
- LICENSE
|
|
108
118
|
test_files:
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
119
|
+
- test_new/common.rb
|
|
120
|
+
- test_new/test_audio_conversions.rb
|
|
121
|
+
- test_new/test_image_conversions.rb
|
|
122
|
+
- test_new/test_suite.rb
|
|
123
|
+
- test_new/test_thread_worker.rb
|
|
114
124
|
rdoc_options:
|
|
115
125
|
- --main=README
|
|
116
126
|
- --line-numbers
|
data/ext/bmp.cpp
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#include "wiretap.h"
|
|
2
|
-
static void write_int32_le_value(int value, bitstream_writer writer, void *data) {
|
|
3
|
-
writer(data, value >> 0 & 0xFF);
|
|
4
|
-
writer(data, value >> 8 & 0xFF);
|
|
5
|
-
writer(data, value >> 16& 0xFF);
|
|
6
|
-
writer(data, value >> 24& 0xFF);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
static void write_int16_le_value(short value, bitstream_writer writer, void *data) {
|
|
10
|
-
writer(data, value >> 0 & 0xFF);
|
|
11
|
-
writer(data, value >> 8 & 0xFF);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
void write_string_value(char* value, bitstream_writer writer, void *data) {
|
|
15
|
-
while(value && *value) {
|
|
16
|
-
writer(data, *value);
|
|
17
|
-
value++;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
static int wiretap_write_bmp_header(int width, int height, bitstream_writer writer, void *data) {
|
|
23
|
-
const int header_size = 54;
|
|
24
|
-
int size = header_size + width * height * 3;
|
|
25
|
-
write_string_value("BM", writer, data); // 0,1
|
|
26
|
-
write_int32_le_value(size, writer, data); // 2,3,4,5
|
|
27
|
-
write_int32_le_value(0, writer, data); // 6,7,8,9: reserved data
|
|
28
|
-
write_int32_le_value(header_size, writer, data); // 10,11,12,13: Image header ends.
|
|
29
|
-
write_int32_le_value(40, writer, data); // 14,15,16,17: Image information size
|
|
30
|
-
write_int32_le_value(width, writer, data); // 18,19,20,21: Width
|
|
31
|
-
write_int32_le_value(height, writer, data); // 22,23,24,25: Height
|
|
32
|
-
write_int16_le_value(1, writer, data); // 26,27: Number of color planes
|
|
33
|
-
write_int16_le_value(24, writer, data); // 28,29: Bits per pixel. We write only 24 bit images
|
|
34
|
-
write_int32_le_value(0, writer, data); // 30,31,32,33: Compression schema. None
|
|
35
|
-
write_int32_le_value(width*height*3, writer, data); // 34,35,36,37: raw data size. 3 bytes per pixel.
|
|
36
|
-
write_int32_le_value(2834, writer, data); // 38,39,40,41: horisontal resolution. Perhaprs 72 dpi. I don't know
|
|
37
|
-
write_int32_le_value(2834, writer, data); // 42,43,44,45: vertical resolution
|
|
38
|
-
write_int32_le_value(0, writer, data); // 46,47,48,49: number of colors
|
|
39
|
-
write_int32_le_value(0, writer, data); // 50,51,52,53: number of important colors
|
|
40
|
-
return 0;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
bool wiretap_write_frame_bmp(int width, int height, int bpp, unsigned char* frame, FILE* f) {
|
|
46
|
-
filestream stream;
|
|
47
|
-
memset(&stream, 0, sizeof(stream));
|
|
48
|
-
stream.f = f;
|
|
49
|
-
|
|
50
|
-
wiretap_write_bmp_header(width, height, write_to_file, (void *)&stream);
|
|
51
|
-
wiretap_write_image_data(width, height, bpp, frame, write_to_file_bgr, (void *)&stream);
|
|
52
|
-
|
|
53
|
-
return 0;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
void write_to_file_bgr(void *stream, unsigned char channel) {
|
|
57
|
-
filestream* data = (filestream *)stream;
|
|
58
|
-
data->buffer[2 - data->count] = channel;
|
|
59
|
-
data->count++;
|
|
60
|
-
if(data->count == 3) {
|
|
61
|
-
fwrite(data->buffer, sizeof(data->buffer), 1, data->f);
|
|
62
|
-
data->count = 0;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
data/ext/image.h
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
#ifndef _WIRETAP_IMAGE_H_
|
|
2
|
-
#define _WIRETAP_IMAGE_H_
|
|
3
|
-
|
|
4
|
-
typedef struct _memstream {
|
|
5
|
-
unsigned char* ptr;
|
|
6
|
-
} memstream;
|
|
7
|
-
typedef struct _filestream {
|
|
8
|
-
int count;
|
|
9
|
-
unsigned char buffer[3];
|
|
10
|
-
FILE* f;
|
|
11
|
-
} filestream;
|
|
12
|
-
|
|
13
|
-
void write_to_memory(void *stream, unsigned char channel);
|
|
14
|
-
void write_to_file(void* file, unsigned char channel);
|
|
15
|
-
void write_to_file_bgr(void* file, unsigned char channel);
|
|
16
|
-
typedef void (*bitstream_writer)(void *data, unsigned char channel);
|
|
17
|
-
void write_string_value(char* value, bitstream_writer writer, void *data);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
bool wiretap_write_frame_bmp(int width, int height, int bpp, unsigned char* frame, FILE* f);
|
|
21
|
-
bool wiretap_write_frame_sgi(int width, int height, int bpp, unsigned char* frame, FILE* f);
|
|
22
|
-
|
|
23
|
-
int wiretap_write_image_data(int width, int height, int bpp, const unsigned char* frame, bitstream_writer writer, void *data);
|
|
24
|
-
|
|
25
|
-
#endif /* _WIRETAP_IMAGE_H_ */
|
|
26
|
-
|
|
27
|
-
|
data/ext/ppm.cpp
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
#include "wiretap.h"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
static int extract_int(FILE* f) {
|
|
6
|
-
char buffer[256];
|
|
7
|
-
int pos = 0;
|
|
8
|
-
char c;
|
|
9
|
-
while(!feof(f)) {
|
|
10
|
-
c = fgetc(f);
|
|
11
|
-
if(!isalnum(c)) {
|
|
12
|
-
break;
|
|
13
|
-
}
|
|
14
|
-
buffer[pos++] = c;
|
|
15
|
-
}
|
|
16
|
-
buffer[pos] = '\0';
|
|
17
|
-
return atoi(buffer);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
bool ppm_read_format(FILE* f, WireTapClipFormat* format) {
|
|
21
|
-
extract_int(f);
|
|
22
|
-
|
|
23
|
-
int width = extract_int(f);
|
|
24
|
-
if(format) {
|
|
25
|
-
format->setWidth(width);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
int height = extract_int(f);
|
|
29
|
-
if(format) {
|
|
30
|
-
format->setHeight(height);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
int maxval = extract_int(f);
|
|
34
|
-
if(maxval > 255) {
|
|
35
|
-
THROW("Decoding 16bit PPM files is not supported");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if(format) {
|
|
39
|
-
format->setBitsPerPixel(24);
|
|
40
|
-
format->setNumChannels(3);
|
|
41
|
-
format->setFrameBufferSize((format->bitsPerPixel()/8)*width*height);
|
|
42
|
-
format->setFrameRate(25);
|
|
43
|
-
WireTapClipFormat::ScanFormat scan_format = format->strToScanFormat("progressive");
|
|
44
|
-
format->setScanFormat(scan_format);
|
|
45
|
-
format->setFormatTag("rgb");
|
|
46
|
-
format->setMetaDataTag("IFFFS_XML");
|
|
47
|
-
format->setMetaData("<IFFFS_XML Version=\"1.0\"><ClipData></ClipData></IFFFS_XML>");
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
bool ppm_read_image(FILE* f, unsigned char* frame, int width, int height, int bpp) {
|
|
55
|
-
size_t row_size = width*3;
|
|
56
|
-
|
|
57
|
-
for(int i = 0; i < height; i++) {
|
|
58
|
-
size_t read_bytes = fread(frame + (height - 1 - i)*row_size, 1, row_size, f);
|
|
59
|
-
if(read_bytes != row_size) {
|
|
60
|
-
rb_warn("Read %d bytes, expected %d. Step: %d", read_bytes, row_size, i);
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/*
|
|
70
|
-
* Extract Wiretap clip format from PPM file. The format will inherit the bit depths of the image and allocate
|
|
71
|
-
* the framebuffer size into which the imported image will fit
|
|
72
|
-
*
|
|
73
|
-
* @clipformat = Wiretap::PPM.format("test/wiretap-images/01.ppm")
|
|
74
|
-
*/
|
|
75
|
-
static VALUE wiretap_get_ppm_format(VALUE self, VALUE input) {
|
|
76
|
-
|
|
77
|
-
FILE* infile = fopen(CSTR(input), "r");
|
|
78
|
-
if(!infile) {
|
|
79
|
-
THROW("Couldn't open file %s for reading", CSTR(input));
|
|
80
|
-
}
|
|
81
|
-
WireTapClipFormat format;
|
|
82
|
-
if(!ppm_read_format(infile, &format)) {
|
|
83
|
-
fclose(infile);
|
|
84
|
-
return Qfalse;
|
|
85
|
-
}
|
|
86
|
-
fclose(infile);
|
|
87
|
-
VALUE clip_format = rb_funcall(cClipFormat, rb_intern("new"), 0);
|
|
88
|
-
DATA_PTR(clip_format) = new WireTapClipFormat(format);
|
|
89
|
-
return clip_format;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/*
|
|
93
|
-
* Convert a PPM file to an SGI file
|
|
94
|
-
*
|
|
95
|
-
* Wiretap::PPM.to_sgi("test/wiretap-images/01.ppm", "/tmp/a.sgi")
|
|
96
|
-
*/
|
|
97
|
-
static VALUE wiretap_convert_ppm_to_sgi(VALUE self, VALUE input, VALUE output) {
|
|
98
|
-
Check_Type(input, T_STRING);
|
|
99
|
-
Check_Type(output, T_STRING);
|
|
100
|
-
FILE* infile = fopen(CSTR(input), "r");
|
|
101
|
-
if(!infile) {
|
|
102
|
-
THROW("Couldn't open file %s for read", CSTR(input));
|
|
103
|
-
}
|
|
104
|
-
WireTapClipFormat format;
|
|
105
|
-
if(!ppm_read_format(infile, &format)) {
|
|
106
|
-
fclose(infile);
|
|
107
|
-
rb_warn("Couldn't read PPM format from file %s", CSTR(input));
|
|
108
|
-
return Qfalse;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
unsigned char frame[format.frameBufferSize()];
|
|
112
|
-
if(!ppm_read_image(infile, frame, format.width(), format.height(), format.bitsPerPixel())) {
|
|
113
|
-
fclose(infile);
|
|
114
|
-
rb_warn("Couldn't read PPM image data from file %s", CSTR(input));
|
|
115
|
-
return Qfalse;
|
|
116
|
-
}
|
|
117
|
-
fclose(infile);
|
|
118
|
-
|
|
119
|
-
if(!wiretap_write_image_frame(format.width(), format.height(), format.bitsPerPixel(), frame, CSTR(output))) {
|
|
120
|
-
rb_warn("Couldn't dump image to file %s", CSTR(output));
|
|
121
|
-
return Qfalse;
|
|
122
|
-
}
|
|
123
|
-
return Qtrue;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
void Init_ppm() {
|
|
128
|
-
mPPM = rb_define_module_under(mWiretap, "PPM");
|
|
129
|
-
|
|
130
|
-
rb_define_singleton_method(mPPM, "to_sgi", VALUEFUNC(wiretap_convert_ppm_to_sgi), 2);
|
|
131
|
-
rb_define_singleton_method(mPPM, "format", VALUEFUNC(wiretap_get_ppm_format), 1);
|
|
132
|
-
}
|
data/ext/sgi.cpp
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
#include "wiretap.h"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
static void write_channel(int width, int height, int number, unsigned char* frame, FILE* f) {
|
|
5
|
-
std::auto_ptr<unsigned char> buffer(new unsigned char[width*height]);
|
|
6
|
-
for(int i = 0; i < width*height; i++) {
|
|
7
|
-
buffer.get()[i] = frame[3*i + number];
|
|
8
|
-
}
|
|
9
|
-
fwrite(buffer.get(), width*height, 1, f);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static void write_int32_be_value(int value, bitstream_writer writer, void *data) {
|
|
13
|
-
writer(data, value >> 24& 0xFF);
|
|
14
|
-
writer(data, value >> 16& 0xFF);
|
|
15
|
-
writer(data, value >> 8 & 0xFF);
|
|
16
|
-
writer(data, value >> 0 & 0xFF);
|
|
17
|
-
}
|
|
18
|
-
static void write_int16_be_value(short value, bitstream_writer writer, void *data) {
|
|
19
|
-
writer(data, value >> 8 & 0xFF);
|
|
20
|
-
writer(data, value >> 0 & 0xFF);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static int wiretap_write_sgi_header(int width, int height, bitstream_writer writer, void *data) {
|
|
24
|
-
//const int header_size = 512;
|
|
25
|
-
const int header_padding = 404;
|
|
26
|
-
const int magic = 474;
|
|
27
|
-
|
|
28
|
-
write_int16_be_value(magic, writer, data); // Magic 474
|
|
29
|
-
writer(data, 0); // 0 for uncompressed
|
|
30
|
-
writer(data, 1); // 1 for 1 byte per channel. 24 bit picture
|
|
31
|
-
write_int16_be_value(3, writer, data); // 3 dimensions - one plain image with multiple channels
|
|
32
|
-
write_int16_be_value(width, writer, data);
|
|
33
|
-
write_int16_be_value(height, writer, data);
|
|
34
|
-
write_int16_be_value(3, writer, data); // 3 for RGB mode: 3 channels
|
|
35
|
-
write_int32_be_value(0, writer, data); // minimum pixel value
|
|
36
|
-
write_int32_be_value(0xFF, writer, data); // maximum pixel value
|
|
37
|
-
write_int32_be_value(0, writer, data); // dummy
|
|
38
|
-
|
|
39
|
-
char image_name[80] = "Ruby wiretap encoded";
|
|
40
|
-
for(size_t i = 0; i < sizeof(image_name); i++) {
|
|
41
|
-
writer(data, image_name[i]);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
write_int32_be_value(0, writer, data); // colormap is in normal mode (0)
|
|
45
|
-
for(int i = 0; i < header_padding; i++) {
|
|
46
|
-
writer(data, 0);
|
|
47
|
-
}
|
|
48
|
-
return 0;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
bool wiretap_write_frame_sgi(int width, int height, int bpp, unsigned char* frame, FILE* f) {
|
|
53
|
-
filestream stream;
|
|
54
|
-
memstream mem;
|
|
55
|
-
std::auto_ptr<unsigned char> buffer(new unsigned char[width*height*3]);
|
|
56
|
-
memset(&stream, 0, sizeof(stream));
|
|
57
|
-
memset(&mem, 0, sizeof(mem));
|
|
58
|
-
mem.ptr = buffer.get();
|
|
59
|
-
stream.f = f;
|
|
60
|
-
|
|
61
|
-
wiretap_write_sgi_header(width, height, write_to_file, (void *)&stream);
|
|
62
|
-
wiretap_write_image_data(width, height, bpp, frame, write_to_memory, (void *)&mem);
|
|
63
|
-
|
|
64
|
-
write_channel(width, height, 0, buffer.get(), f);
|
|
65
|
-
write_channel(width, height, 1, buffer.get(), f);
|
|
66
|
-
write_channel(width, height, 2, buffer.get(), f);
|
|
67
|
-
return 0;
|
|
68
|
-
}
|
|
69
|
-
|
data/test/audio.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'test/unit'
|
|
2
|
-
require File.dirname(__FILE__) + '/../lib/wiretap'
|
|
3
|
-
|
|
4
|
-
class AudioTest < Test::Unit::TestCase
|
|
5
|
-
|
|
6
|
-
def setup
|
|
7
|
-
@samples = 48000
|
|
8
|
-
@rate = 48000.0
|
|
9
|
-
@bps = 32
|
|
10
|
-
@temp_outdir = "/tmp/wiretap_tests"
|
|
11
|
-
FileUtils.mkdir(@temp_outdir) rescue nil
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_read_audio
|
|
15
|
-
File.open(File.dirname(__FILE__) + "/wiretap-images/b1.stonesound") do |f|
|
|
16
|
-
Wiretap.dump_audio_data(@samples, @rate, @bps, :dlaudio_float, f.read(@samples*@bps/8), "#{@temp_outdir}/b1.aiff")
|
|
17
|
-
assert_equal "#{@temp_outdir}/b1.aiff: IFF data, AIFF audio\n", `file #{@temp_outdir}/b1.aiff`
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def test_get_format
|
|
22
|
-
assert @format = Wiretap.audio_format(File.dirname(__FILE__) + "/wiretap-images/output.wav")
|
|
23
|
-
assert_equal 16, @format.bps
|
|
24
|
-
assert_equal 48000.0, @format.rate
|
|
25
|
-
assert_equal 97280, @format.samples
|
|
26
|
-
end
|
|
27
|
-
end
|