Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[vdr] Re: second language is not recorded
André Weidemann wrote:
>
> Klaus Schmidinger wrote:
> > André Weidemann wrote:
> >
> >>Klaus Schmidinger wrote:
> >>
> >>
> >>>Check your log file ...
> >>>
> >>>Klaus
> >>>
> >>>
> >>
> >>Taking a look at the log files I can see the pids being changed:
> >>
> >>Aug 24 23:19:59 video vdr[1586]: changing pids of channel 59 from
> >>2047+2047:2048=deu:0 to 2047+2047:2048=deu,2049=deu:0
> >>
> >>But I cannot see the recording beeing restarted.
> >
> >
> > This code in VDR/vdr.c is supposed to do this in the call to
> > cRecordControls::ChannelDataModified(Channel):
> >
> > // Handle channel modifications:
> > if (!Channels.BeingEdited() && Channels.Modified()) {
> > if (Channels.Lock(false, 100)) {
> > Channels.Save(); //XXX only after user changes???
> > Timers.Save();
> > for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
> > if (Channel->Modification(CHANNELMOD_RETUNE)) {
> > cRecordControls::ChannelDataModified(Channel);
> > if (Channel->Number() == cDevice::CurrentChannel()) {
> > if (!cDevice::PrimaryDevice()->Replaying() || cTransferControl::ReceiverDevice()) {
> > if (cDevice::ActualDevice()->ProvidesTransponder(Channel)) { // avoids retune on devices that don't really access the transponder
> > isyslog("retuning due to modification of channel %d", Channel->Number());
> > Channels.SwitchTo(Channel->Number());
> > }
> > }
> > }
> > }
> > }
> > Channels.Unlock();
> > }
> > }
> >
> > You could add some debug output here to see what's going wrong.
> >
> >
> >>PS: I can send you the logs if you like to.
> >
> >
> > Well, if there is no entry like
> >
> > stopping recording due to modification of channel ...
> >
> > apparently the above code didn't do what it's supposed to.
> > I don't think I would see anything else in the logs...
> >
> > Klaus
> >
> >
> I dug a little bit more today to figure out the cause of the problem.
>
> And I belive that this method in device.c is causing it:
>
> bool cDevice::ProvidesTransponder(const cChannel *Channel) const
> {
> return false;
> }
>
> So this line:
> "if (cDevice::ActualDevice()->ProvidesTransponder(Channel)) {"
> in vdr.c makes no sense at all.
>
> Is this ment to be so or is the method ProvidesTransponder(const
> cChannel *Channel) still to be written?
That function makes a lot of sense, and it _is_ implemented:
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
{
return ProvidesSource(Channel->Source()) && ((Channel->Source() & cSource::st_Mask) != cSource::stSat || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization()));
}
Is your "actual device" a cDvbDevice, or is it some other device you
or somebody else has implemented?
Anyway, the function call in VDR/vdr.c only has a meaning for live
viewing. Take a look at cRecordControls::ChannelDataModified(), where
channel modifications during recordings are handled.
Klaus
Home |
Main Index |
Thread Index