aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLeonard Kugis <leonardkugis@gmail.com>2018-01-31 23:30:33 +0100
committerLeonard Kugis <leonardkugis@gmail.com>2018-01-31 23:30:33 +0100
commit70d4ba8d3bfa3c5b219a8baf86d279adf5177d14 (patch)
treee8abd494366ecea9c1049f9ab28623dbf5cbb5d2 /src
parent4a7e84db9f956b1f1376c888a95e0e5c32a4ce9c (diff)
parentbe71fdbc86ac4ad86c48c083df3552a2ddce91e2 (diff)
Merge branch 'master' of https://collaborating.tuhh.de/cev7691/mandelbrot-zoom
Diffstat (limited to 'src')
-rw-r--r--src/creator.c71
-rw-r--r--src/creator.h37
-rw-r--r--src/render.c2
-rw-r--r--src/render_cpu.h1
4 files changed, 38 insertions, 73 deletions
diff --git a/src/creator.c b/src/creator.c
index 71a981f..d8bd008 100644
--- a/src/creator.c
+++ b/src/creator.c
@@ -1,5 +1,5 @@
-#include <creator.h>
-#include <render.h>
+#include "creator.h"
+#include "render.h"
static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
FILE *outfile)
@@ -19,38 +19,27 @@ static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
fprintf(stderr, "error during encoding\n");
exit(1);
}
- printf("encoded frame %3"PRId64" (size=%5d)\n", pkt->pts, pkt->size);
+ //printf("encoded frame %3"PRId64" (size=%5d)\n", pkt->pts, pkt->size);
fwrite(pkt->data, 1, pkt->size, outfile);
av_packet_unref(pkt);
}
}
-int generateVideo(filename, int width, int height, int fps, int bitRate, Config *config, u32 (*sfunc) (long double, long double, u32))
+int generateVideo(filename, int width, int height, int fps, int bitRate)
{
- const char *filename;
- const AVCodec *codec;
- AVCodecContext *c= NULL;
- int i, ret, x, y;
- FILE *f;
- AVFrame *picture;
- AVPacket *pkt;
- uint8_t endcode[] = { 0, 0, 1, 0xb7 };
- if (argc <= 1) {
- fprintf(stderr, "Usage: %s <output file>\n", argv[0]);
- exit(0);
- }
- filename = argv[1];
avcodec_register_all();
+
/* find the mpeg1video encoder */
- codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO);
- if (!codec) {
- fprintf(stderr, "codec not found\n");
- exit(1);
- }
- c = avcodec_alloc_context3(codec);
- picture = av_frame_alloc();
- pkt = av_packet_alloc();
- if (!pkt)
- exit(1);
+ codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO);
+ if (!codec) {
+ fprintf(stderr, "codec not found\n");
+ exit(1);
+ }
+ c = avcodec_alloc_context3(codec);
+
+ picture = av_frame_alloc();
+ pkt = av_packet_alloc();
+ if (!pkt)
+ exit(1);
/* put sample parameters */
c->bit_rate = bitRate;
@@ -90,28 +79,15 @@ int generateVideo(filename, int width, int height, int fps, int bitRate, Config
}
- /* encode 1 second of video */
- x_min_s = -2.0;
- x_max_s = 1.0;
- y_min_s= -1.0;
- y_max_s = 1.0;
- x_min = x_min_s;
- x_max = x_max_s;
- y_min = y_min_s;
- y_max = y_max_s;
- _config = config;
- _sfunc = sfunc;
- for(i=0;i<25;i++) {
+void addFrame(int *frame)
+{
fflush(stdout);
/* make sure the frame data is writable */
ret = av_frame_make_writable(picture);
if (ret < 0)
exit(1);
-
- s_arr = (u32 *) malloc((_config->width) * (_config->height) * sizeof(u32));
- calculate(x_min, y_min, x_max, y_max, _sfunc, s_arr);
- picture->data[0] = s_arr;
+ picture->data[0] = frame;
/* prepare a dummy image */
/* Y */
@@ -127,11 +103,15 @@ int generateVideo(filename, int width, int height, int fps, int bitRate, Config
picture->data[2][y * picture->linesize[2] + x] = 64 + x + i * 5;
}
} */
+
picture->pts = i;
/* encode the image */
encode(c, picture, pkt, f);
- }
- /* flush the encoder */
+}
+
+void endFile(void){
+ uint8_t endcode[] = { 0, 0, 1, 0xb7 };
+ /* flush the encoder */
encode(c, NULL, pkt, f);
/* add sequence end code to have a real MPEG file */
fwrite(endcode, 1, sizeof(endcode), f);
@@ -139,5 +119,4 @@ int generateVideo(filename, int width, int height, int fps, int bitRate, Config
avcodec_free_context(&c);
av_frame_free(&picture);
av_packet_free(&pkt);
- return 0;
}
diff --git a/src/creator.h b/src/creator.h
index 7606d4e..b89b16c 100644
--- a/src/creator.h
+++ b/src/creator.h
@@ -18,36 +18,21 @@
#include <libavutil/frame.h>
#include <libavutil/imgutils.h>
-typedef struct config {
- u32 iterations;
- u8 threads;
- u32 colorFrom;
- u32 colorTo;
- long double to_x;
- long double to_y;
- long double speed;
- u8 video;
- u8 filetype;
- u16 width;
- u16 height;
- u8 renderFPS;
- u8 videoFPS;
- u32 bitrate;
- const char *path;
- // TODO: key mapping als option in die struct
-} Config;
-
-Config *_config;
-u32 (*_sfunc) (long double, long double, u32);
-u32 *s_arr;
-long double x_min, x_max, y_min, y_max;
-long double x_min_s, x_max_s, y_min_s, y_max_s;
-int delta;
-long double dt, ft;
+
+AVFrame *picture;
+AVPacket *pkt;
+
+FILE *f;
+
+
+const AVCodec *codec;
+AVCodecContext *c= NULL;
+int i, ret, x, y;
static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt, FILE *outfile);
int generateVideo(filename, int width, int height, int fps, int bitRate, Config *config, u32 (*sfunc) (long double, long double, u32));
+void addFrame(int *frame);
#endif /* RENDER_H_ */
diff --git a/src/render.c b/src/render.c
index 191dcd9..2ebb7c3 100644
--- a/src/render.c
+++ b/src/render.c
@@ -6,7 +6,7 @@
*/
#include "render.h"
-#define HAVE_STRUCT_TIMESPEC
+//#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
void init_render(Config *config)
diff --git a/src/render_cpu.h b/src/render_cpu.h
index 7abbdc4..5d32661 100644
--- a/src/render_cpu.h
+++ b/src/render_cpu.h
@@ -11,6 +11,7 @@
#include "defs.h"
#include <stdlib.h>
#include <GL/glut.h>
+#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
#include <time.h>
#include <math.h>