• Peter Hartley's avatar
    V4L/DVB (7293): DMX_OUT_TSDEMUX_TAP: record two streams from same mux, resend · b01cd937
    Peter Hartley authored
    Currently (in linux-2.6.24, but linux-dvb hg looks similar), the
    dmx_output_t in the dmx_pes_filter_params decides two things: whether
    output is sent to demux0 or dvr0 (in dmxdev.c:dvb_dmxdev_ts_callback),
    *and* whether to depacketise TS (in dmxdev.c:dvb_dmxdev_filter_start).
    As it stands, those two things can't be set independently: output
    destined for demux0 is depacketised, output for dvr0 isn't.
    
    This is what you want for capturing multiple audio streams from the same
    multiplex simultaneously: open demux0 several times and send
    depacketised output there. And capturing a single video stream is fine
    not what you want: you want multi-open (so demux0, not dvr0), but you
    want the TS nature preserved (because that's what you want on output, as
    you're going to re-multiplex it with the audio).
    
    At least one existing solution -- GStreamer -- sends all its streams
    simultaneously via dvr0 and demuxes again in userland, but it seems a
    bit of a shame to pick out all the PIDs in kernel, stick them back
    together in kernel, and send them to userland only to get unpicked
    again, when the alternative is such a small API addition.
    
    The attached patch adds a new value for dmx_output_t:
    DMX_OUT_TSDEMUX_TAP, which sends TS to the demux0 device. With this
    patch and a dvb-usb-dib0700 (and UK Freeview from Sandy Heath), I can
    successfully capture an audio/video PID pair into a TS file that mplayer
    can play back.
    Signed-off-by: default avatarPeter Hartley <pdh@utter.chaos.org.uk>
    Acked-by: default avatarAndreas Oberritter <obi@linuxtv.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
    b01cd937
dmxdev.c 27.2 KB