Re: YUV Overlay

2013-07-23 Thread Tobias Leich
Hi, can you paste a complete example please? Maybe with a link to a test
video file.

What I would try first is SDL's latest release, which is 2.540 or so.

Cheers, FROGGS

Am 23.07.2013 23:44, schrieb tmur...@wumpus-cave.net:
> I'm working on a project involving decoding h.264 video frames with
> ffmpeg and then outputting them to an SDL surface. From what I've
> read, the YUV overlay is meant for this kind of job, but I'm having
> trouble getting it to work with the Perl bindings.
>
> One thing that seems odd to me in the Perl docs is:
>
> As of release 2.3 direct right to overlay is disable.
>
> Besides the typos, this troubles me because it seems that disabling
> the feature makes the YUV overlay completely useless.
>
> Not to be deterred, I wrote this code:
>
> SDL::Video::lock_YUV_overlay( $overlay );
> # The order of array indexen is correct, according to:
> # http://dranger.com/ffmpeg/tutorial02.html
> my $pitches = $overlay->pitches;
> $$pitches[0] = scalar @{ $last_vid_frame[0] };
> $$pitches[2] = scalar @{ $last_vid_frame[1] };
> $$pitches[1] = scalar @{ $last_vid_frame[2] };
> my $pixels = $overlay->pixels;
> $$pixels[0] = $last_vid_frame[0];
> $$pixels[2] = $last_vid_frame[1];
> $$pixels[1] = $last_vid_frame[2];
> SDL::Video::unlock_YUV_overlay( $overlay );
>
> SDL::Video::update_rects( $sdl, $bg_rect );
> SDL::Video::display_YUV_overlay( $sdl, $bg_rect );
>
> When I run this, I get an error about not being able to find the
> pitches() method against the class "SDL::Overlay".  Eh?  (Same thing
> happens for the pixels() method if I put that call first.) I can call
> width() and format() and such just fine on that object.
>
> If needed, I can handle the overlay entirely at the C level.  I may
> end up doing that anyway; the C array that comes out of ffmpeg is
> being transformed into a Perl array-of-arrays, which is going to be an
> expensive operation to do for 720p at 30 fps in realtime. But I'd like
> to try this at the Perl level for now.
>
> I might also have to convert the output from ffmpeg using
> sws_scale().  It's coming out in YUV420P mode, and I'm using YV12 to
> init the overlay. But I'd like to get the above working before messing
> with that.
>
> Thanks,
> Timm Murray



YUV Overlay

2013-07-23 Thread tmurray
I'm working on a project involving decoding h.264 video frames with 
ffmpeg and then outputting them to an SDL surface. From what I've read, 
the YUV overlay is meant for this kind of job, but I'm having trouble 
getting it to work with the Perl bindings.


One thing that seems odd to me in the Perl docs is:

As of release 2.3 direct right to overlay is disable.

Besides the typos, this troubles me because it seems that disabling the 
feature makes the YUV overlay completely useless.


Not to be deterred, I wrote this code:

SDL::Video::lock_YUV_overlay( $overlay );
# The order of array indexen is correct, according to:
# http://dranger.com/ffmpeg/tutorial02.html
my $pitches = $overlay->pitches;
$$pitches[0] = scalar @{ $last_vid_frame[0] };
$$pitches[2] = scalar @{ $last_vid_frame[1] };
$$pitches[1] = scalar @{ $last_vid_frame[2] };
my $pixels = $overlay->pixels;
$$pixels[0] = $last_vid_frame[0];
$$pixels[2] = $last_vid_frame[1];
$$pixels[1] = $last_vid_frame[2];
SDL::Video::unlock_YUV_overlay( $overlay );

SDL::Video::update_rects( $sdl, $bg_rect );
SDL::Video::display_YUV_overlay( $sdl, $bg_rect );

When I run this, I get an error about not being able to find the 
pitches() method against the class "SDL::Overlay".  Eh?  (Same thing 
happens for the pixels() method if I put that call first.) I can call 
width() and format() and such just fine on that object.


If needed, I can handle the overlay entirely at the C level.  I may end 
up doing that anyway; the C array that comes out of ffmpeg is being 
transformed into a Perl array-of-arrays, which is going to be an 
expensive operation to do for 720p at 30 fps in realtime. But I'd like 
to try this at the Perl level for now.


I might also have to convert the output from ffmpeg using sws_scale().  
It's coming out in YUV420P mode, and I'm using YV12 to init the overlay. 
But I'd like to get the above working before messing with that.


Thanks,
Timm Murray