diff options
Diffstat (limited to 'rotord/rotor.cpp')
| -rwxr-xr-x | rotord/rotor.cpp | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp index bd1ace9..446a547 100755 --- a/rotord/rotor.cpp +++ b/rotord/rotor.cpp @@ -178,7 +178,8 @@ void Audio_analysis::print_features(){ cerr<<endl; } -bool Video_output::render(const float duration, const float framerate,const string &output_filename,const string &audio_filename,float& progress){ +/* +bool Video_output::render_encoder(const float duration, const float framerate,const string &output_filename,const string &audio_filename,float& progress){ // //setup defaults @@ -219,7 +220,7 @@ bool Video_output::render(const float duration, const float framerate,const stri Image* i=get_output(Frame_spec(vf,framerate,duration,outW,outH)); if (i) { //exporter->encodeFrame(i->RGBdata); - + //encoder->picture_rgb.pts=; encoder.write_frame(vf,i->RGBdata); } @@ -235,6 +236,76 @@ bool Video_output::render(const float duration, const float framerate,const stri return false; } +*/ + +bool Video_output::render(const float duration, const float framerate,const string &output_filename,const string &audio_filename,float& progress){ + + // + //setup defaults + int outW=640; + int outH=360; + int bitRate=4000000; + int frameRate=25; + AVCodecID codecId=AV_CODEC_ID_MPEG4; + std::string container ="mov"; + + bool usingaudio=audioloader.setup(audio_filename); + //at the moment it crashes if you render before audio is loaded + + float spct=100.0f/duration; + + if (exporter->setup(outW,outH,bitRate,frameRate,container)) { //codecId, + if (exporter->record(output_filename)) { + + cerr << "Rotor: Video_output rendering " << duration << " seconds at " << framerate << " fps, audio frame size: " << exporter->get_audio_framesize()<<endl; + //25fps video and 43.06640625fps audio? hmm + //how to get the timecodes correct for the interleaved files + + float vstep=1.0f/framerate; + float v=0.0f; + float vf=0.0f; + float af=0.0f; + while (vf<duration){ //-vstep) { + while (!fless(af,vf)) { + //insert audio frames until we are ahead of the video + exporter->encodeFrame(audioloader.get_samples(exporter->get_audio_framesize())); + af+=exporter->get_audio_step(); + + } + + /* + [mp3 @ 0x7fffe40330e0] max_analyze_duration 5000000 reached at 5015510 microseconds + [mp3 @ 0x7fffe4033ec0] Insufficient thread locking around avcodec_open/close() + [mp3 @ 0x7fffe40330e0] Estimating duration from bitrate, this may be inaccurate + [libx264 @ 0x7fffe8003940] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 + [libx264 @ 0x7fffe8003940] profile High, level 3.0 + [libx264 @ 0x7fffe8003940] 264 - core 123 r2189 35cf912 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=10 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 + Assertion ff_avcodec_locked failed at libavcodec/utils.c:2967 + */ + + + Image* i=get_output(Frame_spec(vf,framerate,duration,outW,outH)); + if (i) { + exporter->encodeFrame(i->RGBdata); + + } + vf+=vstep; + progress=vf/duration; + } + + exporter->finishRecord(); + cerr << "Rotor: Video_output finished "<< endl; + + audioloader.close(); + + return true; + } + } + + audioloader.close(); + + return false; +} bool Video_loader::load(const string &filename){ /* |
