diff options
Diffstat (limited to 'src/creator.c')
-rw-r--r-- | src/creator.c | 71 |
1 files changed, 25 insertions, 46 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; } |