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