From f09e12889c4ebfa3db21fa30955698171a22757b Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Fri, 26 Apr 2013 18:40:39 +0100 Subject: tinkering gstreamer loader --- rotord/rotor.cpp | 269 ++++--------------------------------------------------- 1 file changed, 17 insertions(+), 252 deletions(-) (limited to 'rotord/rotor.cpp') diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp index 20c6d3a..23e2196 100755 --- a/rotord/rotor.cpp +++ b/rotord/rotor.cpp @@ -155,141 +155,7 @@ void Audio_analysis::print_features(){ cerr<"+ofToString(u)+"\n"); - v=u; - } - } - return true; - */ -/* -bool Video_output::render(const float duration, const float framerate,const string &output_filename,const string &audio_filename){ - //render out the network - - //set up output context - //then iterate through frames - //querying graph at each frame - - av_register_all(); - - AVCodec *codec; - AVCodecContext *c= NULL; - int i, out_size, size, x, y, outbuf_size; - FILE *f; - AVFrame *picture; - uint8_t *outbuf, *picture_buf; - - cerr << "Rotor: rendering " << output_filename << " , " << duration << " seconds at " << framerate << " frames per second" << endl; - - codec = avcodec_find_encoder(AV_CODEC_ID_H264); - if (!codec) { - cerr<< "codec not found" << endl; - return false; - } - - c= avcodec_alloc_context3(codec); - picture= avcodec_alloc_frame(); - - // put sample parameters / - c->bit_rate = 400000; - // resolution must be a multiple of two / - c->width = 640; - c->height = 480; - // frames per second / - c->time_base= (AVRational){1,25}; - c->gop_size = 10; // emit one intra frame every ten frames / - c->max_b_frames=1; - c->pix_fmt = PIX_FMT_YUV420P; //AV_PIX_FMT_RGB24 - - AVDictionary *options; //= NULL; causes a forward declaration error!? - options=NULL; - - // open it / - if (avcodec_open2(c, codec, &options) < 0) { - cerr << "could not open codec" << endl; - return false; - } - - f = fopen(output_filename.c_str(), "wb"); - if (!f) { - cerr << "could not open "<< output_filename<width * c->height; - picture_buf = malloc((size * 3) / 2); // size for YUV 420 / - - picture->data[0] = picture_buf; - picture->data[1] = picture->data[0] + size; - picture->data[2] = picture->data[1] + size / 4; - picture->linesize[0] = c->width; - picture->linesize[1] = c->width / 2; - picture->linesize[2] = c->width / 2; - - // encode 1 second of video / - for(i=0;i<250;i++) { - fflush(stdout); - // prepare a dummy image / - // Y / - for(y=0;yheight;y++) { - for(x=0;xwidth;x++) { - picture->data[0][y * picture->linesize[0] + x] = x + y + i * 3; - } - } - - // Cb and Cr / - for(y=0;yheight/2;y++) { - for(x=0;xwidth/2;x++) { - picture->data[1][y * picture->linesize[1] + x] = 128 + y + i * 2; - picture->data[2][y * picture->linesize[2] + x] = 64 + x + i * 5; - } - } - - // encode the image / - out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture); - printf("encoding frame %3d (size=%5d)\n", i, out_size); - fwrite(outbuf, 1, out_size, f); - } - - // get the delayed frames / - for(; out_size; i++) { - fflush(stdout); - - out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL); - printf("write frame %3d (size=%5d)\n", i, out_size); - fwrite(outbuf, 1, out_size, f); - } - - // add sequence end code to have a real mpeg file / - outbuf[0] = 0x00; - outbuf[1] = 0x00; - outbuf[2] = 0x01; - outbuf[3] = 0xb7; - fwrite(outbuf, 1, 4, f); - fclose(f); - free(picture_buf); - free(outbuf); - - - avcodec_close(c); - av_free(c); - av_free(picture); - printf("\n"); - - return true; -} -*/ bool Video_output::render(const float duration, const float framerate,const string &output_filename,const string &audio_filename){ // @@ -326,123 +192,22 @@ bool Video_output::render(const float duration, const float framerate,const stri return false; } -//new version from libav examples -/* - AVOutputFormat *fmt; - AVFormatContext *oc; - AVStream *audio_st, *video_st; - double audio_pts, video_pts; - int i; - - //Initialize libavcodec, and register all codecs and formats. // - av_register_all(); - //think about this: when to register and unregister? - - - //Autodetect the output format from the name. default is MPEG. // - fmt = av_guess_format(NULL, output_filename.c_str(), NULL); - if (!fmt) { - printf("Could not deduce output format from file extension: using MPEG.\n"); - fmt = av_guess_format("mpeg", NULL, NULL); - } - if (!fmt) { - cerr << "Rotor: could not find suitable output format" << endl; - return false; - } - - //Allocate the output media context. // - oc = avformat_alloc_context(); - if (!oc) { - cerr <<"Rotor: memory error"<< endl; - return false; - } - oc->oformat = fmt; - snprintf(oc->filename, sizeof(oc->filename), "%s", filename); - - //Add the audio and video streams using the default format codecs - * and initialize the codecs. // - video_st = NULL; - audio_st = NULL; - if (fmt->video_codec != AV_CODEC_ID_NONE) { - video_st = add_video_stream(oc, fmt->video_codec); - } - if (fmt->audio_codec != AV_CODEC_ID_NONE) { - audio_st = add_audio_stream(oc, fmt->audio_codec); - } - - //Now that all the parameters are set, we can open the audio and - * video codecs and allocate the necessary encode buffers. // - if (video_st) - open_video(oc, video_st); - if (audio_st) - open_audio(oc, audio_st); - - av_dump_format(oc, 0, filename, 1); - - //open the output file, if needed // - if (!(fmt->flags & AVFMT_NOFILE)) { - if (avio_open(&oc->pb, filename, AVIO_FLAG_WRITE) < 0) { - cerr <<"Could not open "<pts.val * audio_st->time_base.num / audio_st->time_base.den; - else - audio_pts = 0.0; - - if (video_st) - video_pts = (double)video_st->pts.val * video_st->time_base.num / - video_st->time_base.den; - else - video_pts = 0.0; - - if ((!audio_st || audio_pts >= STREAM_DURATION) && - (!video_st || video_pts >= STREAM_DURATION)) - break; - - //write interleaved audio and video frames // - if (!video_st || (video_st && audio_st && audio_pts < video_pts)) { - write_audio_frame(oc, audio_st); - } else { - write_video_frame(oc, video_st); - } - } - - //Write the trailer, if any. The trailer must be written before you - // close the CodecContexts open when you wrote the header; otherwise - // av_write_trailer() may try to use memory that was freed on - // av_codec_close(). // - //av_write_trailer(oc); - - //Close each codec. // - if (video_st) - close_video(oc, video_st); - if (audio_st) - close_audio(oc, audio_st); - - //Free the streams. // - for (i = 0; i < oc->nb_streams; i++) { - av_freep(&oc->streams[i]->codec); - av_freep(&oc->streams[i]); - } - - if (!(fmt->flags & AVFMT_NOFILE)) - //Close the output file. // - avio_close(oc->pb); - - //free the stream // - av_free(oc); - - return true; - */ - bool Video_input::load(const string &filename){ - + if (player->loadMovie(filename)){ + player->play(); + player->setPaused(true); + cerr<<"loaded "<getDuration()<<" seconds "<<", "<getWidth()<<"x"<getWidth()<isLoaded()){ + // image.setup(player) + + //} + return nullptr; +}; -- cgit v1.2.3