summaryrefslogtreecommitdiff
path: root/command/decoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'command/decoder.h')
-rw-r--r--command/decoder.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/command/decoder.h b/command/decoder.h
new file mode 100644
index 0000000..46e9f74
--- /dev/null
+++ b/command/decoder.h
@@ -0,0 +1,72 @@
+/*
+ * decoder.h: A program for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ */
+
+#ifndef __decoder_h_
+#define __decoder_h_
+
+#define __STDC_CONSTANT_MACROS
+
+#include <stdint.h>
+#include <sched.h>
+
+#ifndef DECLARE_ALIGNED
+#define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n)))
+#endif
+
+#ifndef CPU_COUNT
+#define CPU_COUNT(i) 1 // very crude ;)
+#endif
+
+#ifndef uchar
+typedef unsigned char uchar;
+#endif
+
+extern "C"
+{
+#include <libavcodec/avcodec.h>
+
+#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
+#warning H264 parsing may be broken, better use libavcodec52
+#endif
+
+#if LIBAVCODEC_VERSION_INT < ((52<<16)+(23<<8)+0)
+#include <libavformat/avformat.h>
+#endif
+#include "debug.h"
+}
+
+#include "global.h"
+
+class cMarkAdDecoder
+{
+private:
+ int16_t *audiobuf;
+ int audiobufsize;
+
+ AVCodecContext *ac3_context;
+ AVCodecContext *mp2_context;
+ AVCodecContext *video_context;
+ AVFrame *video_frame;
+
+ int8_t *last_qscale_table;
+
+ bool SetAudioInfos(MarkAdContext *maContext, AVCodecContext *Audio_Context);
+
+ void PAR2DAR(AVRational a, AVRational *erg);
+ bool SetVideoInfos(MarkAdContext *maContext,AVCodecContext *Video_Context,
+ AVFrame *Video_Frame);
+public:
+ bool DecodeVideo(MarkAdContext *maContext, uchar *pkt, int plen);
+ bool DecodeMP2(MarkAdContext *maContext, uchar *espkt, int eslen);
+ bool DecodeAC3(MarkAdContext *maContext, uchar *espkt, int eslen);
+ cMarkAdDecoder(bool useH264, bool useMP2, bool hasAC3);
+ ~cMarkAdDecoder();
+};
+
+
+
+#endif