implement async unlocking in videosource also. improve state-change handlers (still...
[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/poll.h>
33 #include <sys/ioctl.h>
34 #include <sys/mman.h>
35 #include <sys/socket.h>
36
37 #include "gstdreamsource-marshal.h"
38
39 #define CONTROL_STOP            'S'     /* stop the select call */
40 #define CONTROL_SOCKETS(src)   src->control_sock
41 #define WRITE_SOCKET(src)      src->control_sock[1]
42 #define READ_SOCKET(src)       src->control_sock[0]
43
44 #define SEND_COMMAND(src, command)          \
45 G_STMT_START {                              \
46   int G_GNUC_UNUSED _res; unsigned char c; c = command;   \
47   _res = write (WRITE_SOCKET(src), &c, 1);  \
48 } G_STMT_END
49
50 #define READ_COMMAND(src, command, res)        \
51 G_STMT_START {                                 \
52   res = read(READ_SOCKET(src), &command, 1);   \
53 } G_STMT_END
54
55 G_BEGIN_DECLS
56
57 typedef struct _CompressedBufferDescriptor CompressedBufferDescriptor;
58 typedef struct _EncoderInfo                EncoderInfo;
59
60 #define MPEGTIME_TO_GSTTIME(time) (gst_util_uint64_scale ((time), GST_MSECOND/10, 9LL))
61
62 /* validity flags */
63 #define CDB_FLAG_ORIGINALPTS_VALID         0x00000001
64 #define CDB_FLAG_PTS_VALID                 0x00000002
65 #define CDB_FLAG_ESCR_VALID                0x00000004
66 #define CDB_FLAG_TICKSPERBIT_VALID         0x00000008
67 #define CDB_FLAG_SHR_VALID                 0x00000010
68 #define CDB_FLAG_STCSNAPSHOT_VALID         0x00000020
69
70 /* indicator flags */
71 #define CDB_FLAG_FRAME_START               0x00010000
72 #define CDB_FLAG_EOS                       0x00020000
73 #define CDB_FLAG_EMPTY_FRAME               0x00040000
74 #define CDB_FLAG_FRAME_END                 0x00080000
75 #define CDB_FLAG_EOC                       0x00100000
76
77 #define CDB_FLAG_METADATA                  0x40000000
78 #define CDB_FLAG_EXTENDED                  0x80000000
79
80 struct _CompressedBufferDescriptor
81 {
82         uint32_t uiFlags;
83
84         /* Timestamp Parameters */
85         uint32_t uiOriginalPTS;      /* 32-bit original PTS value (in 45 Khz or 27Mhz?) */
86         uint64_t uiPTS;              /* 33-bit PTS value (in 90 Khz) */
87         uint64_t uiSTCSnapshot;      /* 42-bit STC snapshot when frame received by the encoder (in 27Mhz) */
88
89         /* Transmission Parameters */
90         uint32_t uiESCR;             /* Expected mux transmission start time for the first bit of the data (in 27 Mhz) */
91
92         uint16_t uiTicksPerBit;
93         int16_t iSHR;
94
95         /* Buffer Parameters */
96         unsigned uiOffset;           /* REQUIRED: offset of frame data from frame buffer base address (in bytes) */
97         size_t uiLength;             /* REQUIRED: 0 if fragment is empty, e.g. for EOS entry (in bytes) */
98         unsigned uiReserved;         /* Unused field */
99 };
100
101 struct _EncoderInfo {
102         int fd;
103
104         /* descriptor space */
105         unsigned char *buffer;
106
107         /* mmapp'ed data buffer */
108         unsigned char *cdb;
109 };
110
111 G_END_DECLS
112
113 #endif /* __GST_DREAMSOURCE_H__ */