~bwy/+junk/gnash-temp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
http://www.xmission.com/~ink/gnash/README.txt:

Gnash stream dumper
===================

This is an experimental build of gnash that allows the user to dump
both the raw (BGRA24) video stream, and the raw (PCM/Wave) audio
stream from a movie.  The "dump gui" is disabled by default, you'd
need to compile it with something like this:

./configure \
    --prefix=/usr/local/gnash-dump \
    --enable-renderer=agg \
    --enable-gui=gtk,dump \
    --enable-media=ffmpeg \
    --disable-kparts \
    --disable-nsapi \
    --disable-menus

It *requires* AGG as the renderer and *ffmpeg* as the sound driver.
Although audio and video are separate (you can dump video, even if you
choose gstreamer for audio output).

Two new command-line parameters are available:

  -A <file>     Audio dump file (wave format)
  -D <file>     Video dump file (only valid with dump-gnash)

Once invoked, gnash will output sh-friendly information about the
results: 

$ /usr/local/gnash-dump/bin/dump-gnash -D blah.out -A \
  blah.wav -t 85 ./sbemail45.swf

  # Created 44100 16Mhz stereo wave file:
  AUDIOFILE=blah.wav
  # WARNING:  Gnash was told to loop the movie
  # Gnash created a raw dump file with the following properties:
  COLORSPACE=BGRA32
  NAME=blah.out
  WIDTH=550
  HEIGHT=400
  INTERVAL=83
  FPS_DESIRED=12.0482
  TIME=85.0749
  FPS_ACTUAL=12.0482
  # Finished writing file
  FRAMECOUNT=1026

One could then play the movie with mplayer:

mplayer -demuxer rawvideo \
	-rawvideo fps=12.0482:w=550:h=400:format=bgra blah.out \
	-audiofile ./blah.wav 

Or play it fullscreen, with hardware acceleration:

mplayer -demuxer rawvideo \
	-rawvideo fps=12.0482:w=550:h=400:format=bgra blah.out \
	-audiofile ./blah.wav \
	-fs \
	-vo xv

Or, convert it to YUV:

mplayer blah.out -vo yuv4mpeg:file=blah.yuv \
	-demuxer rawvideo \
	-rawvideo w=550:h=400:format=bgra:fps=12

And then make an MPEG-4/AC3 out of it:

mencoder blah.yuv -audiofile ./blah.wav \
	 -ovc lavc -oac lavc \
	 -lavcopts vcodec=mpeg4:acodec=ac3 -o blah.avi

Things To Do
============

 o Investigate gstreamer for audio stream capture.
 o Let gnash send the bitmap data to places other than a file (eg, use
   ffmpeg to encode on-the-fly).
 o Have SDL output PCM data as fast as we can play the movie?
 o Use something other than a polling loop for driver method.
 o Use ffmpeg's swscale to convert AGG's RGB-only output to YUV, which
   could then be sent to X11's XVideo extension for hardware scaling
   (ala Adobe's Flash 9).  This could be a raw X11-only gui, or an
   add-on to the gtk gui -- much in the same way that X11-shm is
   #ifdef'd right now.
 o Let the user specify which color space/bpp from AGG they want to
   see (RGB24, RGB16, BGRA32, etc.).
 o Remove gettimeofday calls so that it works on more operating
   systems.
 o Change automake to *not* include X11 libraries for the dump
   renderer.  There is no reason that this "gui" couldn't run on a
   headless server.