hornetseye-qt4 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/Rakefile +56 -17
  2. data/ext/xvwidget.cc +32 -32
  3. metadata +3 -3
data/Rakefile CHANGED
@@ -7,15 +7,15 @@ require 'rake/loaders/makefile'
7
7
  require 'rbconfig'
8
8
 
9
9
  PKG_NAME = 'hornetseye-qt4'
10
- PKG_VERSION = '0.1.0'
10
+ PKG_VERSION = '0.1.1'
11
+ CFG = RbConfig::CONFIG
11
12
  CXX = ENV[ 'CXX' ] || 'g++'
12
- STRIP = ENV[ 'STRIP' ] || 'strip'
13
13
  RB_FILES = FileList[ 'lib/**/*.rb' ]
14
14
  CC_FILES = FileList[ 'ext/*.cc' ]
15
15
  HH_FILES = FileList[ 'ext/*.hh' ] + FileList[ 'ext/*.tcc' ]
16
16
  TC_FILES = FileList[ 'test/tc_*.rb' ]
17
17
  TS_FILES = FileList[ 'test/ts_*.rb' ]
18
- SO_FILE = "ext/#{PKG_NAME.tr '\-', '_'}.so"
18
+ SO_FILE = "ext/#{PKG_NAME.tr '\-', '_'}.#{CFG[ 'DLEXT' ]}"
19
19
  PKG_FILES = [ 'Rakefile', 'README.md', 'COPYING', '.document' ] +
20
20
  RB_FILES + CC_FILES + HH_FILES + TS_FILES + TC_FILES
21
21
  BIN_FILES = [ 'README.md', 'COPYING', '.document', SO_FILE ] +
