Re: YUV Overlay
[email protected] Wed, 24 Jul 2013 08:34:20 -0500
| Newsgroups | perl.sdl.devel |
|---|---|
| Message-ID | <[email protected]> |
Yes. For my own testing purposes, it's not always convenient to connect to the ARDrone, so I overrode much of the behavior in Mock classes. For decoding the video stream to a file, you can do: $ uav_video_dump --in t_data/ardrone_video_stream_dump.bin --out /tmp/ardrone_video_stream_dump.h264 And then play the out file in a mplayer or vlc. Mplayer might need you to manually set the -fps option (set to "25", I think), or it will mangle the output. Playing the video in real time should work with: $ uav_video_display --in t_data/ardrone_video_stream_dump.bin Which should pop up the SDL window, and then dump a bunch of error messages to the console. This is the one I'm trying to get working here. Thanks, Timm On 24.07.2013 08:17, Kartik Thakore wrote: > Can we run this with out needing ARDdrone? > > On Wed, Jul 24, 2013 at 8:22 AM, <[email protected]> wrote: > >> Short on time at the moment, but I have the complete code on a >> github repo: >> >> https://github.com/frezik/UAV-Pilot [2] >> >> The relevant code is in UAV::Pilot::SDL::Video, and the decoding >> happens in the xs file for UAV::Pilot::Video::H264Decoder. The test >> t/160_video_decode.t should run the decoding end of things. There's a >> test video in t_data/ardrone_video_stream_dump.bin, though that >> contains the PaVE headers from the UAV before each frame. Those >> headers can be stripped out by bin/uav_video_dump. >> >> I'll try to come up with a more concise example later this evening. >> >> Thanks, >> Timm >> >> On 24.07.2013 01 [3]:00, Tobias Leich wrote: >> >>> 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 [email protected]: >>> >>>> 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 [1] >>>> 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 > > > > Links: > ------ > [1] http://dranger.com/ffmpeg/tutorial02.html > [2] https://github.com/frezik/UAV-Pilot > [3] tel:24.07.2013%2001