1818#include < QStringList>
1919#include " tbc/logging.h"
2020
21+ namespace SqliteValue
22+ {
23+ // Keep legacy "-1 means missing" semantics when SQLite stores NULL
24+ int toIntOrDefault (const QSqlQuery &query, const char *column, int defaultValue)
25+ {
26+ const QVariant value = query.value (column);
27+ return value.isNull () ? defaultValue : value.toInt ();
28+ }
29+
30+ qint64 toLongLongOrDefault (const QSqlQuery &query, const char *column, qint64 defaultValue)
31+ {
32+ const QVariant value = query.value (column);
33+ return value.isNull () ? defaultValue : value.toLongLong ();
34+ }
35+
36+ double toDoubleOrDefault (const QSqlQuery &query, const char *column, double defaultValue)
37+ {
38+ const QVariant value = query.value (column);
39+ return value.isNull () ? defaultValue : value.toDouble ();
40+ }
41+
42+ bool toBoolOrDefault (const QSqlQuery &query, const char *column, bool defaultValue)
43+ {
44+ const QVariant value = query.value (column);
45+ return value.isNull () ? defaultValue : value.toInt () == 1 ;
46+ }
47+ }
48+
2149// SQL schema as per documentation
2250static const QString SCHEMA_SQL = R"(
2351PRAGMA user_version = 1;
@@ -218,19 +246,19 @@ bool SqliteReader::readCaptureMetadata(int &captureId, QString &system, QString
218246 decoder = query.value (" decoder" ).toString ();
219247 gitBranch = query.value (" git_branch" ).toString ();
220248 gitCommit = query.value (" git_commit" ).toString ();
221- videoSampleRate = query. value ( " video_sample_rate" ). toDouble ( );
222- activeVideoStart = query. value ( " active_video_start" ). toInt ( );
223- activeVideoEnd = query. value ( " active_video_end" ). toInt ( );
224- fieldWidth = query. value ( " field_width" ). toInt ( );
225- fieldHeight = query. value ( " field_height" ). toInt ( );
226- numberOfSequentialFields = query. value ( " number_of_sequential_fields" ). toInt ( );
227- colourBurstStart = query. value ( " colour_burst_start" ). toInt ( );
228- colourBurstEnd = query. value ( " colour_burst_end" ). toInt ( );
229- isMapped = query. value ( " is_mapped" ). toInt () == 1 ;
230- isSubcarrierLocked = query. value ( " is_subcarrier_locked" ). toInt () == 1 ;
231- isWidescreen = query. value ( " is_widescreen" ). toInt () == 1 ;
232- white16bIre = query. value ( " white_16b_ire" ). toInt ( );
233- black16bIre = query. value ( " black_16b_ire" ). toInt ( );
249+ videoSampleRate = SqliteValue::toDoubleOrDefault (query, " video_sample_rate" );
250+ activeVideoStart = SqliteValue::toIntOrDefault (query, " active_video_start" );
251+ activeVideoEnd = SqliteValue::toIntOrDefault (query, " active_video_end" );
252+ fieldWidth = SqliteValue::toIntOrDefault (query, " field_width" );
253+ fieldHeight = SqliteValue::toIntOrDefault (query, " field_height" );
254+ numberOfSequentialFields = SqliteValue::toIntOrDefault (query, " number_of_sequential_fields" );
255+ colourBurstStart = SqliteValue::toIntOrDefault (query, " colour_burst_start" );
256+ colourBurstEnd = SqliteValue::toIntOrDefault (query, " colour_burst_end" );
257+ isMapped = SqliteValue::toBoolOrDefault (query, " is_mapped" );
258+ isSubcarrierLocked = SqliteValue::toBoolOrDefault (query, " is_subcarrier_locked" );
259+ isWidescreen = SqliteValue::toBoolOrDefault (query, " is_widescreen" );
260+ white16bIre = SqliteValue::toIntOrDefault (query, " white_16b_ire" );
261+ black16bIre = SqliteValue::toIntOrDefault (query, " black_16b_ire" );
234262 captureNotes = query.value (" capture_notes" ).toString ();
235263
236264 return true ;
@@ -248,10 +276,10 @@ bool SqliteReader::readPcmAudioParameters(int captureId, int &bits, bool &isSign
248276 return false ;
249277 }
250278
251- bits = query. value ( " bits" ). toInt ( );
252- isSigned = query. value ( " is_signed" ). toInt () == 1 ;
253- isLittleEndian = query. value ( " is_little_endian" ). toInt () == 1 ;
254- sampleRate = query. value ( " sample_rate" ). toDouble ( );
279+ bits = SqliteValue::toIntOrDefault (query, " bits" );
280+ isSigned = SqliteValue::toBoolOrDefault (query, " is_signed" );
281+ isLittleEndian = SqliteValue::toBoolOrDefault (query, " is_little_endian" );
282+ sampleRate = SqliteValue::toDoubleOrDefault (query, " sample_rate" );
255283
256284 return true ;
257285}
0 commit comments