summaryrefslogtreecommitdiff
path: root/recv.h
blob: a5d2658fc2a79c2c63f2f2492a1b85c76d70b82d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
 * recv.h: A plugin for the Video Disk Recorder
 *
 * See the README file for copyright information and how to reach the author.
 *
 * $Id$
 */

#ifndef __recv_h_
#define __recv_h_

#include <vdr/receiver.h>
#include <vdr/filter.h>
#include <vdr/thread.h>
#include <vdr/ringbuffer.h>
#include <vdr/recording.h>

#include "demux.h"
#include "decoder.h"
#include "audio.h"
#include "video.h"
#include "common.h"

#if (APIVERSNUM >= 10700)
#include <linux/dvb/frontend.h>
#endif

#define MEGATS(n) ((n)*1024*1880)

class cMarkAdRingBuffer : public cRingBufferFrame
{
private:
    int pid;
public:
    cMarkAdRingBuffer(int Size) : cRingBufferFrame(Size, true) {};
    ~cMarkAdRingBuffer()
    {
        Clear();
    }
    void Wait(void)
    {
        WaitForGet();
    }
    void Signal(void)
    {
        EnableGet();
    }
    bool Check(int Size)
    {
        return (Free() >= Size);
    }
};

class cMarkAdReceiver : public cReceiver, public cThread
{
private:
    int recvnumber;
    char *filename;
    int lastiframe;

    char *strcatrealloc(char *dest, const char *src);
    cMarks marks;
    cIndexFile *Index;

    int LastIFrame();
    MarkAdContext macontext;

    cMarkAdDecoder *decoder;
    cMarkAdCommon *common;
    cMarkAdAudio *audio;
    cMarkAdVideo *video;

    cMarkAdDemux *video_demux;
    cMarkAdDemux *mp2_demux;
    cMarkAdDemux *ac3_demux;

    void AddMark(MarkAdMark *mark, int Priority);
protected:
    virtual void Activate(bool On);
    virtual void Receive(uchar *Data, int Length);
    void Action();
    cMarkAdRingBuffer buffer;
    bool running;
public:
    cMarkAdReceiver(int RecvNumber, const char *Filename, cTimer *Timer);
    const char *FileName()
    {
        return (const char *) filename;
    }
    virtual ~cMarkAdReceiver();
};

#endif