summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-05-23 16:07:23 +0100
committerTim Redfern <tim@eclectronics.org>2013-05-23 16:07:23 +0100
commitdf8910636a1fe171e48e684cdbaba91ffe97d0aa (patch)
tree27301fcb33697fbd855accc9aaa4cebcfaae447a
parentb643511ff513aadbd0485afc6b264702aac41021 (diff)
somewhat cleanup
-rw-r--r--api-example.c458
-rw-r--r--audioLoader.xml6
-rw-r--r--avcodec_audio_example.c114
-rw-r--r--avcodec_audio_example1.c93
-rw-r--r--avcodec_audio_example2.c143
-rw-r--r--avcodec_audio_example3-c++11.c120
-rw-r--r--interfaces.h68
-rw-r--r--interfaces01.h83
-rw-r--r--interfaces02.h142
-rw-r--r--libavformat_output-example.c527
-rw-r--r--nodeList.xml27
-rw-r--r--onandoff.xml48
-rw-r--r--output-example.c554
-rw-r--r--rotord/01.wavbin45748270 -> 0 bytes
-rw-r--r--rotord/02.mp3bin6924579 -> 0 bytes
-rw-r--r--rotord/02.wavbin30528046 -> 0 bytes
-rw-r--r--rotord/1wave.mp3bin8575 -> 0 bytes
-rw-r--r--rotord/1wave.wavbin88878 -> 0 bytes
-rwxr-xr-xrotord/delos.mp4bin4393937 -> 0 bytes
-rw-r--r--rotord/delos.wavbin5121796 -> 0 bytes
-rw-r--r--rotord/silence.mp3bin8575 -> 0 bytes
-rw-r--r--rotord/silence.wavbin88244 -> 0 bytes
-rw-r--r--rotord/wave.mp3bin160913 -> 0 bytes
-rw-r--r--rotord/wave.wavbin882044 -> 0 bytes
-rw-r--r--rotord/wave_s.mp3bin160913 -> 0 bytes
-rw-r--r--rotord/wave_s.wavbin1764044 -> 0 bytes
-rw-r--r--styleReq.xml4
-rw-r--r--testint.c199
28 files changed, 0 insertions, 2586 deletions
diff --git a/api-example.c b/api-example.c
deleted file mode 100644
index fb48b1f..0000000
--- a/api-example.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * copyright (c) 2001 Fabrice Bellard
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * avcodec API use example.
- *
- * Note that this library only handles codecs (mpeg, mpeg4, etc...),
- * not file formats (avi, vob, etc...). See library 'libavformat' for the
- * format handling
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_AV_CONFIG_H
-#undef HAVE_AV_CONFIG_H
-#endif
-
-#include "libavcodec/avcodec.h"
-#include "libavutil/mathematics.h"
-
-#define INBUF_SIZE 4096
-
-/*
- * Audio encoding example
- */
-static void audio_encode_example(const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int frame_size, i, j, out_size, outbuf_size;
- FILE *f;
- short *samples;
- float t, tincr;
- uint8_t *outbuf;
-
- printf("Audio encoding\n");
-
- /* find the MP2 encoder */
- codec = avcodec_find_encoder(CODEC_ID_MP2);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- c= avcodec_alloc_context();
-
- /* put sample parameters */
- c->bit_rate = 64000;
- c->sample_rate = 44100;
- c->channels = 2;
-
- /* open it */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- /* the codec gives us the frame size, in samples */
- frame_size = c->frame_size;
- samples = malloc(frame_size * 2 * c->channels);
- outbuf_size = 10000;
- outbuf = malloc(outbuf_size);
-
- f = fopen(filename, "wb");
- if (!f) {
- fprintf(stderr, "could not open %s\n", filename);
- exit(1);
- }
-
- /* encode a single tone sound */
- t = 0;
- tincr = 2 * M_PI * 440.0 / c->sample_rate;
- for(i=0;i<200;i++) {
- for(j=0;j<frame_size;j++) {
- samples[2*j] = (int)(sin(t) * 10000);
- samples[2*j+1] = samples[2*j];
- t += tincr;
- }
- /* encode the samples */
- out_size = avcodec_encode_audio(c, outbuf, outbuf_size, samples);
- fwrite(outbuf, 1, out_size, f);
- }
- fclose(f);
- free(outbuf);
- free(samples);
-
- avcodec_close(c);
- av_free(c);
-}
-
-/*
- * Audio decoding.
- */
-static void audio_decode_example(const char *outfilename, const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int out_size, len;
- FILE *f, *outfile;
- uint8_t *outbuf;
- uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
- AVPacket avpkt;
-
- av_init_packet(&avpkt);
-
- printf("Audio decoding\n");
-
- /* find the mpeg audio decoder */
- codec = avcodec_find_decoder(CODEC_ID_MP2);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- c= avcodec_alloc_context();
-
- /* open it */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- outbuf = malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "could not open %s\n", filename);
- exit(1);
- }
- outfile = fopen(outfilename, "wb");
- if (!outfile) {
- av_free(c);
- exit(1);
- }
-
- /* decode until eof */
- avpkt.data = inbuf;
- for(;;) {
- avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
- if (avpkt.size == 0)
- break;
-
- avpkt.data = inbuf;
- while (avpkt.size > 0) {
- out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- len = avcodec_decode_audio3(c, (short *)outbuf, &out_size, &avpkt);
- if (len < 0) {
- fprintf(stderr, "Error while decoding\n");
- exit(1);
- }
- if (out_size > 0) {
- /* if a frame has been decoded, output it */
- fwrite(outbuf, 1, out_size, outfile);
- }
- avpkt.size -= len;
- avpkt.data += len;
- }
- }
-
- fclose(outfile);
- fclose(f);
- free(outbuf);
-
- avcodec_close(c);
- av_free(c);
-}
-
-/*
- * Video encoding example
- */
-static void video_encode_example(const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int i, out_size, size, x, y, outbuf_size;
- FILE *f;
- AVFrame *picture;
- uint8_t *outbuf, *picture_buf;
-
- printf("Video encoding\n");
-
- /* find the mpeg1 video encoder */
- codec = avcodec_find_encoder(CODEC_ID_MPEG1VIDEO);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- c= avcodec_alloc_context();
- picture= avcodec_alloc_frame();
-
- /* put sample parameters */
- c->bit_rate = 400000;
- /* resolution must be a multiple of two */
- c->width = 352;
- c->height = 288;
- /* 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;
-
- /* open it */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- f = fopen(filename, "wb");
- if (!f) {
- fprintf(stderr, "could not open %s\n", filename);
- exit(1);
- }
-
- /* alloc image and output buffer */
- outbuf_size = 100000;
- outbuf = malloc(outbuf_size);
- size = c->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<25;i++) {
- fflush(stdout);
- /* prepare a dummy image */
- /* Y */
- for(y=0;y<c->height;y++) {
- for(x=0;x<c->width;x++) {
- picture->data[0][y * picture->linesize[0] + x] = x + y + i * 3;
- }
- }
-
- /* Cb and Cr */
- for(y=0;y<c->height/2;y++) {
- for(x=0;x<c->width/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");
-}
-
-/*
- * Video decoding example
- */
-
-static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
- char *filename)
-{
- FILE *f;
- int i;
-
- f=fopen(filename,"w");
- fprintf(f,"P5\n%d %d\n%d\n",xsize,ysize,255);
- for(i=0;i<ysize;i++)
- fwrite(buf + i * wrap,1,xsize,f);
- fclose(f);
-}
-
-static void video_decode_example(const char *outfilename, const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int frame, got_picture, len;
- FILE *f;
- AVFrame *picture;
- uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
- char buf[1024];
- AVPacket avpkt;
-
- av_init_packet(&avpkt);
-
- /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
- memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-
- printf("Video decoding\n");
-
- /* find the mpeg1 video decoder */
- codec = avcodec_find_decoder(CODEC_ID_MPEG1VIDEO);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- c= avcodec_alloc_context();
- picture= avcodec_alloc_frame();
-
- if(codec->capabilities&CODEC_CAP_TRUNCATED)
- c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
-
- /* For some codecs, such as msmpeg4 and mpeg4, width and height
- MUST be initialized there because this information is not
- available in the bitstream. */
-
- /* open it */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- /* the codec gives us the frame size, in samples */
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "could not open %s\n", filename);
- exit(1);
- }
-
- frame = 0;
- for(;;) {
- avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
- if (avpkt.size == 0)
- break;
-
- /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
- and this is the only method to use them because you cannot
- know the compressed data size before analysing it.
-
- BUT some other codecs (msmpeg4, mpeg4) are inherently frame
- based, so you must call them with all the data for one
- frame exactly. You must also initialize 'width' and
- 'height' before initializing them. */
-
- /* NOTE2: some codecs allow the raw parameters (frame size,
- sample rate) to be changed at any frame. We handle this, so
- you should also take care of it */
-
- /* here, we use a stream based decoder (mpeg1video), so we
- feed decoder and see if it could decode a frame */
- avpkt.data = inbuf;
- while (avpkt.size > 0) {
- len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
- if (len < 0) {
- fprintf(stderr, "Error while decoding frame %d\n", frame);
- exit(1);
- }
- if (got_picture) {
- printf("saving frame %3d\n", frame);
- fflush(stdout);
-
- /* the picture is allocated by the decoder. no need to
- free it */
- snprintf(buf, sizeof(buf), outfilename, frame);
- pgm_save(picture->data[0], picture->linesize[0],
- c->width, c->height, buf);
- frame++;
- }
- avpkt.size -= len;
- avpkt.data += len;
- }
- }
-
- /* some codecs, such as MPEG, transmit the I and P frame with a
- latency of one frame. You must do the following to have a
- chance to get the last frame of the video */
- avpkt.data = NULL;
- avpkt.size = 0;
- len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
- if (got_picture) {
- printf("saving last frame %3d\n", frame);
- fflush(stdout);
-
- /* the picture is allocated by the decoder. no need to
- free it */
- snprintf(buf, sizeof(buf), outfilename, frame);
- pgm_save(picture->data[0], picture->linesize[0],
- c->width, c->height, buf);
- frame++;
- }
-
- fclose(f);
-
- avcodec_close(c);
- av_free(c);
- av_free(picture);
- printf("\n");
-}
-
-int main(int argc, char **argv)
-{
- const char *filename;
-
- /* must be called before using avcodec lib */
- avcodec_init();
-
- /* register all the codecs */
- avcodec_register_all();
-
- if (argc <= 1) {
- audio_encode_example("/tmp/test.mp2");
- audio_decode_example("/tmp/test.sw", "/tmp/test.mp2");
-
- video_encode_example("/tmp/test.mpg");
- filename = "/tmp/test.mpg";
- } else {
- filename = argv[1];
- }
-
- // audio_decode_example("/tmp/test.sw", filename);
- video_decode_example("/tmp/test%d.pgm", filename);
-
- return 0;
-}
diff --git a/audioLoader.xml b/audioLoader.xml
deleted file mode 100644
index 3b39405..0000000
--- a/audioLoader.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<node ID="01" type="audioLoader">music track to analyse
- <output ID="01" type="graph">beat (sawtooth)</output>
- <output ID="02" type="graph">pitch</output>
- <output ID="03" type="graph">excitement</output>
-</node> \ No newline at end of file
diff --git a/avcodec_audio_example.c b/avcodec_audio_example.c
deleted file mode 100644
index 236b976..0000000
--- a/avcodec_audio_example.c
+++ /dev/null
@@ -1,114 +0,0 @@
-int main(int argc, char **argv)
-{
-
- const char* input_filename=argv[1];
-
- //avcodec_register_all();
- av_register_all();
- //av_ini
-
- AVFormatContext* container=avformat_alloc_context();
- if(avformat_open_input(&container,input_filename,NULL,NULL)<0){
- die("Could not open file");
- }
-
- if(av_find_stream_info(container)<0){
- die("Could not find file info");
- }
- av_dump_format(container,0,input_filename,false);
-
- int stream_id=-1;
- int i;
- for(i=0;i<container->nb_streams;i++){
- if(container->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){
- stream_id=i;
- break;
- }
- }
- if(stream_id==-1){
- die("Could not find Audio Stream");
- }
-
- AVDictionary *metadata=container->metadata;
-
- AVCodecContext *ctx=container->streams[stream_id]->codec;
- AVCodec *codec=avcodec_find_decoder(ctx->codec_id);
-
- if(codec==NULL){
- die("cannot find codec!");
- }
-
- if(avcodec_open(ctx,codec)<0){
- die("Codec cannot be found");
- }
-
- //ctx=avcodec_alloc_context3(codec);
-
- //initialize AO lib
- ao_initialize();
-
- int driver=ao_default_driver_id();
-
- ao_sample_format sformat;
- AVSampleFormat sfmt=ctx->sample_fmt;
- if(sfmt==AV_SAMPLE_FMT_U8){
- printf("U8\n");
-
- sformat.bits=8;
- }else if(sfmt==AV_SAMPLE_FMT_S16){
- printf("S16\n");
- sformat.bits=16;
- }else if(sfmt==AV_SAMPLE_FMT_S32){
- printf("S32\n");
- sformat.bits=32;
- }
-
- sformat.channels=ctx->channels;
- sformat.rate=ctx->sample_rate;
- sformat.byte_format=AO_FMT_NATIVE;
- sformat.matrix=0;
-
- ao_device *adevice=ao_open_live(driver,&sformat,NULL);
- //end of init AO LIB
-
- AVPacket packet;
- av_init_packet(&packet);
-
- AVFrame *frame=avcodec_alloc_frame();
-
-
-
- int buffer_size=AVCODEC_MAX_AUDIO_FRAME_SIZE+ FF_INPUT_BUFFER_PADDING_SIZE;;
- uint8_t buffer[buffer_size];
- packet.data=buffer;
- packet.size =buffer_size;
-
-
-
- int len;
- int frameFinished=0;
- while(av_read_frame(container,&packet)>=0)
- {
-
- if(packet.stream_index==stream_id){
- //printf("Audio Frame read \n");
- int len=avcodec_decode_audio4(ctx,frame,&frameFinished,&packet);
- //frame->
- if(frameFinished){
- //printf("Finished reading Frame len : %d , nb_samples:%d buffer_size:%d line size: %d \n",len,frame->nb_samples,buffer_size,frame->linesize[0]);
- ao_play(adevice, (char*)frame->extended_data[0],frame->linesize[0] );
- }else{
- //printf("Not Finished\n");
- }
-
- }else {
- printf("Someother packet possibly Video\n");
- }
-
-
- }
-
- av_close_input_file(container);
- ao_shutdown();
- return 0;
-} \ No newline at end of file
diff --git a/avcodec_audio_example1.c b/avcodec_audio_example1.c
deleted file mode 100644
index b296c00..0000000
--- a/avcodec_audio_example1.c
+++ /dev/null
@@ -1,93 +0,0 @@
-bool Render_context::load_audio(string &filename){
- //load audio into memory and create thumbnail
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int len;
- FILE *f;
- uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
- AVPacket avpkt;
- AVFrame *decoded_frame = NULL;
-
- av_init_packet(&avpkt);
-
- // http://stackoverflow.com/questions/9799560/decode-audio-using-libavcodec-and-play-using-libao
-
- /* find the mpeg audio decoder */
- codec = avcodec_find_decoder(AV_CODEC_ID_MP2);
- if (!codec) {
- fprintf(stderr, "Codec not found\n");
- return false;
- }
-
- c = avcodec_alloc_context3(codec);
- if (!c) {
- fprintf(stderr, "Could not allocate audio codec context\n");
- return false;
- }
-
- /* open it */
- if (avcodec_open2(c, codec, NULL) < 0) {
- fprintf(stderr, "Could not open codec\n");
- return false;
- }
-
- f = fopen(filename.c_str(), "rb");
- if (!f) {
- fprintf(stderr, "Could not open %s\n", filename.c_str());
- return false;
- }
-
- /* decode until eof */
- avpkt.data = inbuf;
- avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);
-
- while (avpkt.size > 0) {
- int got_frame = 0;
-
- if (!decoded_frame) {
- if (!(decoded_frame = avcodec_alloc_frame())) {
- printf("Could not allocate audio frame\n");
- return false;
- }
- } else
- avcodec_get_frame_defaults(decoded_frame);
-
- len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
- if (len < 0) {
- fprintf(stderr, "Error while decoding\n");
- return false;
- }
- if (got_frame) {
- /* if a frame has been decoded, output it */
- int data_size = av_samples_get_buffer_size(NULL, c->channels,decoded_frame->nb_samples,c->sample_fmt, 1);
- //fwrite(decoded_frame->data[0], 1, data_size, outfile);
-
- //here is where we do something with the data
- //is it best to buffer it or do do all processing within a loop like this?
-
- }
- avpkt.size -= len;
- avpkt.data += len;
- avpkt.dts =
- avpkt.pts = AV_NOPTS_VALUE;
- if (avpkt.size < AUDIO_REFILL_THRESH) {
- /* Refill the input buffer, to avoid trying to decode
- * incomplete frames. Instead of this, one could also use
- * a parser, or use a proper container format through
- * libavformat. */
- memmove(inbuf, avpkt.data, avpkt.size);
- avpkt.data = inbuf;
- len = fread(avpkt.data + avpkt.size, 1,AUDIO_INBUF_SIZE - avpkt.size, f);
- if (len > 0)
- avpkt.size += len;
- }
- }
-
- fclose(f);
-
- avcodec_close(c);
- av_free(c);
- avcodec_free_frame(&decoded_frame);
-
- return true;
-} \ No newline at end of file
diff --git a/avcodec_audio_example2.c b/avcodec_audio_example2.c
deleted file mode 100644
index 6546d3f..0000000
--- a/avcodec_audio_example2.c
+++ /dev/null
@@ -1,143 +0,0 @@
-//this seems to be obsolete!!!!!!!!!!!!!!!!!
-
-
-
-
-bool Render_context::load_audio(string &filename){
- //load audio into memory and create thumbnail
-
- av_register_all();
- avcodec_register_all();
- //av_register_all();
- //av_ini
-
- AVFormatContext* container=avformat_alloc_context();
- if(avformat_open_input(&container,filename.c_str(),NULL,NULL)<0){
- cerr << "Could not open file" << endl;
- return false;
- }
-
-//header in avformat.h definition in utils.c in ffmpeg/libavformat
-//int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
-//set input or dictionary??
-
-
- if(av_find_stream_info(container)<0){
- cerr << "Could not find file info"<< endl;
- return false;
- }
-
- //added to try and locate missing audio streams
- //container->flags |= AVFMT_FLAG_NONBLOCK;
- //
- cerr << "found " << container->nb_streams << " streams" << endl;
- av_dump_format(container,0,filename.c_str(),false);
- cerr << "found " << container->nb_streams << " streams" << endl;
-
- //typedef struct AVFormatContext {
- // unsigned int nb_streams;
- //AVStream **streams;
- /**
- * A list of all streams in the file. New streams are created with
- * avformat_new_stream().
- *
- * decoding: streams are created by libavformat in avformat_open_input().
- * If AVFMTCTX_NOHEADER is set in ctx_flags, thandroid on linux i386en new streams may also
- * appear in av_read_frame().
- * encoding: streams are created by the user before avformat_write_header().
- */
-
- int stream_id=-1;
- int i;
- for(i=0;i<container->nb_streams;i++){
- cerr << "stream " << i << ": codec type " << container->streams[i]->codec->codec_type << endl;
- if(container->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){
- stream_id=i;
- break;
- }
- }
- if(stream_id==-1){
- cerr << "Could not find Audio Stream"<< endl;
- return false;
- }
-
- AVDictionary *metadata=container->metadata;
-
- AVCodecContext *ctx=container->streams[stream_id]->codec;
- AVCodec *codec=avcodec_find_decoder(ctx->codec_id);
-
- if(codec==NULL){
- cerr <<"cannot find codec!"<< endl;
- return false;
- }
-
- if(avcodec_open(ctx,codec)<0){
- cerr <<"Codec cannot be found"<< endl;
- return false;
- }
-
- //ctx=avcodec_alloc_context3(codec);
-
- AVSampleFormat sfmt=ctx->sample_fmt;
- if(sfmt==AV_SAMPLE_FMT_U8){
- printf("U8\n");
-
- //sformat.bits=8;
- }else if(sfmt==AV_SAMPLE_FMT_S16){
- printf("S16\n");
- //sformat.bits=16;
- }else if(sfmt==AV_SAMPLE_FMT_S32){
- printf("S32\n");
- //sformat.bits=32;
- }
-
- // sformat.channels=ctx->channels;
- // sformat.rate=ctx->sample_rate;
- // sformat.byte_format=AO_FMT_NATIVE;
-// sformat.matrix=0;
-
-
-
- AVPacket packet;
- av_init_packet(&packet);
-
- AVFrame *frame=avcodec_alloc_frame();
-
-
-
- int buffer_size=AVCODEC_MAX_AUDIO_FRAME_SIZE+ FF_INPUT_BUFFER_PADDING_SIZE;;
- uint8_t buffer[buffer_size];
- packet.data=buffer;
- packet.size =buffer_size;
-
-
-
- int len;
- int frameFinished=0;
- while(av_read_frame(container,&packet)>=0)
- {
-
- if(packet.stream_index==stream_id){
- //printf("Audio Frame read \n");
- int len=avcodec_decode_audio4(ctx,frame,&frameFinished,&packet);
- //frame->
- if(frameFinished){
- //printf("Finished reading Frame len : %d , nb_samples:%d buffer_size:%d line size: %d \n",len,frame->nb_samples,buffer_size,frame->linesize[0]);
- //ao_play(adevice, (char*)frame->extended_data[0],frame->linesize[0] );
-
- //DO SOMETHING WITH THE DATA HERE
- }else{
- //printf("Not Finished\n");
- }
-
- }else {
- cerr << "Avcodec found some other packet possibly Video\n";
- }
-
-
- }
-
- av_close_input_file(container);
-
- return true;
-} \ No newline at end of file
diff --git a/avcodec_audio_example3-c++11.c b/avcodec_audio_example3-c++11.c
deleted file mode 100644
index ddb88db..0000000
--- a/avcodec_audio_example3-c++11.c
+++ /dev/null
@@ -1,120 +0,0 @@
- av_register_all();
-
- std::shared_ptr<AVFormatContext> avFormat(avformat_alloc_context(), &avformat_free_context);
-
- auto avFormatPtr = avFormat.get();
- if (avformat_open_input(&avFormatPtr,filename.c_str(),nullptr, nullptr) != 0) {
- cerr <<"Rotor: Error while calling avformat_open_input (probably invalid file format)" << endl;
- return false;
- }
-
- if (avformat_find_stream_info(avFormat.get(), nullptr) < 0) {
- cerr << "Rotor: Error while calling avformat_find_stream_info" << endl;
- return false;
- }
-
- av_dump_format(avFormat.get(), 0, 0, false); //avformat.h line 1256
-
- AVStream* stream = nullptr;
- for (unsigned int i = 0; i < avFormat->nb_streams; ++i) {
- if (avFormat->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
- // we've found a video stream!
- stream = avFormat->streams[i];
- break;
- }
- }
- if (!stream) {
- cerr <<"Rotor: Didn't find any audio stream in the file"<< endl;
- return false;
- }
-
- // getting the required codec structure
- const auto codec = avcodec_find_decoder(stream->codec->codec_id); //returns AVCodec*
- if (codec == nullptr) {
- cerr <<"Rotor: Audio codec not available"<< endl;
- return false;
- }
-
- //AVCodecContext?? avFormat->streams[i]->codec
-
- // allocating a structure
- std::shared_ptr<AVCodecContext> audioCodec(avcodec_alloc_context3(codec), [](AVCodecContext* c) { avcodec_close(c); av_free(c); });
-
- /* extradata???
- // we need to make a copy of videoStream->codec->extradata and give it to the context
- // make sure that this vector exists as long as the avVideoCodec exists
- std::vector codecContextExtraData(stream->codec->extradata, stream->codec->extradata + stream->codec->extradata_size);
- audioCodec->extradata = reinterpret_cast(codecContextExtraData.data());
- audioCodec->extradata_size = codecContextExtraData.size();
-
- // initializing the structure by opening the codec
- if (avcodec_open2(avVideoCodec.get(), codec, nullptr) < 0) {
- cerr <<"Rotor: Could not open codec"<< endl;
- return false;
- }
- */
-
- //avcodec.h line 1026
-
-
- Packet packet(avFormat.get());
- if (packet.packet.data == nullptr) {
- //done
- return true;
- }
-
- cerr << "audio codec context - sample rate: "<< audioCodec->sample_rate <<", channels: "<<audioCodec->channels<<", sample format: "<<audioCodec->sample_fmt<<endl;
-
-
- do {
- packet.reset(avFormat.get());
- if (packet.packet.stream_index != stream->index)
- continue; // the packet is not about the video stream we want, let's jump again the start of the loop
- } while(0);
-
- // allocating an AVFrame
- std::shared_ptr<AVFrame> avFrame(avcodec_alloc_frame(), &av_free);
-
- // the current packet of data
- //Packet packet;
- // data in the packet of data already processed
- size_t offsetInData = 0;
-
-
-
- /*
- // the decoding loop, running until EOF
- while (true) {
- // reading a packet using libavformat
- if (offsetInData >= packet.packet.size) {
- do {
- packet.reset(avFormat.get());
- if (packet.stream_index != videoStream->index)
- continue;
- } while(0);
- }
-
- // preparing the packet that we will send to libavcodec
- AVPacket packetToSend;
- packetToSend.data = packet.packet.data + offsetInData;
- packetToSend.size = packet.packet.size - offsetInData;
-
- // sending data to libavcodec
- int isFrameAvailable = 0;
- const auto processedLength = avcodec_decode_video2(avVideoCodec.get(), avFrame.get(), &isFrameAvailable, &packetToSend);
- if (processedLength < 0) {
- av_free_packet(&packet);
- throw std::runtime_error("Error while processing the data");
- }
- offsetInData += processedLength;
-
- // processing the image if available
- if (isFrameAvailable) {
- // display image on the screen
-
- // sleeping until next frame
- const auto msToWait = avVideoContext->ticks_per_frame * 1000 * avVideoContext->time_base.num / avVideoContext->time_base.den;
- std::this_thread::sleep(std::chrono::milliseconds(msToWait));
- }
- }
- */ \ No newline at end of file
diff --git a/interfaces.h b/interfaces.h
deleted file mode 100644
index 0210ad8..0000000
--- a/interfaces.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Native linux applicatioon with no graphic interface
-runs as a daemon and is managed remotely via socket etc
-
-debian - -any problems with proprietary codecs etc?
-
-is it called from ruby on rails?
-is the best way a RESTful interface?
-
-what's the best library to create a native server that implements http RESTful server
-??boost++??
-
-rendering- begins a thread
-eventually - manage threads and create new servers on EC2
-
-eventually - detailed memory management
-"rendering engine will probably be completely rewritten"
-
-the part that WON'T be rewritten is the meta-language that templates are written in
-
-renderGraph is a graph of loaded objects
-method to traverse graph, get preview image etc
-node knows where it sits on the canvas **here** - GUI doesn't keep its own state
-properties of a node - connections + time
-nodes are timeline based as well as flow- timeline is created when the song is analysed-
-
-node-time interface
-1- timeless node - applies equally to all frames
-2- node with in and out points - mainly for footage
-3- node with absolute keyframes - added manually to relate to an actual song
-4- node with meta-keyframes - belonging to a template, these relate to instantiable music feature cues
-
-2 types of graphs - instanced and abstract
-
-
-*/
-
-class rotor_renderer() {
- startRender(rotor_renderSettings *settings);
- rotor_renderStatus getRenderStatus(rotor_threadID id);
- rotor_renderProcess *activeRenders;
-};
-
-class rotor_renderSettings() {
- vector<string> inputFiles;
- rotor_renderGraphDescription graph;
- string output;
-};
-
-class rotror_renderProcess() {
-};
-
-class rotor_managerInterface() {
- TCPserver server;
-}
-
-class rotor_renderGraphManager() {
- rotor_renderGraph renderGraph;
-
-};
-
-class rotor_renderGraph() {
-};
-
-class rotor_renderNode() {
-};
-
-
diff --git a/interfaces01.h b/interfaces01.h
deleted file mode 100644
index 00971fc..0000000
--- a/interfaces01.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Native linux applicatioon with no graphic interface
-runs as a daemon and is managed remotely via socket etc
-
-debian - -any problems with proprietary codecs etc?
-
-is it called from ruby on rails?
-is the best way a RESTful interface?
-
-what's the best library to create a native server that implements http RESTful server
-??boost++??
-
-rendering- begins a thread
-eventually - manage threads and create new servers on EC2
-
-eventually - detailed memory management
-"rendering engine will probably be completely rewritten"
-
-the part that WON'T be rewritten is the meta-language that templates are written in
-
-renderGraph is a graph of loaded objects
-method to traverse graph, get preview image etc
-node knows where it sits on the canvas **here** - GUI doesn't keep its own state
-properties of a node - connections + time
-nodes are timeline based as well as flow- timeline is created when the song is analysed-
-
-node-time interface
-1- timeless node - applies equally to all frames
-2- node with in and out points - mainly for footage
-3- node with absolute keyframes - added manually to relate to an actual song
-4- node with meta-keyframes - belonging to a template, these relate to instantiable music feature cues
-
-2 types of graphs - instanced and abstract - distinct?
-
-build it up from the smallest interface or down from the top?
-try and make the simplest interface that can support the described features
-
-==> for now, no distinction between instanced and abstract graph except filling in filenames etc
-
-using POCO application framework seems good
-what remains to be defined?
-
-*/
-
-class rotor_renderer {
- startRender(rotor_renderSettings *settings);
- rotor_renderStatus getRenderStatus(rotor_threadID id);
- rotor_renderProcess *activeRenders;
-};
-
-class rotor_renderSettings {
- vector<string> inputFiles;
- rotor_renderGraphDescription graph;
- string outputFile;
- rotor_format renderFormat;
-};
-
-class rotor_format{
- //describes the output format of a video render
- string vcodec;
- string acodec;
- int w,h;
-}
-
-class rotor_renderProcess {
-};
-
-class rotor_managerInterface {
- TCPserver server;
-}
-
-class rotor_graphManager {
- rotor_renderGraph renderGraph;
-
-};
-
-class rotor_graph {
-};
-
-class rotor_node {
-};
-
-
diff --git a/interfaces02.h b/interfaces02.h
deleted file mode 100644
index 9960828..0000000
--- a/interfaces02.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-requirement driven design
-
-do we store graphs as files or in a db with UUID as key?
-
-do we traverse the graph as direct recursive function calls or programmatically from outside?
-or keep a reference to the container graph in each node?
-
-graph parent;
-vector<signal_input> signal_inputs;
-vector<image_input> image_inputs;
-
-//in input
-int input_id;
-
-
-&image get_ouput()
-{
- for (int i=0;i<inputs.size;i++){
- if (inputs[i].input_id) parent.nodes[input_id].get_output(); ///how to find the output in the node? uids for everything?
- }
-
- render();
- return &image_data;
-}
-
-OR
-
-for (int i=0;i<inputs.size;i++){
- if (inputs[i].connection) inputs[i].connection->get_output(); ///methinks this is neater? you can check pointer for NULL, can't be ref
-}
-
-NO NODE HAS MORE THAN ONE OUTPUT
-WE DON'T LINK TO AN OUTPUT OBJECT WE LINK TO THE NODE - GET_OUTPUT IS THE RENDER FUNCTION
-
-settings - how do we deal with settings being controllable
-signal inputs can have a gui representation as well
-other gui items don't have an input
-
-scaling to come
-
-time is always in floating points seconds - time has to be requested when rendering - either a preview
-what about testing a float for equality?
-maybe we should look at time in int (frames) - - what does this imply
-
-
-
-*/
-
-#define ROTOR_READY 0
-#define ROTOR_ANALYSING_AUDIO 1
-#define ROTOR_CREATING_PREVIEW 2
-#define ROTOR_RENDERING 3
-
-namespace Rotor {
- class Render_status{
- public:
- int id;
- float progress;
- }
- class Render_requirements{
- public:
- int num_performances;
- int num_clips;
- }
- class Render_context{ //Poco thread object
- //manages access to the 'patchbay'
- //high level interfaces for the wizard
- //and low level interface onto the graph
- public:
- Render_status get_status();
- void cancel(); //interrupt locking process
- int make_preview(int nodeID, float time); //starts a frame preview - returns status code - how to retrieve?
- int load_graph(Poco::UUID uid);
- Poco::UUID save_graph(); //returns UUID of saved graph
- int load_audio(string filename);
- Render_requirements get_requirements();
- int load_video(int num,string filename); //can be performance or clip
-
- private:
- int status;
- float progress; //for a locking process: audio analysis or rendering
-
- }
- class Graph{
- public:
- Poco::UUID uid; //every version of a graph has a UUID
- private:
- unordered_map<int,Base_node> nodes;
- }
- class Input{
- public:
- Node* connection;
-
- };
- class Image_input: public Base_input{
- public:
-
- };
- class Signal_input: public Base_input{
- public:
-
- };
- class Node{
- public:
- Poco::UUID uid; //every usable node has a UUID
- int id;
- vector<Signal_input> inputs; //simple node has signal inputs and outputs
- void gather_inputs(float time) {
- for (int i=0;i<inputs.size;i++){
- if (inputs[i].connection) inputs[i].connection->get_output();
- }
- }
- virtual &float get_ouput(float time);
-
- };
- class Image_node: public Node{
- public:
- vector<Image_input> image_inputs; //image node also has image inputs and outputs
- void gather_inputs(float time) {
- for (int i=0;i<inputs.size;i++){
- if (inputs[i].connection) inputs[i].connection->get_output();
- }
- }
- &Image get_ouput(float time){ //sample implementation
- gather_inputs();
- //do something: i.e
-
- //and then
- return &image_data;
- }
- void get_preview(float time);
- private:
- Image* image; //this can be privately allocated or just passed on as the node see fit
- float image_time;
- };
-}
-
-/*
-coding style
-Types begin with a capital, use underscore as a seperator
-*/ \ No newline at end of file
diff --git a/libavformat_output-example.c b/libavformat_output-example.c
deleted file mode 100644
index 496b7f8..0000000
--- a/libavformat_output-example.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * Copyright (c) 2003 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * libavformat API example.
- *
- * @example libavformat/output-example.c
- * Output a media file in any supported libavformat format.
- * The default codecs are used.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include "libavutil/mathematics.h"
-#include "libavformat/avformat.h"
-#include "libswscale/swscale.h"
-
-/* 5 seconds stream duration */
-#define STREAM_DURATION 5.0
-#define STREAM_FRAME_RATE 25 /* 25 images/s */
-#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
-#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P /* default pix_fmt */
-
-static int sws_flags = SWS_BICUBIC;
-
-/**************************************************************/
-/* audio output */
-
-static float t, tincr, tincr2;
-static int16_t *samples;
-static int audio_input_frame_size;
-
-/*
- * add an audio output stream
- */
-static AVStream *add_audio_stream(AVFormatContext *oc, enum AVCodecID codec_id)
-{
- AVCodecContext *c;
- AVStream *st;
- AVCodec *codec;
-
- /* find the audio encoder */
- codec = avcodec_find_encoder(codec_id);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- st = avformat_new_stream(oc, codec);
- if (!st) {
- fprintf(stderr, "Could not alloc stream\n");
- exit(1);
- }
-
- c = st->codec;
-
- /* put sample parameters */
- c->sample_fmt = AV_SAMPLE_FMT_S16;
- c->bit_rate = 64000;
- c->sample_rate = 44100;
- c->channels = 2;
-
- // some formats want stream headers to be separate
- if (oc->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- return st;
-}
-
-static void open_audio(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
-
- c = st->codec;
-
- /* open it */
- if (avcodec_open2(c, NULL, NULL) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- /* init signal generator */
- t = 0;
- tincr = 2 * M_PI * 110.0 / c->sample_rate;
- /* increment frequency by 110 Hz per second */
- tincr2 = 2 * M_PI * 110.0 / c->sample_rate / c->sample_rate;
-
- if (c->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)
- audio_input_frame_size = 10000;
- else
- audio_input_frame_size = c->frame_size;
- samples = av_malloc(audio_input_frame_size *
- av_get_bytes_per_sample(c->sample_fmt) *
- c->channels);
-}
-
-/* Prepare a 16 bit dummy audio frame of 'frame_size' samples and
- * 'nb_channels' channels. */
-static void get_audio_frame(int16_t *samples, int frame_size, int nb_channels)
-{
- int j, i, v;
- int16_t *q;
-
- q = samples;
- for (j = 0; j < frame_size; j++) {
- v = (int)(sin(t) * 10000);
- for (i = 0; i < nb_channels; i++)
- *q++ = v;
- t += tincr;
- tincr += tincr2;
- }
-}
-
-static void write_audio_frame(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
- AVPacket pkt = { 0 }; // data and size must be 0;
- AVFrame *frame = avcodec_alloc_frame();
- int got_packet;
-
- av_init_packet(&pkt);
- c = st->codec;
-
- get_audio_frame(samples, audio_input_frame_size, c->channels);
- frame->nb_samples = audio_input_frame_size;
- avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt,
- (uint8_t *)samples,
- audio_input_frame_size *
- av_get_bytes_per_sample(c->sample_fmt) *
- c->channels, 1);
-
- avcodec_encode_audio2(c, &pkt, frame, &got_packet);
- if (!got_packet)
- return;
-
- pkt.stream_index = st->index;
-
- /* Write the compressed frame to the media file. */
- if (av_interleaved_write_frame(oc, &pkt) != 0) {
- fprintf(stderr, "Error while writing audio frame\n");
- exit(1);
- }
- avcodec_free_frame(&frame);
-}
-
-static void close_audio(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
-
- av_free(samples);
-}
-
-/**************************************************************/
-/* video output */
-
-static AVFrame *picture, *tmp_picture;
-static int frame_count;
-
-/* Add a video output stream. */
-static AVStream *add_video_stream(AVFormatContext *oc, enum AVCodecID codec_id)
-{
- AVCodecContext *c;
- AVStream *st;
- AVCodec *codec;
-
- /* find the video encoder */
- codec = avcodec_find_encoder(codec_id);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- st = avformat_new_stream(oc, codec);
- if (!st) {
- fprintf(stderr, "Could not alloc stream\n");
- exit(1);
- }
-
- c = st->codec;
-
- /* Put sample parameters. */
- c->bit_rate = 400000;
- /* Resolution must be a multiple of two. */
- c->width = 352;
- c->height = 288;
- /* timebase: This is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented. For fixed-fps content,
- * timebase should be 1/framerate and timestamp increments should be
- * identical to 1. */
- c->time_base.den = STREAM_FRAME_RATE;
- c->time_base.num = 1;
- c->gop_size = 12; /* emit one intra frame every twelve frames at most */
- c->pix_fmt = STREAM_PIX_FMT;
- if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
- /* just for testing, we also add B frames */
- c->max_b_frames = 2;
- }
- if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
- /* Needed to avoid using macroblocks in which some coeffs overflow.
- * This does not happen with normal video, it just happens here as
- * the motion of the chroma plane does not match the luma plane. */
- c->mb_decision = 2;
- }
- /* Some formats want stream headers to be separate. */
- if (oc->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- return st;
-}
-
-static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)
-{
- AVFrame *picture;
- uint8_t *picture_buf;
- int size;
-
- picture = avcodec_alloc_frame();
- if (!picture)
- return NULL;
- size = avpicture_get_size(pix_fmt, width, height);
- picture_buf = av_malloc(size);
- if (!picture_buf) {
- av_free(picture);
- return NULL;
- }
- avpicture_fill((AVPicture *)picture, picture_buf,
- pix_fmt, width, height);
- return picture;
-}
-
-static void open_video(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
-
- c = st->codec;
-
- /* open the codec */
- if (avcodec_open2(c, NULL, NULL) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- /* Allocate the encoded raw picture. */
- picture = alloc_picture(c->pix_fmt, c->width, c->height);
- if (!picture) {
- fprintf(stderr, "Could not allocate picture\n");
- exit(1);
- }
-
- /* If the output format is not YUV420P, then a temporary YUV420P
- * picture is needed too. It is then converted to the required
- * output format. */
- tmp_picture = NULL;
- if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
- tmp_picture = alloc_picture(AV_PIX_FMT_YUV420P, c->width, c->height);
- if (!tmp_picture) {
- fprintf(stderr, "Could not allocate temporary picture\n");
- exit(1);
- }
- }
-}
-
-/* Prepare a dummy image. */
-static void fill_yuv_image(AVFrame *pict, int frame_index,
- int width, int height)
-{
- int x, y, i;
-
- i = frame_index;
-
- /* Y */
- for (y = 0; y < height; y++)
- for (x = 0; x < width; x++)
- pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
-
- /* Cb and Cr */
- for (y = 0; y < height / 2; y++) {
- for (x = 0; x < width / 2; x++) {
- pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
- pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
- }
- }
-}
-
-static void write_video_frame(AVFormatContext *oc, AVStream *st)
-{
- int ret;
- AVCodecContext *c;
- static struct SwsContext *img_convert_ctx;
-
- c = st->codec;
-
- if (frame_count >= STREAM_NB_FRAMES) {
- /* No more frames to compress. The codec has a latency of a few
- * frames if using B-frames, so we get the last frames by
- * passing the same picture again. */
- } else {
- if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
- /* as we only generate a YUV420P picture, we must convert it
- * to the codec pixel format if needed */
- if (img_convert_ctx == NULL) {
- img_convert_ctx = sws_getContext(c->width, c->height,
- AV_PIX_FMT_YUV420P,
- c->width, c->height,
- c->pix_fmt,
- sws_flags, NULL, NULL, NULL);
- if (img_convert_ctx == NULL) {
- fprintf(stderr,
- "Cannot initialize the conversion context\n");
- exit(1);
- }
- }
- fill_yuv_image(tmp_picture, frame_count, c->width, c->height);
- sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
- 0, c->height, picture->data, picture->linesize);
- } else {
- fill_yuv_image(picture, frame_count, c->width, c->height);
- }
- }
-
- if (oc->oformat->flags & AVFMT_RAWPICTURE) {
- /* Raw video case - the API will change slightly in the near
- * future for that. */
- AVPacket pkt;
- av_init_packet(&pkt);
-
- pkt.flags |= AV_PKT_FLAG_KEY;
- pkt.stream_index = st->index;
- pkt.data = (uint8_t *)picture;
- pkt.size = sizeof(AVPicture);
-
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- AVPacket pkt = { 0 };
- int got_packet;
- av_init_packet(&pkt);
-
- /* encode the image */
- ret = avcodec_encode_video2(c, &pkt, picture, &got_packet);
- /* If size is zero, it means the image was buffered. */
- if (!ret && got_packet && pkt.size) {
- if (pkt.pts != AV_NOPTS_VALUE) {
- pkt.pts = av_rescale_q(pkt.pts,
- c->time_base, st->time_base);
- }
- if (pkt.dts != AV_NOPTS_VALUE) {
- pkt.dts = av_rescale_q(pkt.dts,
- c->time_base, st->time_base);
- }
- pkt.stream_index = st->index;
-
- /* Write the compressed frame to the media file. */
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- ret = 0;
- }
- }
- if (ret != 0) {
- fprintf(stderr, "Error while writing video frame\n");
- exit(1);
- }
- frame_count++;
-}
-
-static void close_video(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
- av_free(picture->data[0]);
- av_free(picture);
- if (tmp_picture) {
- av_free(tmp_picture->data[0]);
- av_free(tmp_picture);
- }
-}
-
-/**************************************************************/
-/* media file output */
-
-int main(int argc, char **argv)
-{
- const char *filename;
- 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();
-
- if (argc != 2) {
- printf("usage: %s output_file\n"
- "API example program to output a media file with libavformat.\n"
- "The output format is automatically guessed according to the file extension.\n"
- "Raw images can also be output by using '%%d' in the filename\n"
- "\n", argv[0]);
- return 1;
- }
-
- filename = argv[1];
-
- /* Autodetect the output format from the name. default is MPEG. */
- fmt = av_guess_format(NULL, filename, NULL);
- if (!fmt) {
- printf("Could not deduce output format from file extension: using MPEG.\n");
- fmt = av_guess_format("mpeg", NULL, NULL);
- }
- if (!fmt) {
- fprintf(stderr, "Could not find suitable output format\n");
- return 1;
- }
-
- /* Allocate the output media context. */
- oc = avformat_alloc_context();
- if (!oc) {
- fprintf(stderr, "Memory error\n");
- return 1;
- }
- 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) {
- fprintf(stderr, "Could not open '%s'\n", filename);
- return 1;
- }
- }
-
- /* Write the stream header, if any. */
- avformat_write_header(oc, NULL);
-
- for (;;) {
- /* Compute current audio and video time. */
- if (audio_st)
- audio_pts = (double)audio_st->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 0;
-}
diff --git a/nodeList.xml b/nodeList.xml
deleted file mode 100644
index 57605c3..0000000
--- a/nodeList.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<node ID="01" type="audioLoader">music track to analyse
- <output ID="01" type="graph">beat (sawtooth)</output>
- <output ID="02" type="graph">pitch</output>
- <output ID="03" type="graph">excitement</output>
-</node>
-<node ID="02" type="imageloader" thumbnail="">video or image
- <output ID="01" type="RGB"/>
- <output ID="02" type="RGBA"/>
- <output ID="03" type="RGBZ"/>
- <output ID="04" type="LUM"/>
-</node>
-<node ID="03" type="videoBank" mode="pingpong">
- <clip ID="01" file="sample.mov"/>
- <input ID="01" fromID="01.01" type="graph"/>cycle
- <input ID="02" fromID="01.01" type="graph"/>random
- <output ID="02" type="RGB"/>
-</node>
-
-
-<node ID="05" UID="d9926bc4-720d-11e2-ad07-0fe64abef8bd" thumbnail="switch.png">Toggle switch
- <setting ID="01" type="switch" name="mode" value="1" min="0" max="1">Mode</setting>
- <setting ID="02" type="int" name="control" value="1">Control</setting>
- <input ID="03" type="RGB">Input 1</input>
- <input ID="04" type="RGB">Input 2</input>
- <output ID="05" toID="07.02" type="RGB">Output</output>
-</node>
diff --git a/onandoff.xml b/onandoff.xml
deleted file mode 100644
index dec3a05..0000000
--- a/onandoff.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<patchbay ID="0f7aa258-7c2f-11e2-abbd-133252267708">Off and on template ©Rotor 2013
- <node ID="01" type="audioLoader">music track to analyse
- <output ID="01" type="graph">beat (sawtooth)</output>
- <output ID="03" type="graph">excitement</output>
- </node>
- <node ID="02" type="imageLoader" thumbnail="performance1.jpg">performance take 1
- <output ID="01" type="image"/>
- </node>
- <node ID="03" type="imageLoader" thumbnail="performance1.jpg">performance take 2
- <output ID="01" type="image"/>
- </node>
- <node ID="04" type="==">1
- <input ID="01" from="01.01" type="graph"/>
- <output ID="02" type="graph"/>
- </node>
- <node ID="05" type="toggle switch" >
- <input ID="01" from="02.01" type="image"/>
- <input ID="02" from="03.01" type="image"/>
- <input ID="03" from="04.02" type="signal"/>
- <output ID="04" type="image"/>
- </node>
- <node ID="06" type="frequency/offset" frequency="0.25" offset="1">
- <input ID="01" from="01.01" type="graph"/>
- <output ID="02" type="graph"/>
- </node>
- <node ID="07" type="*">2
- <input ID="01" from="06.02" type="graph"/>
- <output ID="02" type="graph"/>
- </node>
- <node ID="08" type="==">1
- <input ID="01" from="06.02" type="graph"/>
- <output ID="02" type="graph"/>
- </node>
- <node ID="09" type="videoBank" mode="pingpong">
- <clip ID="01" file="sample.mov"/>
- <input ID="01" from="08.02" type="graph"/>cycle switch
- <output ID="02" type="image"/>
- </node>
- <node ID="10" type="shape" mode="triangle">
- <input ID="01" from="07.02" type="graph"/>scale
- <output ID="02" type="image"/>
- </node>
- <node ID="11" type="channel merge" >
- <input from="02.01" type="scale"/>
- <output ID="09" type="image"/>
- </node>
-</patchbay>
diff --git a/output-example.c b/output-example.c
deleted file mode 100644
index dd61cfe..0000000
--- a/output-example.c
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * Libavformat API example: Output a media file in any supported
- * libavformat format. The default codecs are used.
- *
- * Copyright (c) 2003 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include "libavformat/avformat.h"
-#include "libswscale/swscale.h"
-
-#undef exit
-
-/* 5 seconds stream duration */
-#define STREAM_DURATION 5.0
-#define STREAM_FRAME_RATE 25 /* 25 images/s */
-#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
-#define STREAM_PIX_FMT PIX_FMT_YUV420P /* default pix_fmt */
-
-static int sws_flags = SWS_BICUBIC;
-
-/**************************************************************/
-/* audio output */
-
-float t, tincr, tincr2;
-int16_t *samples;
-uint8_t *audio_outbuf;
-int audio_outbuf_size;
-int audio_input_frame_size;
-
-/*
- * add an audio output stream
- */
-static AVStream *add_audio_stream(AVFormatContext *oc, enum CodecID codec_id)
-{
- AVCodecContext *c;
- AVStream *st;
-
- st = av_new_stream(oc, 1);
- if (!st) {
- fprintf(stderr, "Could not alloc stream\n");
- exit(1);
- }
-
- c = st->codec;
- c->codec_id = codec_id;
- c->codec_type = AVMEDIA_TYPE_AUDIO;
-
- /* put sample parameters */
- c->bit_rate = 64000;
- c->sample_rate = 44100;
- c->channels = 2;
-
- // some formats want stream headers to be separate
- if(oc->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- return st;
-}
-
-static void open_audio(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
- AVCodec *codec;
-
- c = st->codec;
-
- /* find the audio encoder */
- codec = avcodec_find_encoder(c->codec_id);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- /* open it */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- /* init signal generator */
- t = 0;
- tincr = 2 * M_PI * 110.0 / c->sample_rate;
- /* increment frequency by 110 Hz per second */
- tincr2 = 2 * M_PI * 110.0 / c->sample_rate / c->sample_rate;
-
- audio_outbuf_size = 10000;
- audio_outbuf = av_malloc(audio_outbuf_size);
-
- /* ugly hack for PCM codecs (will be removed ASAP with new PCM
- support to compute the input frame size in samples */
- if (c->frame_size <= 1) {
- audio_input_frame_size = audio_outbuf_size / c->channels;
- switch(st->codec->codec_id) {
- case CODEC_ID_PCM_S16LE:
- case CODEC_ID_PCM_S16BE:
- case CODEC_ID_PCM_U16LE:
- case CODEC_ID_PCM_U16BE:
- audio_input_frame_size >>= 1;
- break;
- default:
- break;
- }
- } else {
- audio_input_frame_size = c->frame_size;
- }
- samples = av_malloc(audio_input_frame_size * 2 * c->channels);
-}
-
-/* prepare a 16 bit dummy audio frame of 'frame_size' samples and
- 'nb_channels' channels */
-static void get_audio_frame(int16_t *samples, int frame_size, int nb_channels)
-{
- int j, i, v;
- int16_t *q;
-
- q = samples;
- for(j=0;j<frame_size;j++) {
- v = (int)(sin(t) * 10000);
- for(i = 0; i < nb_channels; i++)
- *q++ = v;
- t += tincr;
- tincr += tincr2;
- }
-}
-
-static void write_audio_frame(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
- AVPacket pkt;
- av_init_packet(&pkt);
-
- c = st->codec;
-
- get_audio_frame(samples, audio_input_frame_size, c->channels);
-
- pkt.size= avcodec_encode_audio(c, audio_outbuf, audio_outbuf_size, samples);
-
- if (c->coded_frame && c->coded_frame->pts != AV_NOPTS_VALUE)
- pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
- pkt.flags |= AV_PKT_FLAG_KEY;
- pkt.stream_index= st->index;
- pkt.data= audio_outbuf;
-
- /* write the compressed frame in the media file */
- if (av_interleaved_write_frame(oc, &pkt) != 0) {
- fprintf(stderr, "Error while writing audio frame\n");
- exit(1);
- }
-}
-
-static void close_audio(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
-
- av_free(samples);
- av_free(audio_outbuf);
-}
-
-/**************************************************************/
-/* video output */
-
-AVFrame *picture, *tmp_picture;
-uint8_t *video_outbuf;
-int frame_count, video_outbuf_size;
-
-/* add a video output stream */
-static AVStream *add_video_stream(AVFormatContext *oc, enum CodecID codec_id)
-{
- AVCodecContext *c;
- AVStream *st;
-
- st = av_new_stream(oc, 0);
- if (!st) {
- fprintf(stderr, "Could not alloc stream\n");
- exit(1);
- }
-
- c = st->codec;
- c->codec_id = codec_id;
- c->codec_type = AVMEDIA_TYPE_VIDEO;
-
- /* put sample parameters */
- c->bit_rate = 400000;
- /* resolution must be a multiple of two */
- c->width = 352;
- c->height = 288;
- /* time base: this is the fundamental unit of time (in seconds) in terms
- of which frame timestamps are represented. for fixed-fps content,
- timebase should be 1/framerate and timestamp increments should be
- identically 1. */
- c->time_base.den = STREAM_FRAME_RATE;
- c->time_base.num = 1;
- c->gop_size = 12; /* emit one intra frame every twelve frames at most */
- c->pix_fmt = STREAM_PIX_FMT;
- if (c->codec_id == CODEC_ID_MPEG2VIDEO) {
- /* just for testing, we also add B frames */
- c->max_b_frames = 2;
- }
- if (c->codec_id == CODEC_ID_MPEG1VIDEO){
- /* Needed to avoid using macroblocks in which some coeffs overflow.
- This does not happen with normal video, it just happens here as
- the motion of the chroma plane does not match the luma plane. */
- c->mb_decision=2;
- }
- // some formats want stream headers to be separate
- if(oc->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- return st;
-}
-
-static AVFrame *alloc_picture(enum PixelFormat pix_fmt, int width, int height)
-{
- AVFrame *picture;
- uint8_t *picture_buf;
- int size;
-
- picture = avcodec_alloc_frame();
- if (!picture)
- return NULL;
- size = avpicture_get_size(pix_fmt, width, height);
- picture_buf = av_malloc(size);
- if (!picture_buf) {
- av_free(picture);
- return NULL;
- }
- avpicture_fill((AVPicture *)picture, picture_buf,
- pix_fmt, width, height);
- return picture;
-}
-
-static void open_video(AVFormatContext *oc, AVStream *st)
-{
- AVCodec *codec;
- AVCodecContext *c;
-
- c = st->codec;
-
- /* find the video encoder */
- codec = avcodec_find_encoder(c->codec_id);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
-
- /* open the codec */
- if (avcodec_open(c, codec) < 0) {
- fprintf(stderr, "could not open codec\n");
- exit(1);
- }
-
- video_outbuf = NULL;
- if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) {
- /* allocate output buffer */
- /* XXX: API change will be done */
- /* buffers passed into lav* can be allocated any way you prefer,
- as long as they're aligned enough for the architecture, and
- they're freed appropriately (such as using av_free for buffers
- allocated with av_malloc) */
- video_outbuf_size = 200000;
- video_outbuf = av_malloc(video_outbuf_size);
- }
-
- /* allocate the encoded raw picture */
- picture = alloc_picture(c->pix_fmt, c->width, c->height);
- if (!picture) {
- fprintf(stderr, "Could not allocate picture\n");
- exit(1);
- }
-
- /* if the output format is not YUV420P, then a temporary YUV420P
- picture is needed too. It is then converted to the required
- output format */
- tmp_picture = NULL;
- if (c->pix_fmt != PIX_FMT_YUV420P) {
- tmp_picture = alloc_picture(PIX_FMT_YUV420P, c->width, c->height);
- if (!tmp_picture) {
- fprintf(stderr, "Could not allocate temporary picture\n");
- exit(1);
- }
- }
-}
-
-/* prepare a dummy image */
-static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
-{
- int x, y, i;
-
- i = frame_index;
-
- /* Y */
- for(y=0;y<height;y++) {
- for(x=0;x<width;x++) {
- pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
- }
- }
-
- /* Cb and Cr */
- for(y=0;y<height/2;y++) {
- for(x=0;x<width/2;x++) {
- pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
- pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
- }
- }
-}
-
-static void write_video_frame(AVFormatContext *oc, AVStream *st)
-{
- int out_size, ret;
- AVCodecContext *c;
- static struct SwsContext *img_convert_ctx;
-
- c = st->codec;
-
- if (frame_count >= STREAM_NB_FRAMES) {
- /* no more frame to compress. The codec has a latency of a few
- frames if using B frames, so we get the last frames by
- passing the same picture again */
- } else {
- if (c->pix_fmt != PIX_FMT_YUV420P) {
- /* as we only generate a YUV420P picture, we must convert it
- to the codec pixel format if needed */
- if (img_convert_ctx == NULL) {
- img_convert_ctx = sws_getContext(c->width, c->height,
- PIX_FMT_YUV420P,
- c->width, c->height,
- c->pix_fmt,
- sws_flags, NULL, NULL, NULL);
- if (img_convert_ctx == NULL) {
- fprintf(stderr, "Cannot initialize the conversion context\n");
- exit(1);
- }
- }
- fill_yuv_image(tmp_picture, frame_count, c->width, c->height);
- sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
- 0, c->height, picture->data, picture->linesize);
- } else {
- fill_yuv_image(picture, frame_count, c->width, c->height);
- }
- }
-
-
- if (oc->oformat->flags & AVFMT_RAWPICTURE) {
- /* raw video case. The API will change slightly in the near
- futur for that */
- AVPacket pkt;
- av_init_packet(&pkt);
-
- pkt.flags |= AV_PKT_FLAG_KEY;
- pkt.stream_index= st->index;
- pkt.data= (uint8_t *)picture;
- pkt.size= sizeof(AVPicture);
-
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- /* encode the image */
- out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);
- /* if zero size, it means the image was buffered */
- if (out_size > 0) {
- AVPacket pkt;
- av_init_packet(&pkt);
-
- if (c->coded_frame->pts != AV_NOPTS_VALUE)
- pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
- if(c->coded_frame->key_frame)
- pkt.flags |= AV_PKT_FLAG_KEY;
- pkt.stream_index= st->index;
- pkt.data= video_outbuf;
- pkt.size= out_size;
-
- /* write the compressed frame in the media file */
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- ret = 0;
- }
- }
- if (ret != 0) {
- fprintf(stderr, "Error while writing video frame\n");
- exit(1);
- }
- frame_count++;
-}
-
-static void close_video(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
- av_free(picture->data[0]);
- av_free(picture);
- if (tmp_picture) {
- av_free(tmp_picture->data[0]);
- av_free(tmp_picture);
- }
- av_free(video_outbuf);
-}
-
-/**************************************************************/
-/* media file output */
-
-int main(int argc, char **argv)
-{
- const char *filename;
- 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();
-
- if (argc != 2) {
- printf("usage: %s output_file\n"
- "API example program to output a media file with libavformat.\n"
- "The output format is automatically guessed according to the file extension.\n"
- "Raw images can also be output by using '%%d' in the filename\n"
- "\n", argv[0]);
- exit(1);
- }
-
- filename = argv[1];
-
- /* auto detect the output format from the name. default is
- mpeg. */
- fmt = av_guess_format(NULL, filename, NULL);
- if (!fmt) {
- printf("Could not deduce output format from file extension: using MPEG.\n");
- fmt = av_guess_format("mpeg", NULL, NULL);
- }
- if (!fmt) {
- fprintf(stderr, "Could not find suitable output format\n");
- exit(1);
- }
-
- /* allocate the output media context */
- oc = avformat_alloc_context();
- if (!oc) {
- fprintf(stderr, "Memory error\n");
- exit(1);
- }
- 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 != CODEC_ID_NONE) {
- video_st = add_video_stream(oc, fmt->video_codec);
- }
- if (fmt->audio_codec != CODEC_ID_NONE) {
- audio_st = add_audio_stream(oc, fmt->audio_codec);
- }
-
- /* set the output parameters (must be done even if no
- parameters). */
- if (av_set_parameters(oc, NULL) < 0) {
- fprintf(stderr, "Invalid output format parameters\n");
- exit(1);
- }
-
- dump_format(oc, 0, filename, 1);
-
- /* 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);
-
- /* open the output file, if needed */
- if (!(fmt->flags & AVFMT_NOFILE)) {
- if (url_fopen(&oc->pb, filename, URL_WRONLY) < 0) {
- fprintf(stderr, "Could not open '%s'\n", filename);
- exit(1);
- }
- }
-
- /* write the stream header, if any */
- av_write_header(oc);
-
- for(;;) {
- /* compute current audio and video time */
- if (audio_st)
- audio_pts = (double)audio_st->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 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 */
- url_fclose(oc->pb);
- }
-
- /* free the stream */
- av_free(oc);
-
- return 0;
-}
diff --git a/rotord/01.wav b/rotord/01.wav
deleted file mode 100644
index d82faee..0000000
--- a/rotord/01.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/02.mp3 b/rotord/02.mp3
deleted file mode 100644
index 9543612..0000000
--- a/rotord/02.mp3
+++ /dev/null
Binary files differ
diff --git a/rotord/02.wav b/rotord/02.wav
deleted file mode 100644
index 1a43e7d..0000000
--- a/rotord/02.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/1wave.mp3 b/rotord/1wave.mp3
deleted file mode 100644
index 040b65e..0000000
--- a/rotord/1wave.mp3
+++ /dev/null
Binary files differ
diff --git a/rotord/1wave.wav b/rotord/1wave.wav
deleted file mode 100644
index 0ae9d9b..0000000
--- a/rotord/1wave.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/delos.mp4 b/rotord/delos.mp4
deleted file mode 100755
index b295ca7..0000000
--- a/rotord/delos.mp4
+++ /dev/null
Binary files differ
diff --git a/rotord/delos.wav b/rotord/delos.wav
deleted file mode 100644
index cb29535..0000000
--- a/rotord/delos.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/silence.mp3 b/rotord/silence.mp3
deleted file mode 100644
index 888e669..0000000
--- a/rotord/silence.mp3
+++ /dev/null
Binary files differ
diff --git a/rotord/silence.wav b/rotord/silence.wav
deleted file mode 100644
index 24d262a..0000000
--- a/rotord/silence.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/wave.mp3 b/rotord/wave.mp3
deleted file mode 100644
index 96fd908..0000000
--- a/rotord/wave.mp3
+++ /dev/null
Binary files differ
diff --git a/rotord/wave.wav b/rotord/wave.wav
deleted file mode 100644
index 98ed9ca..0000000
--- a/rotord/wave.wav
+++ /dev/null
Binary files differ
diff --git a/rotord/wave_s.mp3 b/rotord/wave_s.mp3
deleted file mode 100644
index 10f55d4..0000000
--- a/rotord/wave_s.mp3
+++ /dev/null
Binary files differ
diff --git a/rotord/wave_s.wav b/rotord/wave_s.wav
deleted file mode 100644
index 618fb26..0000000
--- a/rotord/wave_s.wav
+++ /dev/null
Binary files differ
diff --git a/styleReq.xml b/styleReq.xml
deleted file mode 100644
index bc75880..0000000
--- a/styleReq.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<style description="Off and on style ©Rotor 2013">
-
-</style> \ No newline at end of file
diff --git a/testint.c b/testint.c
deleted file mode 100644
index 6521ba3..0000000
--- a/testint.c
+++ /dev/null
@@ -1,199 +0,0 @@
-extern "C" {
- #include "libavcodec/avcodec.h"
- #include "libavformat/avformat.h"
- #include "libavutil/opt.h"
- #include "libavutil/channel_layout.h"
- #include "libavutil/common.h"
- #include "libavutil/imgutils.h"
- #include "libavutil/mathematics.h"
- #include "libavutil/samplefmt.h"
-
- #include <libavutil/imgutils.h>
- #include <libavutil/samplefmt.h>
- //#include <libavutil/timestamp.h>
-}
-
-#include <libavutil/imgutils.h>
-#include <libavutil/samplefmt.h>
-
-#include <iostream>
-#include <fstream>
-
-
-int main(int argc, char** argv)
-{
- av_register_all();
-
- if (argc<1) {
- cerr<< "use: test audiofile" << endl;
- return 1;
- }
-
-
- AVFrame* frame = avcodec_alloc_frame();
- if (!frame)
- {
- std::cout << "Error allocating the frame" << std::endl;
- return false;
- }
-
- AVFormatContext* formatContext = NULL;
- if (avformat_open_input(&formatContext, filename.c_str(), NULL, NULL) != 0)
- {
- av_free(frame);
- std::cout << "Error opening the file" << std::endl;
- return false;
- }
-
-
- if (avformat_find_stream_info(formatContext, NULL) < 0)
- {
- av_free(frame);
- av_close_input_file(formatContext);
- std::cout << "Error finding the stream info" << std::endl;
- return false;
- }
-
- AVStream* audioStream = NULL;
- // Find the audio stream (some container files can have multiple streams in them)
- for (unsigned int i = 0; i < formatContext->nb_streams; ++i)
- {
- if (formatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
- {
- audioStream = formatContext->streams[i];
- break;
- }
- }
-
- if (audioStream == NULL)
- {
- av_free(frame);
- av_close_input_file(formatContext);
- std::cout << "Could not find any audio stream in the file" << std::endl;
- return false;
- }
-
- AVCodecContext* codecContext = audioStream->codec;
-
- codecContext->codec = avcodec_find_decoder(codecContext->codec_id);
- if (codecContext->codec == NULL)
- {
- av_free(frame);
- av_close_input_file(formatContext);
- std::cout << "Couldn't find a proper decoder" << std::endl;
- return false;
- }
- else if (avcodec_open2(codecContext, codecContext->codec, NULL) != 0)
- {
- av_free(frame);
- av_close_input_file(formatContext);
- std::cout << "Couldn't open the context with the decoder" << std::endl;
- return false;
- }
-
- /*
-
- //
- // why is the file truncated???
- //if(codecContext->codec->capabilities & CODEC_CAP_TRUNCATED) codecContext->codec->capabilities|=CODEC_FLAG_TRUNCATED;
- //
- //
-
- av_dump_format(formatContext, 0, 0, false); //avformat.h line 1256
- int samples = ((formatContext->duration + 5000)*codecContext->sample_rate)/AV_TIME_BASE;
-
- std::cout << "This stream has " << codecContext->channels << " channels, a sample rate of " << codecContext->sample_rate << "Hz and "<<samples <<" samples" << std::endl;
- std::cout << "The data is in format " <<codecContext->sample_fmt<< " (aka "<< av_get_sample_fmt_name(codecContext->sample_fmt) << ") "<<std::endl;
-
- //we can now tell the processors the format
- //we can work out the number of samples at this point
-
- for (auto p: processors) {
- p->init(codecContext->channels,16,samples);
- }
-
- AVPacket packet;
- av_init_packet(&packet);
- int sample_processed=0;
-
- bool diag=true;
-
- // Read the packets in a loop
- while (true)
- //while(sample_processed<samples)
- {
- int ret=av_read_frame(formatContext, &packet);
- if (ret<0) {
- cerr << "finished with code "<<ret <<(ret==AVERROR_EOF?" ,EOF":"")<<endl;
- break;
- }
- //av_read_frame(formatContext, &packet); //hangs once the packets have been read
- if (packet.stream_index == audioStream->index)
- {
- // Try to decode the packet into a frame
- int frameFinished = 0;
- int bytes = avcodec_decode_audio4(codecContext, frame, &frameFinished, &packet);
-
- // Some frames rely on multiple packets, so we have to make sure the frame is finished before
- // we can use it
- if (frameFinished)
- {
- // frame now has usable audio data in it. How it's stored in the frame depends on the format of
- // the audio. If it's packed audio, all the data will be in frame->data[0]. If it's in planar format,
- // the data will be in frame->data and possibly frame->extended_data. Look at frame->data, frame->nb_samples,
- // frame->linesize, and other related fields on the FFmpeg docs. I don't know how you're actually using
- // the audio data, so I won't add any junk here that might confuse you. Typically, if I want to find
- // documentation on an FFmpeg structure or function, I just type "<name> doxygen" into google (like
- // "AVFrame doxygen" for AVFrame's docs)
-
- //av_get_channel_layout_string (char *buf, int buf_size, int nb_channels, uint64_t channel_layout)
-
- if (diag) {
- cerr << "first frame: "<<bytes << ", "<<frame->nb_samples<<" samples in "<<av_get_sample_fmt_name(frame->format)<<" format with channel layout "<<frame->channel_layout<< std::endl;
- diag=false;
- }
-
- //std::cout << "Got a frame: bytes " << bytes << ", "<<frame->nb_samples<<" samples"<<std::endl;
- //now we can pass the data to the processor(s)
- for (auto p: processors) {
- sample_processed=p->process_frame(frame->data[0],frame->nb_samples);
- }
-
- mutex.lock();
- progress=((double)sample_processed)/samples;
- mutex.unlock();
- }
- }
- // You *must* call av_free_packet() after each call to av_read_frame() or else you'll leak memory
- av_free_packet(&packet); //crashes here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SIGSEV In _int_free (av=0xb4600010, p=0xb46025c8, have_lock=0) at malloc.c:4085 ()
- }
-
- // Some codecs will cause frames to be buffered up in the decoding process. If the CODEC_CAP_DELAY flag
- // is set, there can be buffered up frames that need to be flushed, so we'll do that
- if (codecContext->codec->capabilities & CODEC_CAP_DELAY)
- {
- av_init_packet(&packet);
- // Decode all the remaining frames in the buffer, until the end is reached
- int frameFinished = 0;
- int bytes = avcodec_decode_audio4(codecContext, frame, &frameFinished, &packet);
- while (bytes >= 0 && frameFinished)
- {
- for (auto p: processors) {
- p->process_frame(frame->data[0],frame->nb_samples);
- }
- mutex.lock();
- progress=((double)sample_processed)/samples;
- mutex.unlock();
- }
- }
-
- cerr << "finished processed: "<<sample_processed << " samples of "<<samples<<" , "<<((double)sample_processed*100)/samples<<"%"<< std::endl;
- */
-
- // Clean up!
- av_free(frame);
- avcodec_close(codecContext);
- av_close_input_file(formatContext);
-
- return 0;
-}