aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-10-05 16:14:25 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-10-05 16:14:25 +0200
commit2ba309a41be5a8bbc8dcd3443a198ce815c017aa (patch)
tree68bfe97159998115c537c8c3f16280b1f2aacf63
parent6b35154562eff1e2c31b740655641d49cb26bedd (diff)
downloadosc-graphics-2ba309a41be5a8bbc8dcd3443a198ce815c017aa.tar.gz
avoid including libav* headers in recorder.h
* forward-declare all structures
-rw-r--r--src/main.cpp1
-rw-r--r--src/recorder.cpp33
-rw-r--r--src/recorder.h22
3 files changed, 29 insertions, 27 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 73222be..690933c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2,7 +2,6 @@
#include "config.h"
#endif
-#define __STDC_CONSTANT_MACROS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/recorder.cpp b/src/recorder.cpp
index 14db678..1a480fc 100644
--- a/src/recorder.cpp
+++ b/src/recorder.cpp
@@ -43,7 +43,8 @@ static int stop_handler(const char *path, const char *types,
}
Recorder::Recorder() : Mutex(), ffmpeg(NULL), stream(NULL), sws_context(NULL),
- encodeFrame(NULL), encodeFrameBuffer(NULL)
+ encodeFrame(NULL), encodeFrameBuffer(NULL),
+ pkt(NULL)
{
static bool initialized = false;
@@ -73,7 +74,7 @@ start_handler(const char *path, const char *types,
return 0;
}
-static enum PixelFormat
+static inline enum PixelFormat
get_pix_fmt(SDL_PixelFormat *format)
{
switch (format->BitsPerPixel) {
@@ -220,6 +221,8 @@ Recorder::start(const char *filename, const char *codecname)
FF_INPUT_BUFFER_PADDING_SIZE;
encodeFrameBuffer = new uint8_t[encodeFrameBufferSize];
+ pkt = new AVPacket;
+
err = av_set_parameters(ffmpeg, 0);
if (err < 0) {
FFMPEG_ERROR(-err, "av_set_parameters");
@@ -256,7 +259,11 @@ Recorder::stop()
if (ffmpeg)
av_write_trailer(ffmpeg);
- av_free_packet(&pkt);
+ if (pkt) {
+ av_free_packet(pkt);
+ delete pkt;
+ pkt = NULL;
+ }
if (encodeFrameBuffer) {
delete encodeFrameBuffer;
encodeFrameBuffer = NULL;
@@ -321,27 +328,27 @@ Recorder::record(SDL_Surface *surf)
encodeFrameBufferSize, encodeFrame);
if (out_size > 0) {
- av_init_packet(&pkt);
+ av_init_packet(pkt);
/* set correct stream index for this packet */
- pkt.stream_index = stream->index;
+ pkt->stream_index = stream->index;
/* set keyframe flag if needed */
if (stream->codec->coded_frame->key_frame)
- pkt.flags |= PKT_FLAG_KEY;
+ pkt->flags |= PKT_FLAG_KEY;
/* write encoded data into packet */
- pkt.data = encodeFrameBuffer;
+ pkt->data = encodeFrameBuffer;
/* set the correct size of this packet */
- pkt.size = out_size;
+ pkt->size = out_size;
/* set the correct duration of this packet */
- pkt.duration = AV_TIME_BASE / stream->time_base.den;
+ pkt->duration = AV_TIME_BASE / stream->time_base.den;
/* if needed info is available, write pts for this packet */
if (stream->codec->coded_frame->pts != AV_NOPTS_VALUE)
- pkt.pts = av_rescale_q(stream->codec->coded_frame->pts,
- stream->codec->time_base,
- stream->time_base);
+ pkt->pts = av_rescale_q(stream->codec->coded_frame->pts,
+ stream->codec->time_base,
+ stream->time_base);
- av_write_frame(ffmpeg, &pkt);
+ av_write_frame(ffmpeg, pkt);
}
unlock();
diff --git a/src/recorder.h b/src/recorder.h
index 2ef0d47..e0c2818 100644
--- a/src/recorder.h
+++ b/src/recorder.h
@@ -1,24 +1,20 @@
#ifndef __RECORDER_H
#define __RECORDER_H
-#include <SDL.h>
+#include <stdint.h>
-extern "C" {
-#include <libavformat/avformat.h>
-#include <libavcodec/avcodec.h>
-#include <libswscale/swscale.h>
-}
+#include <SDL.h>
#include "osc_graphics.h"
class Recorder : Mutex {
- AVFormatContext *ffmpeg;
- AVStream *stream;
- SwsContext *sws_context;
- AVFrame *encodeFrame;
- int encodeFrameBufferSize;
- uint8_t *encodeFrameBuffer;
- AVPacket pkt;
+ struct AVFormatContext *ffmpeg;
+ struct AVStream *stream;
+ struct SwsContext *sws_context;
+ struct AVFrame *encodeFrame;
+ int encodeFrameBufferSize;
+ uint8_t *encodeFrameBuffer;
+ struct AVPacket *pkt;
Uint32 start_time;