Example #1
0
static int Open (vlc_object_t *obj)
{
    access_t *access = (access_t *)obj;
    access_sys_t *sys = malloc (sizeof (*sys));
    if (unlikely(sys == NULL))
        return VLC_ENOMEM;

    var_LocationParse (obj, access->psz_location, "dvb-");

    dvb_device_t *dev = dvb_open (obj);
    if (dev == NULL)
    {
        free (sys);
        return VLC_EGENERIC;
    }

    sys->dev = dev;
    sys->signal_poll = 0;
    access->p_sys = sys;

    uint64_t freq = var_InheritFrequency (obj);
    if (freq != 0)
    {
        const delsys_t *delsys = GuessSystem (access->psz_access, dev);
        if (delsys == NULL || Tune (obj, dev, delsys, freq))
        {
            msg_Err (obj, "tuning to %"PRIu64" Hz failed", freq);
            dialog_Fatal (obj, N_("Digital broadcasting"),
                          N_("The selected digital tuner does not support "
                             "the specified parameters.\n"
                             "Please check the preferences."));
            goto error;
        }
    }
    dvb_add_pid (dev, 0);

    access->pf_block = Read;
    access->pf_control = Control;
    if (access->psz_demux == NULL || !access->psz_demux[0])
    {
        free (access->psz_demux);
        access->psz_demux = strdup ("ts");
    }
    return VLC_SUCCESS;

error:
    Close (obj);
    access->p_sys = NULL;
    return VLC_EGENERIC;
}
Example #2
0
static int Open (vlc_object_t *obj)
{
    access_t *access = (access_t *)obj;
    access_sys_t *sys = malloc (sizeof (*sys));
    if (unlikely(sys == NULL))
        return VLC_ENOMEM;

    var_LocationParse (obj, access->psz_location, "dvb-");

    dvb_device_t *dev = dvb_open (obj);
    if (dev == NULL)
    {
        free (sys);
        return VLC_EGENERIC;
    }

    sys->dev = dev;
    sys->signal_poll = 0;
    sys->pf_setup = NULL;
    access->p_sys = sys;

    uint64_t freq = var_InheritFrequency (obj);
    if (freq != 0)
    {
        dtv_delivery_t d = GuessSystem (access->psz_name, dev);
        if(d != DTV_DELIVERY_NONE)
            sys->pf_setup = dtv_get_delivery_tuner_setup(d);

        if (sys->pf_setup == NULL || Tune (obj, dev, sys->pf_setup, freq))
        {
            msg_Err (obj, "tuning to %"PRIu64" Hz failed", freq);
            vlc_dialog_display_error (obj, N_("Digital broadcasting"),
                N_("The selected digital tuner does not support "
                   "the specified parameters.\n"
                   "Please check the preferences."));
            goto error;
        }
    }
    dvb_add_pid (dev, 0);

    access->pf_block = Read;
    access->pf_control = Control;
    return VLC_SUCCESS;

error:
    Close (obj);
    access->p_sys = NULL;
    return VLC_EGENERIC;
}