55#include " flagresults.h"
66#include " mythlogging.h"
77
8+ #ifndef MIN
9+ #define MIN (x,y ) ((x) < (y) ? (x) : (y))
10+ #endif
11+
812FlagFindingsMap findingsMap;
913
1014void findingsAdd (int value, QString description);
@@ -29,40 +33,77 @@ QString FlagFindings::toString(void)
2933 if (findingsMap.contains ((int )m_type))
3034 finding = findingsMap.value ((int )m_type);
3135
32- QString str = QString (" %1: %2" ).arg (finding).arg (m_value);
36+ QString str =
37+ QString (" Findings: Frame: %1, Offset: %2.%3, Duration: %4.%5\n " )
38+ .arg (m_timestamp)
39+ .arg (m_offset / 1000000 )
40+ .arg ((int )(m_offset % 1000000 ), 6 , 10 , QChar (' 0' ))
41+ .arg (m_duration / 1000000 )
42+ .arg ((int )(m_duration % 1000000 ), 6 , 10 , QChar (' 0' ));
43+
44+ str += QString (" %1: %2" ).arg (finding).arg (m_value);
3345 return str;
3446}
3547
36- QString FlagResults::toString (void )
48+ QString FlagFindings::toGnuplot (void )
3749{
38- FlagFindingsList::iterator it;
50+ int64_t timestamp = m_timestamp * m_frameDuration + m_offset;
51+ QString str = QString (" %1 %2 %3" ) .arg ((double )(timestamp) / 1000000.0 )
52+ .arg ((double )(timestamp + m_duration - 1 ) / 1000000.0 )
53+ .arg (m_type + 1 );
54+ return str;
55+ }
3956
40- QString str = QString (" Findings at PTS: %1, Duration: %2\n " )
41- .arg (m_timestamp) .arg (m_duration);
57+ void FlagFindings::SetTiming (int64_t timestamp, int duration, int frameDuration,
58+ int offset)
59+ {
60+ m_timestamp = timestamp;
61+ m_duration = duration;
62+ m_frameDuration = frameDuration;
63+ m_offset = offset;
64+ }
4265
43- for (it = m_findings->begin (); it != m_findings->end (); ++it)
66+ QString FlagResults::toString (void )
67+ {
68+ FlagResults::iterator it;
69+ QString str (" " );
70+
71+ for (it = begin (); it != end (); ++it)
4472 {
4573 FlagFindings *finding = *it;
46- str += QString (" %1\n " ).arg (finding->toString ());
74+ str += QString (" %1\n " ).arg (finding->toString ());
4775 }
4876 str += QString (" \n " );
4977 return str;
5078}
5179
5280QString FlagResults::toGnuplot (void )
5381{
54- FlagFindingsList ::iterator it;
82+ FlagResults ::iterator it;
5583 QString str (" " );
5684
57- for (it = m_findings-> begin (); it != m_findings-> end (); ++it)
85+ for (it = begin (); it != end (); ++it)
5886 {
5987 FlagFindings *finding = *it;
60- str += QString (" %1 %2 %3\n " ) .arg (m_timestamp)
61- .arg (m_timestamp + m_duration - 1 ) .arg (finding->m_type + 1 );
88+ str += QString (" %1\n " ) .arg (finding->toGnuplot ());
6289 }
6390 return str;
6491}
6592
93+ FlagResults *FlagResults::Create (ResultsMap *map, int64_t timestamp)
94+ {
95+ FlagResults *results;
96+ if (map->contains (timestamp))
97+ results = map->value (timestamp);
98+ else
99+ {
100+ results = new FlagResults;
101+ map->insertMulti (timestamp, results);
102+ }
103+
104+ return results;
105+ }
106+
66107QString ResultsMap::toString (QString title)
67108{
68109 ResultsMap::iterator it;
@@ -88,6 +129,63 @@ QString ResultsMap::toGnuplot(void)
88129 }
89130 return str;
90131}
132+
133+ ResultsMap *ResultsMap::Compress (int frameDuration)
134+ {
135+ if (frameDuration == 0 )
136+ return NULL ;
137+
138+ ResultsMap *newMap = new ResultsMap;
139+ ResultsMap::iterator it;
140+ for (it = begin (); it != end (); ++it)
141+ {
142+ FlagResults *oldResults = it.value ();
143+ FlagResults::iterator it2 = oldResults->begin ();
144+ if (it2 == oldResults->end ())
145+ continue ;
146+
147+ FlagFindings *oldFinding = *it2;
148+
149+ int remainDuration = oldFinding->m_duration ;
150+ int64_t timestamp = oldFinding->m_timestamp / frameDuration;
151+ int offset = oldFinding->m_timestamp - (timestamp * frameDuration);
152+ int duration = MIN (remainDuration, frameDuration - offset);
153+
154+ do {
155+ for (it2 = oldResults->begin (); it2 != oldResults->end (); ++it2)
156+ {
157+ FlagResults *results = FlagResults::Create (newMap, timestamp);
158+ oldFinding = *it2;
159+
160+ FlagFindings *finding = new FlagFindings (oldFinding);
161+ finding->SetTiming (timestamp, duration, frameDuration, offset);
162+ results->append (finding);
163+ }
164+
165+ remainDuration -= duration;
166+ duration = MIN (frameDuration, remainDuration);
167+ offset = 0 ;
168+ timestamp++;
169+ } while (remainDuration);
170+ }
171+ return newMap;
172+ }
173+
174+ int64_t ResultsMap::GetDuration (void )
175+ {
176+ ResultsMap::iterator it = begin ();
177+ if (it == end ())
178+ return 0 ;
179+
180+ FlagResults *results = it.value ();
181+ FlagResults::iterator it2 = results->begin ();
182+ if (it2 == results->end ())
183+ return 0 ;
184+
185+ FlagFindings *finding = *it2;
186+ return finding->m_frameDuration ;
187+ }
188+
91189/*
92190 * vim:ts=4:sw=4:ai:et:si:sts=4
93191 */
0 commit comments