Skip to content

Commit 240102c

Browse files
author
Isaac Richards
committed
Patches from Anduin Withers to add a default timestretch value on a scheduled recording basis.
Closes #71 and #1. git-svn-id: http://svn.mythtv.org/svn/trunk@6865 7dbf422c-18fa-0310-86e9-fd20926502f2
1 parent 3830fda commit 240102c

File tree

12 files changed

+97
-10
lines changed

12 files changed

+97
-10
lines changed

mythtv/libs/libmyth/mythcontext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class MythPrivRequest
162162
};
163163

164164
#define MYTH_BINARY_VERSION "0.19.20050712-1"
165-
#define MYTH_PROTO_VERSION "17"
165+
#define MYTH_PROTO_VERSION "18"
166166

167167
extern int print_verbose_messages;
168168

mythtv/libs/libmythtv/NuppelVideoPlayer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1861,6 +1861,10 @@ void NuppelVideoPlayer::StartPlaying(void)
18611861
return;
18621862
}
18631863

1864+
if (audioOutput)
1865+
audioOutput->SetStretchFactor(audio_stretchfactor);
1866+
next_play_speed = audio_stretchfactor;
1867+
18641868
if (!InitVideo())
18651869
{
18661870
qApp->lock();

mythtv/libs/libmythtv/dbcheck.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ using namespace std;
1010
#include "mythdbcon.h"
1111

1212
/// This is the DB schema version expected by the running MythTV instance.
13-
const QString currentDatabaseVersion = "1087";
13+
const QString currentDatabaseVersion = "1088";
1414

1515
static bool UpdateDBVersionNumber(const QString &newnumber);
1616
static bool performActualUpdate(const QString updates[], QString version,
@@ -1944,7 +1944,19 @@ QString("ALTER TABLE videosource ADD COLUMN freqtable VARCHAR(16) NOT NULL DEFAU
19441944
if (!performActualUpdate(updates, "1087", dbver))
19451945
return false;
19461946
}
1947-
1947+
1948+
if (dbver == "1087")
1949+
{
1950+
const QString updates[] = {
1951+
"ALTER TABLE record ADD COLUMN tsdefault FLOAT NOT NULL DEFAULT 1.0;",
1952+
"ALTER TABLE recorded ADD COLUMN timestretch FLOAT NOT NULL DEFAULT 1.0;",
1953+
"UPDATE record SET tsdefault = 1.0;", // we've had the default not take before
1954+
"UPDATE recorded SET timestretch = 1.0;",
1955+
""
1956+
};
1957+
performActualUpdate(updates, "1088", dbver);
1958+
}
1959+
19481960
return true;
19491961
}
19501962

mythtv/libs/libmythtv/programinfo.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ ProgramInfo::ProgramInfo(void)
6666
year = "";
6767
stars = 0;
6868
availableStatus = asAvailable;
69+
timestretch = 1.0;
6970

7071
pathname = "";
7172
filesize = 0;
@@ -193,6 +194,8 @@ ProgramInfo &ProgramInfo::clone(const ProgramInfo &other)
193194
hasAirDate = other.hasAirDate;
194195
repeat = other.repeat;
195196

197+
timestretch = other.timestretch;
198+
196199
seriesid = other.seriesid;
197200
programid = other.programid;
198201
catType = other.catType;
@@ -286,6 +289,7 @@ void ProgramInfo::ToStringList(QStringList &list) const
286289
FLOAT_TO_LIST(stars)
287290
DATETIME_TO_LIST(QDateTime(originalAirDate))
288291
INT_TO_LIST(hasAirDate)
292+
FLOAT_TO_LIST(timestretch);
289293
}
290294

291295
/** \fn ProgramInfo::FromStringList(QStringList&,int)
@@ -382,6 +386,7 @@ bool ProgramInfo::FromStringList(QStringList &list, QStringList::iterator &it)
382386
FLOAT_FROM_LIST(stars)
383387
DATE_FROM_LIST(originalAirDate);
384388
INT_FROM_LIST(hasAirDate);
389+
FLOAT_FROM_LIST(timestretch);
385390

386391
return true;
387392
}
@@ -546,6 +551,8 @@ void ProgramInfo::ToMap(QMap<QString, QString> &progMap) const
546551
progMap["REPEAT"] = "";
547552
progMap["LONGREPEAT"] = "";
548553
}
554+
555+
progMap["timestretch"] = QString::number(timestretch, 'f', 2);
549556

550557
progMap["seriesid"] = seriesid;
551558
progMap["programid"] = programid;
@@ -692,7 +699,7 @@ ProgramInfo *ProgramInfo::GetProgramFromRecorded(const QString &channel,
692699
"channel.callsign,channel.name,channel.commfree, "
693700
"channel.outputfilters,seriesid,programid,filesize, "
694701
"lastmodified,stars,previouslyshown,originalairdate, "
695-
"hostname,recordid,transcoder "
702+
"hostname,recordid,transcoder,timestretch "
696703
"FROM recorded "
697704
"LEFT JOIN channel "
698705
"ON recorded.chanid = channel.chanid "
@@ -752,6 +759,8 @@ ProgramInfo *ProgramInfo::GetProgramFromRecorded(const QString &channel,
752759

753760
proginfo->programflags = proginfo->getProgramFlags();
754761

762+
proginfo->timestretch = query.value(21).toString().toFloat();
763+
755764
return proginfo;
756765
}
757766

@@ -1213,11 +1222,12 @@ void ProgramInfo::StartedRecording(void)
12131222
query.prepare("INSERT INTO recorded (chanid,starttime,endtime,title,"
12141223
" subtitle,description,hostname,category,recgroup,"
12151224
" autoexpire,recordid,seriesid,programid,stars,"
1216-
" previouslyshown,originalairdate,findid,transcoder)"
1225+
" previouslyshown,originalairdate,findid,transcoder,"
1226+
" timestretch)"
12171227
" VALUES(:CHANID,:STARTS,:ENDS,:TITLE,:SUBTITLE,:DESC,"
12181228
" :HOSTNAME,:CATEGORY,:RECGROUP,:AUTOEXP,:RECORDID,"
12191229
" :SERIESID,:PROGRAMID,:STARS,:REPEAT,:ORIGAIRDATE,"
1220-
" :FINDID,:TRANSCODER);");
1230+
" :FINDID,:TRANSCODER,:TIMESTRETCH);");
12211231
query.bindValue(":CHANID", chanid);
12221232
query.bindValue(":STARTS", starts);
12231233
query.bindValue(":ENDS", ends);
@@ -1236,6 +1246,7 @@ void ProgramInfo::StartedRecording(void)
12361246
query.bindValue(":REPEAT", repeat);
12371247
query.bindValue(":ORIGAIRDATE", originalAirDate);
12381248
query.bindValue(":TRANSCODER", record->GetTranscoder());
1249+
query.bindValue(":TIMESTRETCH", timestretch);
12391250

12401251
if (!query.exec() || !query.isActive())
12411252
MythContext::DBError("WriteRecordedToDB", query);

mythtv/libs/libmythtv/programinfo.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ using namespace std;
1313
typedef QMap<long long, long long> frm_pos_map_t;
1414
typedef QMap<long long, int> frm_dir_map_t;
1515

16-
#define NUMPROGRAMLINES 39
16+
#define NUMPROGRAMLINES 40
1717

1818
typedef enum {
1919
MARK_UNSET = -10,
@@ -256,6 +256,8 @@ class ProgramInfo
256256
bool hasAirDate;
257257
bool repeat;
258258

259+
float timestretch;
260+
259261
int spread;
260262
int startCol;
261263

mythtv/libs/libmythtv/scheduledrecording.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ ScheduledRecording::ScheduledRecording()
4343
inactive = NULL;
4444
searchType = "";
4545
searchForWhat = "";
46+
timestretchid = NULL;
4647

4748
longChannelFormat = gContext->GetSetting("LongChannelFormat", "<num> <name>");
4849
channelFormat = gContext->GetSetting("ChannelFormat", "<num> <sign>");
@@ -786,6 +787,9 @@ void ScheduledRecording::setDefault(bool haschannel)
786787
recgroup->setValue("Default");
787788

788789
inactive->setValue(0);
790+
791+
timestretchid->fillSelections();
792+
timestretchid->setValue(QString::number(1.0f, 'f', 2));
789793
}
790794

791795
void ScheduledRecording::setProgram(ProgramInfo *proginfo)

mythtv/libs/libmythtv/scheduledrecording.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class SRProgramid;
4949
class SRFindDay;
5050
class SRFindTime;
5151
class SRFindId;
52+
class SRTimeStretch;
5253
class SRParentId;
5354

5455
class ScheduledRecording: public ConfigurationGroup, public ConfigurationDialog {
@@ -161,6 +162,7 @@ class ScheduledRecording: public ConfigurationGroup, public ConfigurationDialog
161162
void setFindTimeObj(SRFindTime* val) {findtime = val;}
162163
void setFindIdObj(SRFindId* val) {findid = val;}
163164
void setParentIdObj(SRParentId* val) {parentid = val;}
165+
void setTimeStretchIDObj(SRTimeStretch* val) {timestretchid = val;}
164166

165167
void ToMap(QMap<QString, QString>& infoMap);
166168

@@ -225,6 +227,7 @@ protected slots:
225227
class SRFindDay* findday;
226228
class SRFindTime* findtime;
227229
class SRFindId* findid;
230+
SRTimeStretch* timestretchid;
228231
class SRParentId* parentid;
229232

230233
ProgramInfo* m_pginfo;

mythtv/libs/libmythtv/sr_items.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ SRSchedOptionsGroup::SRSchedOptionsGroup(ScheduledRecording *_rec, ManagedList*
3030

3131
inactive = new SRInactive(_rec, this, _parentList);
3232
addItem(inactive->getItem(), -1);
33+
34+
tsValue = new SRTimeStretch(_rec, _parentList, this);
35+
addItem(tsValue->getItem(), -1);
3336
}
3437

3538

@@ -152,4 +155,32 @@ void SRRecGroup::showNewRecGroup()
152155
}
153156
}
154157

158+
SRTimeStretch::SRTimeStretch(ScheduledRecording *_parent, ManagedList *_list,
159+
ManagedListGroup *_group) : SRSelectSetting(_parent,
160+
"timeStretchList", QString("[ %1 ]").arg(QObject::tr("Time Stretch")),
161+
_group, "tsdefault", _list)
162+
{
163+
_parent->setTimeStretchIDObj(this);
164+
}
165+
166+
void SRTimeStretch::load()
167+
{
168+
fillSelections();
169+
SRSelectSetting::load();
170+
171+
setValue(QString::number(settingValue.toDouble(), 'f', 2));
172+
setUnchanged();
173+
}
155174

175+
void SRTimeStretch::fillSelections()
176+
{
177+
clearSelections();
178+
QString ts_text = QObject::tr("Default time stretch %1");
179+
float tsfac = 0.5;
180+
float tsstep = 0.05;
181+
while (tsfac < 2.01) {
182+
addSelection(ts_text.arg(tsfac, 0, 'f', 2),
183+
QString::number(tsfac, 'f', 2));
184+
tsfac += tsstep;
185+
}
186+
}

mythtv/libs/libmythtv/sr_items.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ class SRSchedOptionsGroup : public ManagedListGroup
331331
class SREndOffset* endOffset;
332332
class SRDupMethod* dupMethItem;
333333
class SRDupIn* dupLocItem;
334+
class SRTimeStretch* tsValue;
334335

335336
ScheduledRecording *schedRec;
336337
};
@@ -793,5 +794,15 @@ class SRRecGroup: public SRSelectSetting
793794
void showNewRecGroup();
794795
void onGoingBack();
795796
};
797+
798+
class SRTimeStretch : public SRSelectSetting
799+
{
800+
public:
801+
SRTimeStretch(ScheduledRecording *_parent, ManagedList *_list,
802+
ManagedListGroup *_group);
803+
void load();
804+
void fillSelections();
805+
};
806+
796807
#endif
797808

mythtv/libs/libmythtv/tv_play.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,8 @@ int TV::Playback(ProgramInfo *rcinfo)
537537
else
538538
ChangeState(kState_WatchingPreRecorded);
539539

540+
normal_speed = playbackinfo->timestretch;
541+
540542
if (class LCD * lcd = LCD::Get())
541543
lcd->switchToChannel(rcinfo->chansign, rcinfo->title, rcinfo->subtitle);
542544

@@ -1045,6 +1047,8 @@ void TV::SetupPlayer(bool isWatchingRecording)
10451047
nvp->SetExactSeeks(gContext->GetNumSetting("ExactSeeking"));
10461048
nvp->SetAutoCommercialSkip(autoCommercialSkip);
10471049

1050+
nvp->SetAudioStretchFactor(normal_speed);
1051+
10481052
if (gContext->GetNumSetting("DefaultCCMode"))
10491053
nvp->ToggleCC(vbimode, 0);
10501054

0 commit comments

Comments
 (0)