0
0
Fork 0
haikuports/net-www/gnash/patches/gnash-0.8.4-haiku.patch

1506 lines
44 KiB
Diff

diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/adipe.h cp-gn084/adipe.h
--- clean-gn084/adipe.h 1970-01-01 00:00:00.000000000 +0000
+++ cp-gn084/adipe.h 2009-03-13 18:10:19.000000000 +0000
@@ -0,0 +1,15 @@
+#ifndef __ADIPE_H_
+#define __ADIPE_H_
+
+
+#define QQ_LVL 6
+
+#define QQ(x) do { \
+ if ( (x) <= QQ_LVL ) \
+ fprintf(stderr,"QQ %s \t%d \t%s\n", \
+ __FILE__, __LINE__, \
+ __PRETTY_FUNCTION__); \
+ } while(0)
+
+#endif
+
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/backend/render_handler_agg.cpp cp-gn084/backend/render_handler_agg.cpp
--- clean-gn084/backend/render_handler_agg.cpp 2009-03-13 18:18:09.000000000 +0000
+++ cp-gn084/backend/render_handler_agg.cpp 2009-03-13 18:10:21.000000000 +0000
@@ -1658,13 +1658,19 @@
const std::vector<agg::path_storage>& agg_paths,
const std::vector<line_style> &line_styles, const cxform& cx,
const matrix& linestyle_matrix, scanline_type& sl) {
+ //QQQ
+ return ;
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
assert(m_pixf.get());
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if (m_drawing_mask) // Flash ignores lines in mask /definitions/
return;
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if ( _clipbounds.empty() ) return;
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
// TODO: While walking the paths for filling them, remember when a path
// has a line style associated, so that we avoid walking the paths again
@@ -1677,6 +1683,7 @@
/ 2.0f
* get_stroke_scale();
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
// AGG stuff
typedef agg::rasterizer_scanline_aa<> ras_type;
@@ -1684,62 +1691,81 @@
renderer_base rbase(*m_pixf);
agg::renderer_scanline_aa_solid<
agg::renderer_base<PixelFormat> > ren_sl(rbase); // solid fills
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
for (unsigned int cno=0; cno<_clipbounds_selected.size(); ++cno) {
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
const geometry::Range2d<int>* bounds = _clipbounds_selected[cno];
apply_clip_box<ras_type> (ras, *bounds);
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
int current_subshape=0;
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
for (size_t pno=0, pcount=paths.size(); pno<pcount; ++pno) {
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
const path& this_path_gnash = paths[pno];
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
agg::path_storage &this_path_agg =
const_cast<agg::path_storage&>(agg_paths[pno]);
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if (this_path_gnash.m_new_shape)
++current_subshape;
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if ((subshape_id>=0) && (current_subshape!=subshape_id)) {
// Skip this path as it is not part of the requested sub-shape.
continue;
}
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if (this_path_gnash.m_line==0) {
// Skip this path as it contains no line style
continue;
}
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
agg::conv_curve< agg::path_storage > curve(this_path_agg); // to render curves
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
agg::conv_stroke< agg::conv_curve < agg::path_storage > >
stroke(curve); // to get an outline
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
const line_style& lstyle = line_styles[this_path_gnash.m_line-1];
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
int thickness = lstyle.getThickness();
if (!thickness) stroke.width(1); // hairline
else if ( (!lstyle.scaleThicknessVertically()) && (!lstyle.scaleThicknessHorizontally()) )
{
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
stroke.width(TWIPS_TO_PIXELS(thickness));
}
else
{
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
if ( (!lstyle.scaleThicknessVertically()) || (!lstyle.scaleThicknessHorizontally()) )
{
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
LOG_ONCE( log_unimpl(_("Unidirectionally scaled strokes in AGG renderer (we'll scale by the scalable one)")) );
}
stroke.width(std::max(1.0f, thickness*stroke_scale));
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
}
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
// TODO: support endCapStyle
// TODO: When lstyle.noClose==0 and the start and end point matches,
// then render a real join instead of the caps.
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
switch (lstyle.startCapStyle()) {
case CAP_NONE : stroke.line_cap(agg::butt_cap); break;
case CAP_SQUARE : stroke.line_cap(agg::square_cap); break;
@@ -1752,15 +1778,21 @@
default : case JOIN_ROUND : stroke.line_join(agg::round_join);
}
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
stroke.miter_limit(lstyle.miterLimitFactor());
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
ras.reset();
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
ras.add_path(stroke);
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
rgba color = cx.transform(lstyle.get_color());
ren_sl.color(agg::rgba8_pre(color.m_r, color.m_g, color.m_b, color.m_a));
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
agg::render_scanlines(ras, sl, ren_sl);
+ fprintf(stderr, "%s %s %d\n", __FILE__, __PRETTY_FUNCTION__, __LINE__);
}
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/gui/dump.cpp cp-gn084/gui/dump.cpp
--- clean-gn084/gui/dump.cpp 2009-03-13 18:18:06.000000000 +0000
+++ cp-gn084/gui/dump.cpp 2009-03-13 18:10:31.000000000 +0000
@@ -28,6 +28,9 @@
#include "log.h"
+#include <fcntl.h>
+#include <sys/mman.h>
+
#include "gui.h"
#include "rc.h"
#include "sound_handler.h"
@@ -89,7 +92,8 @@
_timeout(0),
_framecount(0),
_bpp(32),
- _pixelformat("BGRA32")
+ _pixelformat("BGRA32"),
+ _ble_data(NULL)
{
if (loop) {
std::cerr << "# WARNING: Gnash was told to loop the movie" << std::endl;
@@ -102,6 +106,13 @@
DumpGui::~DumpGui()
{
std::cout << "FRAMECOUNT=" << _framecount << "" << std::endl;
+ if (_ble_data != NULL)
+ {
+ if (munmap(_ble_data, _ble_data_size) == -1)
+ perror("munmap");
+ if (close(_ble_fd) == -1)
+ perror("close");
+ }
}
bool
@@ -200,7 +211,9 @@
}
// advance movie now
- Gui::advance_movie(this);
+ if (_sh1->fEnableRendering)
+ Gui::advance_movie(this);
+
writeFrame();
// check if we've reached a timeout
@@ -245,9 +258,13 @@
void
DumpGui::writeFrame()
{
- assert(_fileStream);
- if (_fileStream.is_open()) {
- _fileStream.write(reinterpret_cast<char*>(_offscreenbuf.get()), _offscreenbuf_size);
+ //assert(_fileStream);
+ //if (_fileStream.is_open()) {
+ if (1) {
+ //memmove(_ble_data, _offscreenbuf.get(), _offscreenbuf_size);
+ //if (msync(_ble_data, _offscreenbuf_size, MS_SYNC) == -1)
+ //perror("msync");
+ // _fileStream.write(reinterpret_cast<char*>(_offscreenbuf.get()), _offscreenbuf_size);
_framecount++;
}
else {
@@ -263,13 +280,40 @@
// This should never be empty.
assert (!_fileOutput.empty());
- _fileStream.open(_fileOutput.c_str());
+ //_fileStream.open(_fileOutput.c_str());
- if (!_fileStream) {
- log_error(_("Unable to write file '%s'."), _fileOutput);
- std::cerr << "# FATAL: Unable to write file '" << _fileOutput << "'" << std::endl;
- exit(1);
- }
+ //if (!_fileStream) {
+ //log_error(_("Unable to write file '%s'."), _fileOutput);
+ //std::cerr << "# FATAL: Unable to write file '" << _fileOutput << "'" << std::endl;
+ //exit(1);
+ //}
+
+ //_ble_fd = open(_fileOutput.c_str(), O_RDWR);
+ char *endptr;
+ _ble_fd = strtol(_fileOutput.c_str(), &endptr, 10);
+ if (*endptr)
+ {
+ std::cerr << "nie-liczba przy -D" << std::endl;
+ exit(1);
+ }
+ if (_ble_fd == -1)
+ {
+ std::cerr << "vid fd error" << std::endl;
+ exit(1);
+ }
+ std::cerr << "vid fd is " << _ble_fd << std::endl;
+ int pagesize = getpagesize();
+ _ble_data_size = ((_offscreenbuf_size + pagesize - 1) / pagesize)
+ * pagesize;
+ _ble_data_size = 0x1000 * 3000; //XXX
+ _ble_data = (char*)mmap((caddr_t)0, _ble_data_size, PROT_READ|PROT_WRITE,
+ MAP_SHARED, _ble_fd, 0);
+ _sh1 = reinterpret_cast<struct Sh1_t*>(_ble_data);
+ if (_ble_data == (void*) -1)
+ {
+ perror("mmap");
+ exit(1);
+ }
// Yes, this should go to cout. The user needs to know this
// information in order to process the file. Print out in a
@@ -281,6 +325,7 @@
}
+
void
DumpGui::setRenderHandlerSize(int width, int height)
{
@@ -288,7 +333,8 @@
assert(height > 0);
assert(_agg_renderer != NULL);
- if (_offscreenbuf.get() && (width == _width) && (height == _height)) {
+ //if (_offscreenbuf.get() && (width == _width) && (height == _height)) {
+ if (_offscreenbuf && (width == _width) && (height == _height)) {
return;
}
@@ -304,7 +350,9 @@
if (newBufferSize != _offscreenbuf_size) {
try {
- _offscreenbuf.reset(new unsigned char[newBufferSize]);
+ //_offscreenbuf.reset(new unsigned char[newBufferSize]);
+ //_offscreenbuf=((unsigned char*)_ble_data);
+ _offscreenbuf= reinterpret_cast<unsigned char*>(&_sh1->fRest);
log_debug("DUMP-AGG: %i bytes offscreen buffer allocated", newBufferSize);
}
catch (std::bad_alloc &e)
@@ -322,7 +370,8 @@
}
static_cast<render_handler_agg_base *> (_agg_renderer)->init_buffer
- (_offscreenbuf.get(),
+ //(_offscreenbuf.get(),
+ (_offscreenbuf,
_offscreenbuf_size,
_width,
_height,
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/gui/dump.h cp-gn084/gui/dump.h
--- clean-gn084/gui/dump.h 2009-03-13 18:18:06.000000000 +0000
+++ cp-gn084/gui/dump.h 2009-03-13 18:10:31.000000000 +0000
@@ -32,6 +32,15 @@
typedef bool (*callback_t)(void*, int, void *data);
+
+/* Copy in plugin.cpp */
+struct Sh1_t
+{
+ int fEnableRendering;
+ char fRest[1];
+};
+
+
class DSOEXPORT DumpGui : public Gui
{
public:
@@ -70,7 +79,8 @@
// is destroyed on reset and when it goes out of scope (including on
// stack unwinding after an exception), so there is no need to delete
// it.
- boost::scoped_array<unsigned char> _offscreenbuf;
+ //boost::scoped_array<unsigned char> _offscreenbuf;
+ unsigned char * _offscreenbuf;
int _offscreenbuf_size; /* size of window (bytes) */
@@ -82,6 +92,11 @@
std::string _fileOutput; /* path to output file */
std::ofstream _fileStream; /* stream for output file */
+ FILE *_file;
+ char *_ble_data;
+ struct Sh1_t * _sh1;
+ unsigned _ble_data_size;
+ int _ble_fd;
void init_dumpfile(); /* convenience method to create dump file */
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/gui/gnash.cpp cp-gn084/gui/gnash.cpp
--- clean-gn084/gui/gnash.cpp 2009-03-13 18:18:06.000000000 +0000
+++ cp-gn084/gui/gnash.cpp 2009-03-13 18:10:34.000000000 +0000
@@ -28,6 +28,8 @@
#include "arg_parser.h"
#include "utility.h" // for clamp
+extern "C" void debugger(const char*);
+
#ifdef HAVE_FFMPEG_AVCODEC_H
extern "C" {
# include "ffmpeg/avcodec.h"
@@ -427,9 +429,26 @@
}
+void sighandler(int sno)
+{
+ pid_t pid;
+ pid = getpid();
+ fprintf(stderr, "signal %d, pid %d\n", sno, pid);
+
+ debugger("signal");
+}
+
int
gnash_main(int argc, char *argv[])
{
+ //debugger("elo");
+ struct sigaction sa;
+ sa.sa_flags=0;
+ sa.sa_handler=sighandler;
+ sigemptyset(&sa.sa_mask);
+ if (sigaction(SIGSEGV, &sa, 0) != 0)
+ { fprintf(stderr, "error\n"); abort(); }
+
gnash::Player player;
// Enable native language support, i.e. internationalization
@@ -461,3 +480,4 @@
return player.run(argc, argv, infiles.front().c_str(), url.c_str());
}
+
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libbase/shm.cpp cp-gn084/libbase/shm.cpp
--- clean-gn084/libbase/shm.cpp 2009-03-13 18:18:04.000000000 +0000
+++ cp-gn084/libbase/shm.cpp 2009-03-13 18:10:46.000000000 +0000
@@ -136,7 +136,10 @@
return true;
#else
-#error "You need SYSV Shared memory support to use this option"
+//#error "You need SYSV Shared memory support to use this option"
+/* QQQ */
+std::cerr << "QQQ " << __func__ << " " << __LINE__ << std::endl;
+raise(SIGABRT);
#endif // end of USE_SYSV_SHM
}
@@ -223,10 +226,13 @@
# ifdef __riscos__
if (0)
# else
- _shmhandle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL,
- PAGE_READWRITE, 0,
- _size, filespec);
- if (_shmhandle <= 0)
+ //_shmhandle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL,
+ // PAGE_READWRITE, 0,
+ // _size, filespec);
+/* QQQ */
+std::cerr << "QQQ " << __func__ << " " << __LINE__ << std::endl;
+raise(SIGABRT);
+ //if (_shmhandle <= 0)
# endif
# endif // end of HAVE_SHMGET
#else
@@ -249,9 +255,12 @@
# ifdef __riscos__
// do nothing, we never get here.
# else
- _shmhandle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL,
- PAGE_READWRITE, 0,
- _size, filespec);
+ //_shmhandle = CreateFileMapping ((HANDLE) 0xFFFFFFFF, NULL,
+ // PAGE_READWRITE, 0,
+ // _size, filespec);
+ /* QQQ */
+ std::cerr << "QQQ " << __func__ << " " << __LINE__ << std::endl;
+ raise(SIGABRT);
# endif
# endif
# else
@@ -327,8 +336,11 @@
return false;
}
# else
- _addr = (char *)MapViewOfFile (_shmhandle, FILE_MAP_ALL_ACCESS,
- 0, 0, _size);
+ //_addr = (char *)MapViewOfFile (_shmhandle, FILE_MAP_ALL_ACCESS,
+ // 0, 0, _size);
+ /* QQQ */
+ std::cerr << "QQQ " << __func__ << " " << __LINE__ << std::endl;
+ raise(SIGABRT);
# endif
#endif
#endif
@@ -380,9 +392,12 @@
# ifdef __riscos__
_addr = _addr;
# else
- CloseHandle(_shmhandle);
- _addr = (char *)MapViewOfFile (_shmhandle, FILE_MAP_ALL_ACCESS,
- 0, 0, _size);
+ //CloseHandle(_shmhandle);
+ //_addr = (char *)MapViewOfFile (_shmhandle, FILE_MAP_ALL_ACCESS,
+ // 0, 0, _size);
+ /* QQQ */
+ std::cerr << "QQQ " << __func__ << " " << __LINE__ << std::endl;
+ raise(SIGABRT);
# endif
# endif // end of HAVE_SHMAT
}
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libbase/utf8.h cp-gn084/libbase/utf8.h
--- clean-gn084/libbase/utf8.h 2009-03-13 18:18:04.000000000 +0000
+++ cp-gn084/libbase/utf8.h 2009-03-13 18:10:46.000000000 +0000
@@ -21,8 +21,13 @@
#ifndef UTF8_H
#define UTF8_H
+
#include "dsodefs.h" // For DSOEXPORT
#include <string>
+namespace std
+{
+ typedef std::basic_string<wchar_t> wstring;
+};
#include <boost/cstdint.hpp> // for C99 int types
/// Utilities to convert between std::string and std::wstring.
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libbase/utility.h cp-gn084/libbase/utility.h
--- clean-gn084/libbase/utility.h 2009-03-13 18:18:03.000000000 +0000
+++ cp-gn084/libbase/utility.h 2009-03-13 18:10:46.000000000 +0000
@@ -61,7 +61,7 @@
// Using a possible built-in pi constant M_PI, which is not in
// the C++ standard, has no conceivable advantage, so we will use this
// one. Make it as accurate as you like.
-static const double PI = 3.14159265358979323846;
+//static const double PI = 3.14159265358979323846;
// Commonly-used inlined mathematical functions are defined in
// namespace gnash::utility so that it's clear where they
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/asobj/String_as.cpp cp-gn084/libcore/asobj/String_as.cpp
--- clean-gn084/libcore/asobj/String_as.cpp 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/asobj/String_as.cpp 2009-03-13 18:12:16.000000000 +0000
@@ -1,3 +1,4 @@
+#include <adipe.h>
// string.cpp: ActionScript "String" class, for Gnash.
//
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -165,8 +166,10 @@
as_object(getStringInterface()),
_string(s)
{
- std::wstring wstr = utf8::decodeCanonicalString(_string, _vm.getSWFVersion());
- init_member(NSV::PROP_LENGTH, wstr.size(), as_prop_flags::dontDelete|as_prop_flags::dontEnum); // can override though
+ //QQ(2);
+ //std::wstring wstr = utf8::decodeCanonicalString(_string, _vm.getSWFVersion());
+ init_member(NSV::PROP_LENGTH, /*wstr.size()*/s.size() * sizeof(wchar_t), as_prop_flags::dontDelete|as_prop_flags::dontEnum); // can override though
+ //QQ(2);
}
@@ -785,21 +788,35 @@
static as_value
string_ctor(const fn_call& fn)
{
+ //QQ(1);
std::string str;
if (fn.nargs )
{
+ //QQ(3);
str = fn.arg(0).to_string();
+ //QQ(3);
}
if ( ! fn.isInstantiation() )
{
- return as_value(str);
+ //QQ(3);
+ as_value ret = as_value(str);
+ //if (QQ_LVL >= 4)
+ //fprintf(stderr, "str: '%s'\n", str.c_str());
+ //QQ(3);
+ return ret;
}
- boost::intrusive_ptr<String_as> obj = new String_as(str);
+ //QQ(3);
+ String_as *er = new String_as(str);
+ //QQ(3);
+ boost::intrusive_ptr<String_as> obj = er;
+ //QQ(3);
- return as_value(obj.get());
+ as_value ret = as_value(obj.get());
+ //QQ(1);
+ return ret;
}
static boost::intrusive_ptr<builtin_function>
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/edit_text_character.h cp-gn084/libcore/edit_text_character.h
--- clean-gn084/libcore/edit_text_character.h 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/edit_text_character.h 2009-03-13 18:12:18.000000000 +0000
@@ -18,6 +18,12 @@
#ifndef GNASH_EDIT_TEXT_CHARACTER_H
#define GNASH_EDIT_TEXT_CHARACTER_H
+#include <string>
+namespace std
+{
+ typedef std::basic_string<wchar_t> wstring;
+};
+
#include "character.h" // for inheritance
#include "edit_text_character_def.h" // for inlines and typedefs
#include "styles.h" // for fill_style and line_style
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/movie_root.cpp cp-gn084/libcore/movie_root.cpp
--- clean-gn084/libcore/movie_root.cpp 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/movie_root.cpp 2009-03-13 18:12:19.000000000 +0000
@@ -921,7 +921,9 @@
// Get current mouse coordinates
boost::int32_t x, y, buttons;
- get_mouse_state(x, y, buttons);
+ int X,Y,B;
+ get_mouse_state(X, Y, B);
+ x=X;y=Y;buttons=B;
point world_mouse(PIXELS_TO_TWIPS(x), PIXELS_TO_TWIPS(y));
boost::int32_t xoffset = world_mouse.x - world_origin.x;
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/swf_function.cpp cp-gn084/libcore/swf_function.cpp
--- clean-gn084/libcore/swf_function.cpp 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/swf_function.cpp 2009-03-13 18:12:30.000000000 +0000
@@ -1,3 +1,5 @@
+extern "C" void debugger(const char*);
+#include <adipe.h>
//
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
//
@@ -371,7 +373,14 @@
try
{
//ActionExec exec(*m_action_buffer, *our_env, m_start_pc, m_length, fn.result, m_with_stack, m_is_function2);
+ static int QQi = 0;
+ ++ QQi;
+ //QQ(2);
+ //fprintf(stderr, "QQi = %d\n", QQi);
+ //if (QQi == 95)
+ //debugger("QQi == 95");
ActionExec exec(*this, *our_env, &result, fn.this_ptr.get());
+ //QQ(2);
exec();
}
catch (ActionLimitException& ale) // expected and sane
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/vm/ASHandlers.cpp cp-gn084/libcore/vm/ASHandlers.cpp
--- clean-gn084/libcore/vm/ASHandlers.cpp 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/vm/ASHandlers.cpp 2009-03-13 18:12:36.000000000 +0000
@@ -1,3 +1,5 @@
+#include <adipe.h>
+extern "C" void debugger(const char*);
// ASHandlers.cpp: ActionScript handlers, for Gnash.
//
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -441,6 +443,11 @@
catch (ActionParserException& e) {
log_swferror(_("Malformed action code: %s"), e.what());
}
+ catch (std::bad_cast &b)
+ {
+ fprintf(stderr, "error, type = %d\n", (int)type);
+ debugger("melo");
+ }
}
void
@@ -3314,6 +3321,11 @@
nargs = available_args;
}
+ //fprintf(stderr, "method name : %s\n", method_name.to_string().c_str());
+ //fprintf(stderr, "method object/func : %s\n", obj_value.to_string().c_str());
+ //fprintf(stderr, "method nargs: %d\n", nargs);
+
+
IF_VERBOSE_ACTION (
log_action(_(" method name: %s"), method_name);
@@ -3322,6 +3334,10 @@
);
std::string method_string = method_name.to_string();
+ if (strcmp("toLowerCase", method_name.to_string().c_str()) == 0)
+ method_string = "elomelo320";
+ if (strcmp("createTextField", method_name.to_string().c_str()) == 0)
+ method_string = "elomelo320";
as_value method_val;
boost::intrusive_ptr<as_object> obj = obj_value.to_object();
@@ -3418,19 +3434,25 @@
std::auto_ptr< std::vector<as_value> > args ( new std::vector<as_value> );
args->reserve(nargs);
for (size_t i=0; i<nargs; ++i) args->push_back(env.pop());
+ //QQ(2);
as_value result = call_method(method_val, &env, this_ptr,
args, super);
+ //QQ(2);
env.push(result);
+ //QQ(2);
// Now, if there was an exception, proceed to the end of the block.
if (result.is_exception())
{
+ //QQ(2);
thread.skipRemainingBuffer();
+ //QQ(2);
}
// This is to check stack status after call method
//log_debug(_("at doActionCallMethod() end, stack: ")); env.dump_stack();
+ //QQ(2);
}
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/libcore/vm/ActionExec.cpp cp-gn084/libcore/vm/ActionExec.cpp
--- clean-gn084/libcore/vm/ActionExec.cpp 2009-03-13 18:18:05.000000000 +0000
+++ cp-gn084/libcore/vm/ActionExec.cpp 2009-03-13 18:12:36.000000000 +0000
@@ -1,3 +1,5 @@
+extern "C" void debugger(const char*);
+#include <adipe.h>
// ActionExec.cpp: ActionScript execution, for Gnash.
//
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -264,7 +266,18 @@
break;
}
- ash.execute(static_cast<SWF::action_type>(action_id), *this);
+ //QQ(2);
+ static int QQi=0;
+ ++ QQi;
+ //fprintf(stderr, "ELO action_id = 0x%x\n", (int)action_id);
+ //fprintf(stderr, "%s \t%d QQi = %d\n", __FILE__, __LINE__, QQi);
+ //SWF::action_type nn = SWF::ACTION_SETREGISTER;
+ SWF::action_type mm = static_cast<SWF::action_type>(action_id);
+ //QQ(3);
+ //if (QQi == 19166)
+ //debugger("QQi == 19166");
+ ash.execute(mm, *this);
+ //QQ(2);
#if 1 // See bugs: #20974, #21069, #20996.
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/plugin/mozilla-sdk/include/npapi.h cp-gn084/plugin/mozilla-sdk/include/npapi.h
--- clean-gn084/plugin/mozilla-sdk/include/npapi.h 2009-03-13 18:18:08.000000000 +0000
+++ cp-gn084/plugin/mozilla-sdk/include/npapi.h 2009-03-13 18:12:56.000000000 +0000
@@ -23,6 +23,14 @@
#pragma pack(1)
#endif
+#ifdef __HAIKU__
+ typedef int Display;
+ typedef int Visual;
+ typedef int Colormap;
+ typedef int XEvent;
+ typedef int Region;
+#endif
+
#include "prtypes.h"
/* Copied from xp_core.h */
/* removed #ifdef for hpux defined in /usr/include/model.h */
@@ -85,8 +93,8 @@
#if defined(XP_UNIX)
# include <stdio.h>
# if defined(MOZ_X11)
-# include <X11/Xlib.h>
-# include <X11/Xutil.h>
+//# include <X11/Xlib.h>
+//# include <X11/Xutil.h>
# endif
#endif
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/plugin/mozilla-sdk/include/obsolete/protypes.h cp-gn084/plugin/mozilla-sdk/include/obsolete/protypes.h
--- clean-gn084/plugin/mozilla-sdk/include/obsolete/protypes.h 2009-03-13 18:18:08.000000000 +0000
+++ cp-gn084/plugin/mozilla-sdk/include/obsolete/protypes.h 2009-03-13 18:12:56.000000000 +0000
@@ -114,7 +114,8 @@
#if !defined(XP_BEOS) && !defined(VMS)
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
-typedef PRUint32 uint32;
+//typedef PRUint32 uint32;
+typedef unsigned long uint32;
#else
typedef unsigned long uint32;
#endif
@@ -153,7 +154,19 @@
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
&& !defined(HPUX)
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
-typedef PRInt32 int32;
+//typedef PRInt32 int32;
+typedef long int int32;
+#if 0
+ #ifdef _HACK_ELO
+ //typedef long int int32;
+ typedef long int int32_t;
+ #else
+ typedef int int32;
+ typedef int int32_t;
+ #endif
+ typedef unsigned int uint32_t;
+ typedef unsigned short int uint16_t;
+#endif
#else
typedef long int32;
#endif
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/plugin/plugin.cpp cp-gn084/plugin/plugin.cpp
--- clean-gn084/plugin/plugin.cpp 2009-03-13 18:18:08.000000000 +0000
+++ cp-gn084/plugin/plugin.cpp 2009-03-13 18:12:57.000000000 +0000
@@ -1,4 +1,4 @@
-//
+
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
//
// This program is free software; you can redistribute it and/or modify
@@ -16,11 +16,20 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+extern "C" const short unsigned int * __ctype_b;
+
+const short unsigned int * __ctype_b;
+struct _IO_FILE * stdin;
+
+
#ifdef HAVE_CONFIG_H
#include "gnashconfig.h"
#endif
#include <cstdlib> // getenv
+#include <pthread.h>
+#include <sys/mman.h>
+#include <fcntl.h>
#define MIME_TYPES_HANDLED "application/x-shockwave-flash"
// The name must be this value to get flash movies that check the
@@ -118,6 +127,7 @@
}
/// \brief Return the MIME Type description for this plugin.
+extern "C" char * NPP_GetMIMEDescription(void);
char*
NPP_GetMIMEDescription(void)
{
@@ -170,6 +180,7 @@
}
#endif // HAVE_XPCOM
+#if 0
/* Browser Functionality Checks */
NPError err = NPERR_NO_ERROR;
@@ -217,6 +228,7 @@
{
cout << "GTK2 supported in this browser" << endl;
}
+#endif
/*
Check for environment variables.
@@ -381,6 +393,8 @@
_streamfd(-1),
_ichan(0),
_ichanWatchId(0),
+ _bview(NULL),
+ _hostvidfd(-1),
_childpid(0),
_filefd(-1),
_name()
@@ -479,6 +493,16 @@
{
cout << "Shutting down" << endl;
+ _bview->CancelThread();
+
+ assert(_bview != NULL);
+ BWindow *bw = _bview->Window();
+ bw->LockLooper();
+ _bview->RemoveSelf();
+ bw->RemoveChild(_bview);
+ delete _bview;
+ bw->UnlockLooper();
+
if (_childpid > 0)
{
// it seems that waiting after a SIGINT hangs firefox
@@ -500,9 +524,233 @@
/// to setup the window. This may get called multiple times by each
/// instantiated object, so it can't do much but window specific
/// setup here.
+
+#include <typeinfo>
+#include <Window.h>
+#include <Region.h>
+#include <Bitmap.h>
+
+
+//FILE *fl;
+//int myBufferSz;
+//char *myBuffer;
+
+void EloView::Draw(BRect updateRect)
+{
+ (void)updateRect;
+ if (fShowing)
+ {
+ //fread(myBuffer, myBufferSz, 1, fl);
+ fBitmap->SetBits(reinterpret_cast<void*>(&fSh1->fRest),
+ fEloImgDataSz, 0, B_RGBA32);
+ MovePenTo(BPoint(0,0));
+ DrawBitmap(fBitmap); //XXX potrzebne ?
+ } else {
+ MovePenTo(BPoint(0,fHeight-5));
+ DrawString("Click to see Flash content");
+ }
+
+}
+
+
+EloView::EloView(char *name, int width, int height, int fd, nsPluginInstance *plugin)
+: BView(BRect(0,0,width-1,height-1), name, B_FOLLOW_ALL, B_WILL_DRAW),
+ fEloData(NULL),
+ fSh1(NULL),
+ fEloFd(fd),
+ fShowing(false),
+ fPlugin(plugin),
+ fWidth(width),
+ fHeight(height),
+ fExiting(0)
+{
+ if (fEloFd == -1) printf("fd zly!\n");
+ SetViewColor(255,126,0);
+ SetLowColor (255,126,0);
+
+ if (pthread_mutex_init(&fMxCnd.fMx, NULL) != 0)
+ printf("pthread_mutex_init error\n");
+ if (pthread_cond_init(&fMxCnd.fCnd, NULL) != 0)
+ printf("pthread_cond_init error\n");
+}
+
+
+void
+EloView::CancelThread()
+{
+ if (fShowing)
+ {
+ fShowing = false;
+ //if (pthread_cancel(fPt) != 0)
+ //printf("error pthread_cancel\n");
+ //pthread_cancel not implemented
+
+ if (pthread_mutex_lock(&fMxCnd.fMx) != 0)
+ printf("error pthread_mutex_lock\n");
+ fExiting = 1;
+ if (pthread_cond_wait(&fMxCnd.fCnd, &fMxCnd.fMx) != 0)
+ printf("error pthread_cond_wait\n");
+ if (pthread_mutex_unlock(&fMxCnd.fMx) != 0)
+ printf("error pthread_mutex_unlock\n");
+ }
+}
+
+EloView::~EloView()
+{
+ if (fShowing)
+ {
+ delete fBitmap;
+ fBitmap=0;
+ }
+
+ if (fEloData != NULL)
+ {
+ if (munmap(fEloData, fEloDataSz) == -1)
+ perror("munmap");
+ if (close(fEloFd) == -1)
+ perror("close");
+ }
+
+ CancelThread();
+
+ if (pthread_cond_destroy(&fMxCnd.fCnd) != 0)
+ printf("pthread_cond_destroy error\n");
+ if (pthread_mutex_destroy(&fMxCnd.fMx) != 0)
+ printf("pthread_mutex_destroy error\n");
+}
+
+
+void
+EloViewThread_cleanup(EloView::mx_cnd_t *mx_cnd)
+{
+ if (pthread_mutex_lock(&mx_cnd->fMx) != 0)
+ printf("error pthread_mutex_lock\n");
+ if (pthread_cond_signal(&mx_cnd->fCnd) != 0)
+ printf("error pthread_cond_signal\n");
+ if (pthread_mutex_unlock(&mx_cnd->fMx) != 0)
+ printf("error pthread_mutex_unlock\n");
+}
+
+
+void*
+EloViewThread(void *p)
+{
+ EloView *e = reinterpret_cast<EloView*>(p);
+ e->ThreadFunc();
+ return NULL;
+}
+
+
+void
+EloView::ThreadFunc()
+{
+ typedef void(*sadf)(void*);
+ pthread_cleanup_push((sadf)(EloViewThread_cleanup), &fMxCnd);
+
+ //if (pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) != 0)
+ //printf("error pthread_setcancelstate\n");
+ //if (pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) != 0)
+ //printf("error pthread_setcanceltype\n");
+ while (true)
+ {
+ //pthread_testcancel();
+ if (fExiting != 0)
+ pthread_exit(NULL);
+ usleep(40000);
+ LockLooper();
+
+ BRegion breg;
+ GetClippingRegion(&breg);
+ //if (breg.CountRects() != 0)
+ //fprintf(stderr, "countrects %d\n", breg.CountRects());
+
+ if (fSh1->fEnableRendering)
+ Invalidate();
+
+ fSh1->fEnableRendering = breg.CountRects() != 0;
+
+ UnlockLooper();
+
+ }
+
+ pthread_cleanup_pop(false);
+}
+
+
+void
+EloView::MouseDown(BPoint where)
+{
+ (void)where;
+ if (!fShowing) {
+ fPlugin->show_flash();
+ fBitmap = new BBitmap(BRect(0,0,fWidth-1, fHeight-1), B_RGBA32);
+ fEloImgDataSz = fWidth * fHeight * 4;
+ fEloDataSz = 300 * 0x1000;
+ SetViewColor(0,0,0);
+ fShowing = true;
+ if (fEloFd == -1)
+ printf("fd zly\n");
+ else {
+ fEloData = (char*)mmap((caddr_t)0, fEloDataSz,
+ PROT_READ|PROT_WRITE, MAP_SHARED, fEloFd, 0);
+ if (fEloData == (char*)-1)
+ perror("error mmap");
+ fSh1 = reinterpret_cast<struct Sh1_t*>(fEloData);
+ fSh1->fEnableRendering = true;
+ if (pthread_create(&fPt, NULL, EloViewThread, this) != 0)
+ printf("error pthread_create\n");
+ }
+ std::cerr << "mouse down" << std::endl;
+ }
+}
+
+
+
+//BView *bv;
NPError
nsPluginInstance::SetWindow(NPWindow* aWindow)
{
+ BView *bv = (reinterpret_cast<BView*>(aWindow->window));
+ BWindow *bw;
+ bw = bv->Window();
+ bw->Bounds().PrintToStream();
+
+ if (_hostvidfd == -1)
+ {
+ char nm[100];
+ nm[99]='\0';
+ strncpy(nm, "/tmp/gnashpluginXXXXXX", 99);
+ _hostvidfd = mkstemp(nm);
+ if (_hostvidfd == -1)
+ {
+ //XXX
+ cout << "mkstemp error" << endl;
+ return NPERR_GENERIC_ERROR ;
+ }
+ }
+
+ if (_bview != NULL)
+ {
+ _bview->CancelThread();
+
+ BWindow *bwin;
+ bwin = _bview->Window();
+ bwin->LockLooper();
+ _bview->RemoveSelf();
+ bwin->RemoveChild(_bview);
+ delete _bview;
+ bwin->UnlockLooper();
+ }
+
+ _bview = new EloView("mmello", aWindow->width, aWindow->height, _hostvidfd, this);
+
+
+ std::cout << "aWindow " << aWindow->width << "x"
+ << aWindow->height << std::endl;
+ //XXX should use windowless mode
+ //bw->AddChild(melo);
+ bv->AddChild(_bview);
+
if(!aWindow)
{
cout << __FUNCTION__ << ": ERROR: Window handle was bogus!" << endl;
@@ -588,7 +836,7 @@
}
#endif
- startProc(_window);
+ //startProc(_window);
return NPERR_NO_ERROR;
}
@@ -634,7 +882,7 @@
}
/// \brief Return how many bytes we can read into the buffer
-int32_t
+int32
nsPluginInstance::WriteReady(NPStream * /* stream */ )
{
#if 0
@@ -647,8 +895,8 @@
/// \brief Read the data stream from Mozilla/Firefox
///
/// For now we read the bytes and write them to a disk file.
-int32_t
-nsPluginInstance::Write(NPStream * /* stream */, int32_t /* offset */, int32_t len,
+int32
+nsPluginInstance::Write(NPStream * /* stream */, int32 /* offset */, int32 len,
void * buffer)
{
@@ -853,7 +1101,8 @@
if ( ! _cookieFile.empty() ) {
cout << " dumpCookies: file " << _cookieFile << " should be unlinked!" << endl;
}
- _cookieFile.clear();
+ //_cookieFile.clear();
+ _cookieFile="";
// Linking problems...
//#ifdef HAVE_XPCOM
@@ -961,9 +1210,47 @@
}
+#if 0
+void* VidPipeThread(void* p)
+{
+ //int fd = (int)p;
+ nsPluginInstance *plugin = reinterpret_cast<nsPluginInstance*>(p);
+ int fd = plugin->_vid_fd;
+
+ while (true)
+ {
+ int read_bytes=0;
+ while (read_bytes < myBufferSz)
+ {
+ int ret;
+ ret = read(fd, myBuffer + read_bytes, myBufferSz - read_bytes);
+ if (ret == -1)
+ {
+ perror("read");
+ break;
+ }
+ if (ret == 0)
+ usleep(5000);
+ read_bytes += ret;
+ }
+ //XXX deadlk?
+ //plugin->_bview->LockLooper();
+ //plugin->_bview->Invalidate();
+ //plugin->_bview->UnlockLooper();
+ }
+}
+#endif
+
void
nsPluginInstance::startProc(Window win)
{
+ //static int QQ=0;
+ //QQ++;
+
+ //if (QQ != 1)
+ // return;
+
+
string procname;
char *gnash_env = std::getenv("GNASH_PLAYER");
#ifdef GNASH_XPI_PLUGIN
@@ -973,7 +1260,8 @@
#endif // def GNASH_XPI_PLUGIN
if (gnash_env == NULL) {
procname = GNASHBINDIR;
- procname += "/gtk-gnash";
+//XXX
+ procname += "/dump-gnash";
}
else
{
@@ -1000,6 +1288,8 @@
// 0 For reading, 1 for writing.
int p2c_pipe[2];
int c2p_pipe[2];
+
+ //int c2p_vid_pipe[2];
int ret = pipe(p2c_pipe);
if (ret == -1)
@@ -1014,6 +1304,13 @@
cout << "ERROR: child to parent pipe() failed: " << strerror(errno) << endl;
}
+ //ret = pipe(c2p_vid_pipe);
+ //if (ret == -1)
+ //{
+ //cout << "ERROR: child to parent vid pipe() failed: " << strerror(errno) << endl;
+ //}
+
+
/*
Setup the command line for starting Gnash
@@ -1022,10 +1319,18 @@
// Prepare width, height and window ID variables
const size_t buf_size = 30;
char xid[buf_size], width[buf_size], height[buf_size], hostfd[buf_size];
+ char hostvidfd[buf_size];
+ //char hostvidfd[buf_size];
snprintf(xid, buf_size, "%ld", win);
snprintf(width, buf_size, "%d", _width);
snprintf(height, buf_size, "%d", _height);
snprintf(hostfd, buf_size, "%d", c2p_pipe[1]);
+ //snprintf(hostvidfd, buf_size, "%d", c2p_vid_pipe[1]);
+ if (_hostvidfd == -1)
+ {
+ std::cerr << "_hostvidfd is -1" << std::endl;
+ }
+ snprintf(hostvidfd, buf_size, "%d", _hostvidfd);
// Prepare Actionscript variables (e.g. Flashvars).
vector<string> paramvalues;
@@ -1054,18 +1359,19 @@
ADD NEW ARGUMENTS
*/
- const size_t maxargc = 18 + paramvalues.size() * 2;
+ const size_t maxargc = 22 + paramvalues.size() * 2;
+ //const size_t maxargc = 18 + paramvalues.size() * 2;
const char **argv = new const char *[maxargc];
size_t argc = 0;
argv[argc++] = procname.c_str();
// Don't force verbosity, use configuration for that
- //argv[argc++] = "-v";
+ argv[argc++] = "-vv";
// X window ID (necessary for gnash to function as a plugin)
- argv[argc++] = "-x";
- argv[argc++] = xid;
+ //argv[argc++] = "-x";
+ //argv[argc++] = xid;
// Height and width
argv[argc++] = "-j";
@@ -1075,12 +1381,22 @@
// Url of the root movie
argv[argc++] = "-u";
+ // XXX czasami jest pusty ?
argv[argc++] = _swf_url.c_str();
// Host FD
argv[argc++] = "-F";
argv[argc++] = hostfd;
+ argv[argc++] = "-D";
+ //argv[argc++] = "/boot/home/PLIK";
+ argv[argc++] = hostvidfd;
+ //argv[argc++] = hostvidfd;
+
+ // this limits to 25 FPS XXX
+ //argv[argc++] = "-d";
+ //argv[argc++] = "40";
+
// Base URL is the page that the SWF is embedded in. It is
// by Gnash for resolving relative URLs in the movie. If the
// embed tag "base" is specified, its value overrides the -U
@@ -1099,6 +1415,7 @@
}
argv[argc++] = "-";
+ //argv[argc++] = "http://www.youtube.com/player2.swf";
argv[argc++] = 0;
assert(argc <= maxargc);
@@ -1129,13 +1446,21 @@
<< endl;
}
- // we want to read from c2p pipe, so close read-fd1
+ // we want to read from c2p pipe, so close write-fd1
ret = close (c2p_pipe[1]);
if (ret == -1)
{
cout << "ERROR: c2p_pipe[1] close() failed: " << strerror(errno)
<< endl;
}
+
+ // we want to read from c2p_vid pipe, so close write-fd1
+ //ret = close(c2p_vid_pipe[1]);
+ //if (ret == -1)
+ // {
+ // cout << "ERROR: c2p_vid_pipe[1] close() failed: " << strerror(errno)
+ // << endl;
+ // }
cout << "Forked successfully, child process PID is "
@@ -1144,7 +1469,8 @@
_ichan = g_io_channel_unix_new(c2p_pipe[0]);
g_io_channel_set_close_on_unref(_ichan, true);
- _ichanWatchId = g_io_add_watch(_ichan, (GIOCondition)(G_IO_IN|G_IO_HUP), (GIOFunc)handlePlayerRequestsWrapper, this);
+ _ichanWatchId = g_io_add_watch(_ichan, (GIOCondition)(G_IO_IN|G_IO_HUP),
+ (GIOFunc)handlePlayerRequestsWrapper, this);
return;
}
@@ -1162,15 +1488,32 @@
}
// close standard input and direct read-fd1 to standard input
- ret = dup2 (p2c_pipe[0], fileno(stdin));
+ //ret = dup2 (p2c_pipe[0], fileno(stdin));
+ ret = dup2 (p2c_pipe[0], 0);
+ //XXX
if (ret == -1)
{
cout << "ERROR: dup2() failed: " << strerror(errno) << endl;
}
+
+ //ret = close (c2p_vid_pipe[0]);
+ //if (ret == -1)
+ //{
+ //cout << "ERROR: close() c2p_vid_pipe[0] failed: " << strerror(errno) << endl;
+ //}
+
+/*
+ ret = dup2 (p2c_pipe[1], 1);
+ if (ret == -1)
+ cout << "ERROR: dup2(p2c_pipe[1], 1) failed: " <<
+ strerror(errno) << endl;
+*/
+
// Close all of the browser's file descriptors that we just
// inherited (including p2c_pipe[0] that we just dup'd to fd 0).
+ // and p2c_pipe[1] //
// Experiments show seventy or eighty file descriptors open in
// typical cases. Rather than close all the thousands of possible file
// descriptors, we start after stderr and keep closing higher numbers
@@ -1181,7 +1524,8 @@
for ( ; numfailed < 10; anfd++)
{
if ( anfd == c2p_pipe[1] ) continue; // don't close this
- if ( anfd == c2p_pipe[0] ) continue; // don't close this either (correct?)
+ //if ( anfd == c2p_pipe[0] ) continue; // don't close this either (correct?)
+ if ( anfd == _hostvidfd ) continue;
ret = close (anfd);
if (ret < 0) numfailed++;
else
@@ -1241,6 +1585,12 @@
exit (-1);
}
+void
+nsPluginInstance::show_flash()
+{
+ startProc(_window);
+}
+
const char*
nsPluginInstance::getCurrentPageURL() const
{
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/plugin/plugin.h cp-gn084/plugin/plugin.h
--- clean-gn084/plugin/plugin.h 2009-03-13 18:18:08.000000000 +0000
+++ cp-gn084/plugin/plugin.h 2009-03-13 18:12:57.000000000 +0000
@@ -19,10 +19,26 @@
#ifndef __PLUGIN_H__
#define __PLUGIN_H__
+#include <glib.h>
+#include <glib/giochannel.h>
+
+#include <image.h>
+#include <SupportDefs.h>
+typedef int32 image_id;
+#include <Window.h>
+#include <pthread.h>
+
+typedef unsigned Window;
+
+#ifndef SYSCONFDIR
+# define SYSCONFDIR "/boot/etc/"
+#endif
+
#ifdef HAVE_CONFIG_H
#include "gnashconfig.h"
#endif
+
#ifndef HAVE_FUNCTION
# ifndef HAVE_func
# define dummystr(x) # x
@@ -37,10 +53,12 @@
#define __PRETTY_FUNCTION__ __FUNCTION__
#endif
+
+
/* Xlib/Xt stuff */
-#include <X11/Xlib.h>
+//#include <X11/Xlib.h>
//#include <X11/Intrinsic.h>
-#include <X11/cursorfont.h>
+//#include <X11/cursorfont.h>
#ifdef HAVE_GTK2
#include <gtk/gtk.h>
#endif
@@ -64,6 +82,52 @@
extern PRLock *playerMutex;
extern PRCondVar *playerCond;
+
+/* Copy in dump.cpp */
+struct Sh1_t
+{
+ int fEnableRendering;
+ char fRest[1];
+};
+
+//XXX probably should use DSOLOCAL
+class EloView : public BView
+{
+ void Draw(BRect updateRect);
+ BBitmap *fBitmap;
+ char* fEloData;
+ struct Sh1_t *fSh1;
+ unsigned fEloImgDataSz;
+ unsigned fEloDataSz;
+ int fEloFd;
+ bool fShowing;
+ class nsPluginInstance *fPlugin;
+ int fWidth;
+ int fHeight;
+ pthread_t fPt;
+ volatile sig_atomic_t fExiting;
+public:
+ struct mx_cnd_t
+ {
+ pthread_mutex_t fMx;
+ pthread_cond_t fCnd;
+ };
+private:
+ mx_cnd_t fMxCnd;
+public:
+
+ EloView(char *name, int width, int height, int fd, nsPluginInstance *plugin);
+ ~EloView();
+
+ virtual void MouseDown(BPoint where);
+
+ void ThreadFunc();
+ void CancelThread();
+};
+
+
+
+
class DSOLOCAL nsPluginInstance : public nsPluginInstanceBase
{
public:
@@ -82,13 +146,14 @@
uint16_t *stype);
NPError DestroyStream(NPStream * stream, NPError reason);
- int32_t WriteReady(NPStream *stream);
- int32_t Write(NPStream *stream, int32_t offset, int32_t len, void *buffer);
+ int32 WriteReady(NPStream *stream);
+ int32 Write(NPStream *stream, int32 offset, int32 len, void *buffer);
NPError WriteStatus(char *msg) const;
NPError WriteStatus(std::string msg) const;
void startProc(Window win);
+ void show_flash();
private:
@@ -129,6 +194,12 @@
int _streamfd;
GIOChannel* _ichan;
int _ichanWatchId;
+ //GIOChannel* _ichan_vid;
+ //int _ichanWatchId_vid;
+
+ EloView* _bview;
+ int _hostvidfd;
+
pid_t _childpid;
int _filefd;
diff -Naur -x 'Makefile*' -x '*.m4' -x '*autom4te.cache*' -x '*.rej' -x config.guess -x config.sub -x configure -x '*.1' -x '*.diff' -x libltdl -x ltmain.sh clean-gn084/sys/shm.h cp-gn084/sys/shm.h
--- clean-gn084/sys/shm.h 1970-01-01 00:00:00.000000000 +0000
+++ cp-gn084/sys/shm.h 2009-03-13 18:12:58.000000000 +0000
@@ -0,0 +1 @@
+#warning "dummy sys/shm.h"