@@ -125,22 +125,22 @@ void SingleStreamDecoder::initializeDecoder() {
125
125
126
126
int64_t frameCount = avStream->nb_frames ;
127
127
if (frameCount > 0 ) {
128
- streamMetadata.numFrames = frameCount;
128
+ streamMetadata.numFramesFromHeader = frameCount;
129
129
}
130
130
131
131
if (avStream->duration > 0 && avStream->time_base .den > 0 ) {
132
- streamMetadata.durationSeconds =
132
+ streamMetadata.durationSecondsFromHeader =
133
133
av_q2d (avStream->time_base ) * avStream->duration ;
134
134
}
135
135
if (avStream->start_time != AV_NOPTS_VALUE) {
136
- streamMetadata.beginStreamFromHeader =
136
+ streamMetadata.beginStreamSecondsFromHeader =
137
137
av_q2d (avStream->time_base ) * avStream->start_time ;
138
138
}
139
139
140
140
if (avStream->codecpar ->codec_type == AVMEDIA_TYPE_VIDEO) {
141
141
double fps = av_q2d (avStream->r_frame_rate );
142
142
if (fps > 0 ) {
143
- streamMetadata.averageFps = fps;
143
+ streamMetadata.averageFpsFromHeader = fps;
144
144
}
145
145
containerMetadata_.numVideoStreams ++;
146
146
} else if (avStream->codecpar ->codec_type == AVMEDIA_TYPE_AUDIO) {
@@ -163,7 +163,7 @@ void SingleStreamDecoder::initializeDecoder() {
163
163
164
164
if (formatContext_->duration > 0 ) {
165
165
AVRational defaultTimeBase{1 , AV_TIME_BASE};
166
- containerMetadata_.durationSeconds =
166
+ containerMetadata_.durationSecondsFromHeader =
167
167
ptsToSeconds (formatContext_->duration , defaultTimeBase);
168
168
}
169
169
@@ -236,13 +236,14 @@ void SingleStreamDecoder::scanFileAndUpdateMetadataAndIndex() {
236
236
// record its relevant metadata.
237
237
int streamIndex = packet->stream_index ;
238
238
auto & streamMetadata = containerMetadata_.allStreamMetadata [streamIndex];
239
- streamMetadata.minPtsFromScan = std::min (
240
- streamMetadata.minPtsFromScan .value_or (INT64_MAX), getPtsOrDts (packet));
241
- streamMetadata.maxPtsFromScan = std::max (
242
- streamMetadata.maxPtsFromScan .value_or (INT64_MIN),
239
+ streamMetadata.beginStreamPtsFromContent = std::min (
240
+ streamMetadata.beginStreamPtsFromContent .value_or (INT64_MAX),
241
+ getPtsOrDts (packet));
242
+ streamMetadata.endStreamPtsFromContent = std::max (
243
+ streamMetadata.endStreamPtsFromContent .value_or (INT64_MIN),
243
244
getPtsOrDts (packet) + packet->duration );
244
- streamMetadata.numFramesFromScan =
245
- streamMetadata.numFramesFromScan .value_or (0 ) + 1 ;
245
+ streamMetadata.numFramesFromContent =
246
+ streamMetadata.numFramesFromContent .value_or (0 ) + 1 ;
246
247
247
248
// Note that we set the other value in this struct, nextPts, only after
248
249
// we have scanned all packets and sorted by pts.
@@ -262,16 +263,17 @@ void SingleStreamDecoder::scanFileAndUpdateMetadataAndIndex() {
262
263
auto & streamMetadata = containerMetadata_.allStreamMetadata [streamIndex];
263
264
auto avStream = formatContext_->streams [streamIndex];
264
265
265
- streamMetadata.numFramesFromScan =
266
+ streamMetadata.numFramesFromContent =
266
267
streamInfos_[streamIndex].allFrames .size ();
267
268
268
- if (streamMetadata.minPtsFromScan .has_value ()) {
269
- streamMetadata.minPtsSecondsFromScan =
270
- *streamMetadata.minPtsFromScan * av_q2d (avStream->time_base );
269
+ if (streamMetadata.beginStreamPtsFromContent .has_value ()) {
270
+ streamMetadata.beginStreamPtsSecondsFromContent =
271
+ *streamMetadata.beginStreamPtsFromContent *
272
+ av_q2d (avStream->time_base );
271
273
}
272
- if (streamMetadata.maxPtsFromScan .has_value ()) {
273
- streamMetadata.maxPtsSecondsFromScan =
274
- *streamMetadata.maxPtsFromScan * av_q2d (avStream->time_base );
274
+ if (streamMetadata.endStreamPtsFromContent .has_value ()) {
275
+ streamMetadata.endStreamPtsSecondsFromContent =
276
+ *streamMetadata.endStreamPtsFromContent * av_q2d (avStream->time_base );
275
277
}
276
278
}
277
279
@@ -445,7 +447,7 @@ void SingleStreamDecoder::addVideoStream(
445
447
containerMetadata_.allStreamMetadata [activeStreamIndex_];
446
448
447
449
if (seekMode_ == SeekMode::approximate &&
448
- !streamMetadata.averageFps .has_value ()) {
450
+ !streamMetadata.averageFpsFromHeader .has_value ()) {
449
451
throw std::runtime_error (
450
452
" Seek mode is approximate, but stream " +
451
453
std::to_string (activeStreamIndex_) +
@@ -1422,9 +1424,9 @@ int64_t SingleStreamDecoder::secondsToIndexLowerBound(double seconds) {
1422
1424
auto & streamMetadata =
1423
1425
containerMetadata_.allStreamMetadata [activeStreamIndex_];
1424
1426
TORCH_CHECK (
1425
- streamMetadata.averageFps .has_value (),
1427
+ streamMetadata.averageFpsFromHeader .has_value (),
1426
1428
" Cannot use approximate mode since we couldn't find the average fps from the metadata." );
1427
- return std::floor (seconds * streamMetadata.averageFps .value ());
1429
+ return std::floor (seconds * streamMetadata.averageFpsFromHeader .value ());
1428
1430
}
1429
1431
default :
1430
1432
throw std::runtime_error (" Unknown SeekMode" );
@@ -1449,9 +1451,9 @@ int64_t SingleStreamDecoder::secondsToIndexUpperBound(double seconds) {
1449
1451
auto & streamMetadata =
1450
1452
containerMetadata_.allStreamMetadata [activeStreamIndex_];
1451
1453
TORCH_CHECK (
1452
- streamMetadata.averageFps .has_value (),
1454
+ streamMetadata.averageFpsFromHeader .has_value (),
1453
1455
" Cannot use approximate mode since we couldn't find the average fps from the metadata." );
1454
- return std::ceil (seconds * streamMetadata.averageFps .value ());
1456
+ return std::ceil (seconds * streamMetadata.averageFpsFromHeader .value ());
1455
1457
}
1456
1458
default :
1457
1459
throw std::runtime_error (" Unknown SeekMode" );
@@ -1467,10 +1469,11 @@ int64_t SingleStreamDecoder::getPts(int64_t frameIndex) {
1467
1469
auto & streamMetadata =
1468
1470
containerMetadata_.allStreamMetadata [activeStreamIndex_];
1469
1471
TORCH_CHECK (
1470
- streamMetadata.averageFps .has_value (),
1472
+ streamMetadata.averageFpsFromHeader .has_value (),
1471
1473
" Cannot use approximate mode since we couldn't find the average fps from the metadata." );
1472
1474
return secondsToClosestPts (
1473
- frameIndex / streamMetadata.averageFps .value (), streamInfo.timeBase );
1475
+ frameIndex / streamMetadata.averageFpsFromHeader .value (),
1476
+ streamInfo.timeBase );
1474
1477
}
1475
1478
default :
1476
1479
throw std::runtime_error (" Unknown SeekMode" );
@@ -1485,9 +1488,9 @@ std::optional<int64_t> SingleStreamDecoder::getNumFrames(
1485
1488
const StreamMetadata& streamMetadata) {
1486
1489
switch (seekMode_) {
1487
1490
case SeekMode::exact:
1488
- return streamMetadata.numFramesFromScan .value ();
1491
+ return streamMetadata.numFramesFromContent .value ();
1489
1492
case SeekMode::approximate: {
1490
- return streamMetadata.numFrames ;
1493
+ return streamMetadata.numFramesFromHeader ;
1491
1494
}
1492
1495
default :
1493
1496
throw std::runtime_error (" Unknown SeekMode" );
@@ -1498,7 +1501,7 @@ double SingleStreamDecoder::getMinSeconds(
1498
1501
const StreamMetadata& streamMetadata) {
1499
1502
switch (seekMode_) {
1500
1503
case SeekMode::exact:
1501
- return streamMetadata.minPtsSecondsFromScan .value ();
1504
+ return streamMetadata.beginStreamPtsSecondsFromContent .value ();
1502
1505
case SeekMode::approximate:
1503
1506
return 0 ;
1504
1507
default :
@@ -1510,9 +1513,9 @@ std::optional<double> SingleStreamDecoder::getMaxSeconds(
1510
1513
const StreamMetadata& streamMetadata) {
1511
1514
switch (seekMode_) {
1512
1515
case SeekMode::exact:
1513
- return streamMetadata.maxPtsSecondsFromScan .value ();
1516
+ return streamMetadata.endStreamPtsSecondsFromContent .value ();
1514
1517
case SeekMode::approximate: {
1515
- return streamMetadata.durationSeconds ;
1518
+ return streamMetadata.durationSecondsFromHeader ;
1516
1519
}
1517
1520
default :
1518
1521
throw std::runtime_error (" Unknown SeekMode" );
0 commit comments