@@ -27,17 +27,18 @@ EMAIL = %q{jan@wedesoft.de}
27
27
  HOMEPAGE = %q{http://wedesoft.github.com/hornetseye-qt4/}
28
28
 
29
29
  OBJ = CC_FILES.ext 'o'
30
- $CXXFLAGS = ENV[ 'CXXFLAGS' ] || ''
31
- $CXXFLAGS = "#{$CXXFLAGS} -fPIC -DNDEBUG -DQT_SHARED -I/usr/include/qt4"
32
- if RbConfig::CONFIG[ 'rubyhdrdir' ]
33
- $CXXFLAGS = "#{$CXXFLAGS} -I#{RbConfig::CONFIG[ 'rubyhdrdir' ]} " +
34
- "-I#{RbConfig::CONFIG[ 'rubyhdrdir' ]}/#{RbConfig::CONFIG[ 'arch' ]}"
30
+ $CXXFLAGS = "-DNDEBUG -DHAVE_CONFIG_H -D__STDC_CONSTANT_MACROS #{CFG[ 'CPPFLAGS' ]} #{CFG[ 'CFLAGS' ]} -I/usr/include/qt4"
31
+ if CFG[ 'rubyhdrdir' ]
32
+ $CXXFLAGS = "#{$CXXFLAGS} -I#{CFG[ 'rubyhdrdir' ]} " +
33
+ "-I#{CFG[ 'rubyhdrdir' ]}/#{CFG[ 'arch' ]}"
35
34
  else
36
- $CXXFLAGS += "#{$CXXFLAGS} -I#{RbConfig::CONFIG[ 'archdir' ]}"
35
+ $CXXFLAGS = "#{$CXXFLAGS} -I#{CFG[ 'archdir' ]}"
37
36
  end
38
- $LIBRUBYARG = RbConfig::CONFIG[ 'LIBRUBYARG' ]
39
- $SITELIBDIR = RbConfig::CONFIG[ 'sitelibdir' ]
40
- $SITEARCHDIR = RbConfig::CONFIG[ 'sitearchdir' ]
37
+ $LIBRUBYARG = "-L#{CFG[ 'libdir' ]} #{CFG[ 'LIBRUBYARG' ]} #{CFG[ 'LDFLAGS' ]} " +
38
+ "#{CFG[ 'SOLIBS' ]} #{CFG[ 'DLDLIBS' ]}"
39
+ $SITELIBDIR = CFG[ 'sitelibdir' ]
40
+ $SITEARCHDIR = CFG[ 'sitearchdir' ]
41
+ $LDSHARED = CFG[ 'LDSHARED' ][ CFG[ 'LDSHARED' ].index( ' ' ) .. -1 ]
41
42
 
42
43
  task :default => :all
43
44
 
@@ -45,8 +46,7 @@ desc 'Compile Ruby extension (default)'
45
46
  task :all => [ SO_FILE ]
46
47
 
47
48
  file SO_FILE => OBJ do |t|
48
- sh "#{CXX} -shared -o #{t.name} #{OBJ} -lX11 -lXv -lQtGui -lQtCore #{$LIBRUBYARG}"
49
- sh "#{STRIP} --strip-all #{t.name}"
49
+ sh "#{CXX} -shared -o #{t.name} #{OBJ} -lswscale -lX11 -lXv -lQtGui -lQtCore #{$LIBRUBYARG}"
50
50
  end
51
51
 
52
52
  task :test => [ SO_FILE ]
@@ -73,6 +73,45 @@ task :uninstall do
73
73
  end
74
74
  end
75
75
 
76
+ desc 'Create config.h'
77
+ task :config_h => 'ext/config.h'
78
+
79
+ def check_program
80
+ f_base_name = 'rakeconf'
81
+ begin
82
+ File.open( "#{f_base_name}.cc", 'w' ) { |f| yield f }
83
+ `#{CXX} -S #{$CXXFLAGS} -c -o #{f_base_name}.o #{f_base_name}.cc 2>&1 >> rake.log`
84
+ $?.exitstatus == 0
85
+ ensure
86
+ File.delete *Dir.glob( "#{f_base_name}.*" )
87
+ end
88
+ end
89
+
90
+ def check_c_header( name )
91
+ check_program do |c|
92
+ c.puts <<EOS
93
+ extern "C" {
94
+ #include <#{name}>
95
+ }
96
+ int main(void) { return 0; }
97
+ EOS
98
+ end
99
+ end
100
+
101
+ file 'ext/config.h' do |t|
102
+ s = "/* config.h. Generated from Rakefile by rake. */\n"
103
+ # need to compile with -D__STDC_CONSTANT_MACROS
104
+ if check_c_header 'libswscale/swscale.h'
105
+ s << "#define HAVE_LIBSWSCALE_INCDIR 1\n"
106
+ else
107
+ unless check_c_header 'ffmpeg/swscale.h'
108
+ raise 'Cannot find swscale.h header file'
109
+ end
110
+ s << "#undef HAVE_LIBSWSCALE_INCDIR\n"
111
+ end
112
+ File.open( t.name, 'w' ) { |f| f.puts s }
113
+ end
114
+
76
115
  Rake::TestTask.new do |t|
77
116
  t.libs << 'ext'
78
117
  t.test_files = TC_FILES
@@ -172,8 +211,8 @@ rule '.o' => '.cc' do |t|
172
211
  sh "#{CXX} #{$CXXFLAGS} -c -o #{t.name} #{t.source}"
173
212
  end
174
213
 
175
- file ".depends.mf" do |t|
176
- sh "g++ -MM #{$CXXFLAGS} #{CC_FILES.join ' '} | " +
214
+ file ".depends.mf" => :config_h do |t|
215
+ sh "g++ -MM #{CC_FILES.join ' '} | " +
177
216
  "sed -e :a -e N -e 's/\\n/\\$/g' -e ta | " +
178
217
  "sed -e 's/ *\\\\\\$ */ /g' -e 's/\\$/\\n/g' | sed -e 's/^/ext\\//' > #{t.name}"
179
218
  end
@@ -183,5 +222,5 @@ end
183
222
  import ".depends.mf"
184
223
 
185
224
  CLEAN.include 'ext/*.o'
186
- CLOBBER.include SO_FILE, 'doc', '.yardoc', '.depends.mf'
225
+ CLOBBER.include SO_FILE, 'doc', '.yardoc', '.depends.mf', 'ext/config.h'
187
226
 
@@ -13,6 +13,16 @@
13
13
 
14
14
  You should have received a copy of the GNU General Public License
15
15
  along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ #ifdef HAVE_CONFIG_H
17
+ #include "config.h"
18
+ #endif
19
+ extern "C" {
20
+ #ifndef HAVE_LIBSWSCALE_INCDIR
21
+ #include <ffmpeg/swscale.h>
22
+ #else
23
+ #include <libswscale/swscale.h>
24
+ #endif
25
+ }
16
26
  #ifndef NDEBUG
17
27
  #include <iostream>
18
28
  #include <iomanip>
@@ -325,38 +335,28 @@ FramePtr XvManager::alignYV12( FramePtr frame )
325
335
  #endif
326
336
  FramePtr dest( new Frame( "YV12",
327
337
  m_xvImage->width, m_xvImage->height ) );
328
- const char
329
- *src_y = frame->data();
330
- const signed char
331
- *src_v = (const signed char *)src_y + widtha * height,
332
- *src_u = src_v + width2a * height2;
333
- unsigned char
334
- *dest_y = (unsigned char *)dest->data();
335
- signed char
336
- *dest_v = (signed char *)dest_y + m_xvImage->offsets[1],
337
- *dest_u = (signed char *)dest_y + m_xvImage->offsets[2];
338
- for ( int y=0; y<height; y+=2 ) {
339
- for ( int x=0; x<width; x+=2 ) {
340
- dest_y[ 0] = src_y[ 0];
341
- dest_y[ 1] = src_y[ 1];
342
- dest_y[m_xvImage->pitches[0] ] = src_y[widtha ];
343
- dest_y[m_xvImage->pitches[0]+1] = src_y[widtha+1];
344
- *dest_v = *src_v;
345
- *dest_u = *src_u;
346
- src_y += 2;
347
- src_u++;
348
- src_v++;
349
- dest_y += 2;
350
- dest_u++;
351
- dest_v++;
352
- };
353
- src_y += 2 * widtha - width;
354
- src_v += width2a - width2;
355
- src_u += width2a - width2;
356
- dest_y += 2 * m_xvImage->pitches[0] - width;
357
- dest_v += m_xvImage->pitches[1] - width2;
358
- dest_u += m_xvImage->pitches[2] - width2;
359
- };
338
+ uint8_t *sourceData[4];
339
+ int sourceLineSize[4];
340
+ sourceData[0] = (uint8_t *)frame->data();
341
+ sourceData[2] = (uint8_t *)frame->data() + widtha * height;
342
+ sourceData[1] = (uint8_t *)sourceData[2] + width2a * height2;
343
+ sourceLineSize[0] = widtha;
344
+ sourceLineSize[1] = width2a;
345
+ sourceLineSize[2] = width2a;
346
+ uint8_t *destData[4];
347
+ int destLineSize[4];
348
+ destData[0] = (uint8_t *)dest->data();
349
+ destData[2] = (uint8_t *)dest->data() + m_xvImage->offsets[1];
350
+ destData[1] = (uint8_t *)dest->data() + m_xvImage->offsets[2];
351
+ destLineSize[0] = m_xvImage->pitches[0];
352
+ destLineSize[1] = m_xvImage->pitches[2];
353
+ destLineSize[2] = m_xvImage->pitches[1];
354
+ SwsContext *swsContext = sws_getContext( width, height, PIX_FMT_YUV420P,
355
+ width, height, PIX_FMT_YUV420P,
356
+ SWS_FAST_BILINEAR, 0, 0, 0 );
357
+ sws_scale( swsContext, sourceData, sourceLineSize, 0,
358
+ height, destData, destLineSize );
359
+ sws_freeContext( swsContext );
360
360
  retVal = dest;
361
361
  } else
362
362
  retVal = frame;
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jan Wedekind
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-15 00:00:00 +01:00
17
+ date: 2010-12-21 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency