[Swfdec] screenshot of swf file

Paul Brooker paul at thefunnyfish.net
Sat Jan 23 04:53:32 PST 2010


Thanks zou,
i found the problem.. in the end it was down to a problem with my maths library which wasn't evaluating sin and cos functions correctly, which screwed 
up cairo matrix rotations. Its working fine now, cheers for your help :)

zou lunkai wrote:
>>> Where is liboil used?
> inside jpeg decoder: jpeg_rgb_decoder.c
> swfdec_buffer.c: swfdec_buffer_queue_peek
> it's not heavily used in swfdec.
> 
>>> The first differences are the swfdec_matrix_ensure_invertible failures
> which dont appear on the host output.
> 
> Maybe you need to check if your ARM board could support float point numbers
> correctly. Take a look at function swfdec_matrix_ensure_invertible(), it's
> not big.
> 
> --zou
> 
> 
> On Thu, Jan 21, 2010 at 7:29 AM, Paul Brooker <paul at thefunnyfish.net> wrote:
> 
>> Paul Brooker wrote:
>>> Hi,
>>> Im trying to thumbnail a swf file based on this found at
>>> http://www.mail-archive.com/swfdec@lists.freedesktop.org/msg00821.html.
>>>
>>> #include <stdlib.h>
>>> #include <stdio.h>
>>> #include <swfdec/swfdec.h>
>>> #include <cairo.h>
>>>
>>> void swfdec_player_save (SwfdecPlayer *player, guint width, guint
>>> height, const char *filename) {
>>>      cairo_surface_t *surface;
>>>      cairo_t *cr;
>>>      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width,
>>> height);
>>>      cr = cairo_create (surface);
>>>      swfdec_player_render (player, cr);
>>>      cairo_destroy (cr);
>>>      cairo_surface_write_to_png (surface, filename);
>>>      cairo_surface_destroy (surface);
>>> }
>>>
>>> int main(int argc, char *argv[]) {
>>>      char *input = argv[1];
>>>      char *output = argv[2];
>>>      SwfdecPlayer *player = swfdec_player_new(NULL);
>>>      SwfdecURL *url = swfdec_url_new_from_input(input);
>>>      swfdec_player_set_url(player, url);
>>>      swfdec_url_free (url);
>>>      swfdec_player_set_size (player, 800, 480);
>>>      swfdec_player_advance(player, swfdec_player_get_next_event
>> (player));
>>>      swfdec_player_save(player, 800, 480, output);
>>>      return 0;
>>> }
>>>
>>> Using this i get a blank transparent png output as reported by the
>>> original poster.  Ive also tried the gnome thumbnailer which produces
>>> the same result. The swf file is a single frame containing just two
>>> boxes. I cant see anything unusual from any of the debugging output.  Im
>>> not sure where to look for the problem. Im running it on an ARM board
>>> and using swfdec version 0.8.4. Any help would be much appreciated.
>>>
>>> Thanks in advance,
>>> Paul Brooker
>>> _______________________________________________
>>> Swfdec mailing list
>>> Swfdec at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/swfdec
>>>
>> ok, having looked a bit further into this ive got it working on my host and
>> have compared the debugging output with that of the arm board. The only
>> differences towards the end of the debugging output.
>>
>> Host debug :
>>
>> SWFDEC: LOG  : swfdec_sprite_movie.c(215):
>> swfdec_sprite_movie_perform_place:   matrix = { 1 0, 0 1 } + { 0 0 }
>> SWFDEC: DEBUG: swfdec_movie.c(917): swfdec_movie_set_property: inserting
>> SwfdecGraphicMovie 0x8939018 into SwfdecSpriteMovie 0x88ac130
>> SWFDEC: LOG  : swfdec_as_context.c(199): swfdec_as_context_try_use_mem: +
>> 448 bytes, total  243918 ( 244206 since GC)
>> SWFDEC: LOG  : swfdec_sprite_movie.c(379):
>> swfdec_sprite_movie_perform_one_action: 0x88ac130: executing 2th tag
>> ShowFrame in frame 0
>> SWFDEC: LOG  : swfdec_stream_target.c(120): swfdec_stream_target_close:
>> close on file:////opt/x86/box.swf
>> SWFDEC: LOG  : swfdec_player.c(453): swfdec_player_add_action: adding
>> action  0
>> SWFDEC: DEBUG: swfdec_player.c(1988): swfdec_player_unlock_soft: UNLOCK
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecGraphicMovie  at end
>> SWFDEC: LOG  : swfdec_player.c(2490): swfdec_player_invalidate:
>> invalidating 0 0  750 430
>> SWFDEC: DEBUG: swfdec_player.c(2506): swfdec_player_invalidate: toplevel
>> invalidation of 0 0  750 430 - now 1 subregions
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecSpriteMovie  at end
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecGraphicMovie  at end
>> SWFDEC: LOG  : swfdec_player.c(2490): swfdec_player_invalidate:
>> invalidating 0 0  750 430
>> SWFDEC: DEBUG: swfdec_player.c(2506): swfdec_player_invalidate: toplevel
>> invalidation of 0 0  750 430 - now 1 subregions
>> SWFDEC: INFO : swfdec_player.c(3141): swfdec_player_render_with_renderer:
>> === 0x88a2150: START RENDER ===
>> SWFDEC: LOG  : swfdec_movie.c(798): swfdec_movie_render: transforming
>> movie, transform: 1 1  0 0   0 0
>> SWFDEC: LOG  : swfdec_movie.c(1309): swfdec_movie_do_render: rendering
>> 0x8939018 with depth -16383
>> SWFDEC: LOG  : swfdec_movie.c(798): swfdec_movie_render: transforming
>> movie, transform: 1 1  0 0   0 0
>> SWFDEC: LOG  : swfdec_color.c(102): swfdec_color_apply_transform: in rgba
>> 136,136,136,255
>> SWFDEC: LOG  : swfdec_color.c(114): swfdec_color_apply_transform: out rgba
>> 136,136,136,255
>> SWFDEC: LOG  : swfdec_color.c(102): swfdec_color_apply_transform: in rgba
>> 0,255,255,255
>> SWFDEC: LOG  : swfdec_color.c(114): swfdec_color_apply_transform: out rgba
>> 0,255,255,255
>> SWFDEC: INFO : swfdec_player.c(3154): swfdec_player_render_with_renderer:
>> === 0x88a2150: END RENDER ===
>>
>> ARM board debug:
>>
>> SWFDEC: LOG  : swfdec_sprite_movie.c(215):
>> swfdec_sprite_movie_perform_place:   matrix = { 1 0, 0 1 } + { 0 0 }
>> SWFDEC: DEBUG: swfdec_movie.c(917): swfdec_movie_set_property: inserting
>> SwfdecGraphicMovie 0x75008 into SwfdecSpriteMovie 0x28128
>> SWFDEC: LOG  : swfdec_as_context.c(199): swfdec_as_context_try_use_mem: +
>> 448 bytes, total  150299 ( 150323 since GC)
>> SWFDEC: INFO : swfdec_color.c(243): swfdec_matrix_ensure_invertible: matrix
>> not invertible, adding epsilon to smallest member
>> SWFDEC: INFO : swfdec_color.c(243): swfdec_matrix_ensure_invertible: matrix
>> not invertible, adding epsilon to smallest member
>> SWFDEC: LOG  : swfdec_sprite_movie.c(379):
>> swfdec_sprite_movie_perform_one_action: 0x28128: executing 2th tag ShowFrame
>> in frame 0
>> SWFDEC: LOG  : swfdec_stream_target.c(120): swfdec_stream_target_close:
>> close on file:////home/plg/box.swf
>> SWFDEC: LOG  : swfdec_player.c(453): swfdec_player_add_action: adding
>> action  0
>> SWFDEC: DEBUG: swfdec_player.c(1988): swfdec_player_unlock_soft: UNLOCK
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecGraphicMovie  at end
>> SWFDEC: LOG  : swfdec_player.c(2490): swfdec_player_invalidate:
>> invalidating 0 0  1 1
>> SWFDEC: DEBUG: swfdec_player.c(2506): swfdec_player_invalidate: toplevel
>> invalidation of 0 0  1 1 - now 1 subregions
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecSpriteMovie  at end
>> SWFDEC: LOG  : swfdec_movie.c(122): swfdec_movie_invalidate: invalidating
>> SwfdecGraphicMovie  at end
>> SWFDEC: LOG  : swfdec_player.c(2490): swfdec_player_invalidate:
>> invalidating 0 0  1 1
>> SWFDEC: DEBUG: swfdec_player.c(2506): swfdec_player_invalidate: toplevel
>> invalidation of 0 0  1 1 - now 1 subregions
>> SWFDEC: INFO : swfdec_player.c(3141): swfdec_player_render_with_renderer:
>> === 0x1c0c0: START RENDER ===
>> SWFDEC: LOG  : swfdec_movie.c(798): swfdec_movie_render: transforming
>> movie, transform: 1 1  0 0   0 0
>> SWFDEC: LOG  : swfdec_movie.c(1309): swfdec_movie_do_render: rendering
>> 0x75008 with depth -16383
>> SWFDEC: LOG  : swfdec_movie.c(798): swfdec_movie_render: transforming
>> movie, transform: 1.52588e-05 1.52588e-05  0 0   0 0
>> SWFDEC: LOG  : swfdec_color.c(102): swfdec_color_apply_transform: in rgba
>> 136,136,136,255
>> SWFDEC: LOG  : swfdec_color.c(114): swfdec_color_apply_transform: out rgba
>> 136,136,136,255
>> SWFDEC: LOG  : swfdec_color.c(102): swfdec_color_apply_transform: in rgba
>> 0,255,255,255
>> SWFDEC: LOG  : swfdec_color.c(114): swfdec_color_apply_transform: out rgba
>> 0,255,255,255
>> SWFDEC: INFO : swfdec_player.c(3154): swfdec_player_render_with_renderer:
>> === 0x1c0c0: END RENDER ===
>>
>> The first differences are the swfdec_matrix_ensure_invertible failures
>> which dont appear on the host output.  From then on the invalidating regions
>> are incorrect and are set to 0,0->1,1.  Im not clear on the inner workings
>> so not sure what is calling the functions incorrectly.  Im suspicious of
>> liboil as the oil_test produces failures of some conversion functions.
>>  Where is liboil used?
>> _______________________________________________
>> Swfdec mailing list
>> Swfdec at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/swfdec
>>
> 



More information about the Swfdec mailing list