if(dispatch_clock > de->de_start - (60 * de->de_start_extra)) {
dvr_rec_set_state(de, DVR_RS_RUNNING, 0);
- muxer_write_pkt(de->de_mux, sm->sm_data);
+ muxer_write_pkt(de->de_mux, sm->sm_type, sm->sm_data);
sm->sm_data = NULL;
}
break;
* sanity wrapper arround m_write_pkt()
*/
int
-muxer_write_pkt(muxer_t *m, void *data)
+muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
{
if(!m || !data)
return -1;
- return m->m_write_pkt(m, data);
+ return m->m_write_pkt(m, smt, data);
}
int (*m_close) (struct muxer *); // Close the muxer
void (*m_destroy) (struct muxer *); // Free the memory
int (*m_write_meta) (struct muxer *, struct epg_broadcast *); // Append epg data
- int (*m_write_pkt) (struct muxer *, void *); // Append a media packet
+ int (*m_write_pkt) (struct muxer *, // Append a media packet
+ streaming_message_type_t,
+ void *);
int m_errors; // Number of errors
muxer_container_type_t m_container; // The type of the container
int muxer_close (muxer_t *m);
int muxer_destroy (muxer_t *m);
int muxer_write_meta (muxer_t *m, struct epg_broadcast *eb);
-int muxer_write_pkt (muxer_t *m, void *data);
+int muxer_write_pkt (muxer_t *m, streaming_message_type_t smt, void *data);
const char* muxer_mime (muxer_t *m, const struct streaming_start *ss);
const char* muxer_suffix (muxer_t *m, const struct streaming_start *ss);
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
+#include <assert.h>
#include "tvheadend.h"
#include "streaming.h"
* Write a packet directly to the file descriptor
*/
static int
-pass_muxer_write_pkt(muxer_t *m, void *data)
+pass_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
{
pktbuf_t *pb = (pktbuf_t*)data;
pass_muxer_t *pm = (pass_muxer_t*)m;
- switch(pm->m_container) {
- case MC_MPEGTS:
+ assert(smt == SMT_MPEGTS);
+
+ switch(smt) {
+ case SMT_MPEGTS:
pass_muxer_write_ts(m, pb);
break;
default:
- //NOP
+ //TODO: add support for v4l (MPEG-PS)
break;
}
* along with this program. If not, see <htmlui://www.gnu.org/licenses/>.
*/
+#include <assert.h>
+
#include "tvheadend.h"
#include "streaming.h"
#include "epg.h"
* Write a packet to the muxer
*/
static int
-tvh_muxer_write_pkt(muxer_t *m, void *data)
+tvh_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
{
th_pkt_t *pkt = (th_pkt_t*)data;
tvh_muxer_t *tm = (tvh_muxer_t*)m;
+ assert(smt == SMT_PACKET);
+
if(mk_mux_write_pkt(tm->tm_ref, pkt)) {
tm->m_errors++;
return -1;
switch(sm->sm_type) {
case SMT_MPEGTS:
case SMT_PACKET:
- muxer_write_pkt(mux, sm->sm_data);
+ muxer_write_pkt(mux, sm->sm_type, sm->sm_data);
sm->sm_data = NULL;
break;