wiretap 0.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|