ease debugging overhead
[gst-plugin-dreamsource.git] / src / gstdreamsource.h
1 /*
2  * GStreamer dreamsource
3  * Copyright 2014-2015 Andreas Frisch <fraxinas@opendreambox.org>
4  *
5  * This program is licensed under the Creative Commons
6  * Attribution-NonCommercial-ShareAlike 3.0 Unported
7  * License. To view a copy of this license, visit
8  * http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to
9  * Creative Commons,559 Nathan Abbott Way,Stanford,California 94305,USA.
10  *
11  * Alternatively, this program may be distributed and executed on
12  * hardware which is licensed by Dream Property GmbH.
13  *
14  * This program is NOT free software. It is open source, you are allowed
15  * to modify it (if you keep the license), but it may not be commercially
16  * distributed other than under the conditions noted above.
17  */
18
19 #ifndef __GST_DREAMSOURCE_H__
20 #define __GST_DREAMSOURCE_H__
21
22 #include <gst/gst.h>
23 #include <gst/base/gstpushsrc.h>
24
25 #include <unistd.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <stdint.h>
29 #include <string.h>
30 #include <errno.h>
31 #include <fcntl.h>
32 #include <sys/ioctl.h>
33 #include <sys/mman.h>
34
35 #include "gstdreamsource-marshal.h"
36
37 G_BEGIN_DECLS
38
39 typedef struct _CompressedBufferDescriptor CompressedBufferDescriptor;
40 typedef struct _EncoderInfo                EncoderInfo;
41
42 #define MPEGTIME_TO_GSTTIME(time) (gst_util_uint64_scale ((time), GST_MSECOND/10, 9LL))
43
44 /* validity flags */
45 #define CDB_FLAG_ORIGINALPTS_VALID         0x00000001
46 #define CDB_FLAG_PTS_VALID                 0x00000002
47 #define CDB_FLAG_ESCR_VALID                0x00000004
48 #define CDB_FLAG_TICKSPERBIT_VALID         0x00000008
49 #define CDB_FLAG_SHR_VALID                 0x00000010
50 #define CDB_FLAG_STCSNAPSHOT_VALID         0x00000020
51
52 /* indicator flags */
53 #define CDB_FLAG_FRAME_START               0x00010000
54 #define CDB_FLAG_EOS                       0x00020000
55 #define CDB_FLAG_EMPTY_FRAME               0x00040000
56 #define CDB_FLAG_FRAME_END                 0x00080000
57 #define CDB_FLAG_EOC                       0x00100000
58
59 #define CDB_FLAG_METADATA                  0x40000000
60 #define CDB_FLAG_EXTENDED                  0x80000000
61
62 struct _CompressedBufferDescriptor
63 {
64         uint32_t uiFlags;
65
66         /* Timestamp Parameters */
67         uint32_t uiOriginalPTS;      /* 32-bit original PTS value (in 45 Khz or 27Mhz?) */
68         uint64_t uiPTS;              /* 33-bit PTS value (in 90 Khz) */
69         uint64_t uiSTCSnapshot;      /* 42-bit STC snapshot when frame received by the encoder (in 27Mhz) */
70
71         /* Transmission Parameters */
72         uint32_t uiESCR;             /* Expected mux transmission start time for the first bit of the data (in 27 Mhz) */
73
74         uint16_t uiTicksPerBit;
75         int16_t iSHR;
76
77         /* Buffer Parameters */
78         unsigned uiOffset;           /* REQUIRED: offset of frame data from frame buffer base address (in bytes) */
79         size_t uiLength;             /* REQUIRED: 0 if fragment is empty, e.g. for EOS entry (in bytes) */
80         unsigned uiReserved;         /* Unused field */
81 };
82
83 struct _EncoderInfo {
84         int fd;
85
86         /* descriptor space */
87         unsigned char *buffer;
88
89         /* mmapp'ed data buffer */
90         unsigned char *cdb;
91 };
92
93 G_END_DECLS
94
95 #endif /* __GST_DREAMSOURCE_H__ */