Skip to content

Commit 71f4861

Browse files
author
Molly Xu
committed
address feedback
1 parent e3b91ea commit 71f4861

File tree

2 files changed

+75
-137
lines changed

2 files changed

+75
-137
lines changed

src/torchcodec/_core/Metadata.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,19 @@ std::optional<int64_t> StreamMetadata::getNumFrames(SeekMode seekMode) const {
9898
std::optional<double> StreamMetadata::getAverageFps(SeekMode seekMode) const {
9999
switch (seekMode) {
100100
case SeekMode::custom_frame_mappings:
101-
case SeekMode::exact:
102-
if (getNumFrames(seekMode).has_value() &&
101+
case SeekMode::exact: {
102+
auto numFrames = getNumFrames(seekMode);
103+
if (numFrames.has_value() &&
103104
beginStreamPtsSecondsFromContent.has_value() &&
104-
endStreamPtsSecondsFromContent.has_value() &&
105-
(beginStreamPtsSecondsFromContent.value() !=
106-
endStreamPtsSecondsFromContent.value())) {
107-
return static_cast<double>(
108-
getNumFrames(seekMode).value() /
109-
(endStreamPtsSecondsFromContent.value() -
110-
beginStreamPtsSecondsFromContent.value()));
105+
endStreamPtsSecondsFromContent.has_value()) {
106+
double duration = endStreamPtsSecondsFromContent.value() -
107+
beginStreamPtsSecondsFromContent.value();
108+
if (duration != 0.0) {
109+
return static_cast<double>(numFrames.value()) / duration;
110+
}
111111
}
112112
return averageFpsFromHeader;
113+
}
113114
case SeekMode::approximate:
114115
return averageFpsFromHeader;
115116
default:

src/torchcodec/_core/custom_ops.cpp

Lines changed: 65 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,69 @@ std::string get_stream_json_metadata(
801801

802802
std::map<std::string, std::string> map;
803803

804+
if (streamMetadata.durationSecondsFromHeader.has_value()) {
805+
map["durationSecondsFromHeader"] =
806+
std::to_string(*streamMetadata.durationSecondsFromHeader);
807+
}
808+
if (streamMetadata.bitRate.has_value()) {
809+
map["bitRate"] = std::to_string(*streamMetadata.bitRate);
810+
}
811+
if (streamMetadata.numFramesFromContent.has_value()) {
812+
map["numFramesFromContent"] =
813+
std::to_string(*streamMetadata.numFramesFromContent);
814+
}
815+
if (streamMetadata.numFramesFromHeader.has_value()) {
816+
map["numFramesFromHeader"] =
817+
std::to_string(*streamMetadata.numFramesFromHeader);
818+
}
819+
if (streamMetadata.beginStreamSecondsFromHeader.has_value()) {
820+
map["beginStreamSecondsFromHeader"] =
821+
std::to_string(*streamMetadata.beginStreamSecondsFromHeader);
822+
}
823+
if (streamMetadata.beginStreamPtsSecondsFromContent.has_value()) {
824+
map["beginStreamSecondsFromContent"] =
825+
std::to_string(*streamMetadata.beginStreamPtsSecondsFromContent);
826+
}
827+
if (streamMetadata.endStreamPtsSecondsFromContent.has_value()) {
828+
map["endStreamSecondsFromContent"] =
829+
std::to_string(*streamMetadata.endStreamPtsSecondsFromContent);
830+
}
831+
if (streamMetadata.codecName.has_value()) {
832+
map["codec"] = quoteValue(streamMetadata.codecName.value());
833+
}
834+
if (streamMetadata.width.has_value()) {
835+
map["width"] = std::to_string(*streamMetadata.width);
836+
}
837+
if (streamMetadata.height.has_value()) {
838+
map["height"] = std::to_string(*streamMetadata.height);
839+
}
840+
if (streamMetadata.sampleAspectRatio.has_value()) {
841+
map["sampleAspectRatioNum"] =
842+
std::to_string((*streamMetadata.sampleAspectRatio).num);
843+
map["sampleAspectRatioDen"] =
844+
std::to_string((*streamMetadata.sampleAspectRatio).den);
845+
}
846+
if (streamMetadata.averageFpsFromHeader.has_value()) {
847+
map["averageFpsFromHeader"] =
848+
std::to_string(*streamMetadata.averageFpsFromHeader);
849+
}
850+
if (streamMetadata.sampleRate.has_value()) {
851+
map["sampleRate"] = std::to_string(*streamMetadata.sampleRate);
852+
}
853+
if (streamMetadata.numChannels.has_value()) {
854+
map["numChannels"] = std::to_string(*streamMetadata.numChannels);
855+
}
856+
if (streamMetadata.sampleFormat.has_value()) {
857+
map["sampleFormat"] = quoteValue(streamMetadata.sampleFormat.value());
858+
}
859+
if (streamMetadata.mediaType == AVMEDIA_TYPE_VIDEO) {
860+
map["mediaType"] = quoteValue("video");
861+
} else if (streamMetadata.mediaType == AVMEDIA_TYPE_AUDIO) {
862+
map["mediaType"] = quoteValue("audio");
863+
} else {
864+
map["mediaType"] = quoteValue("other");
865+
}
866+
804867
// Check whether content-based metadata is available for this stream.
805868
// In exact mode: content-based metadata exists for all streams.
806869
// In approximate mode: content-based metadata does not exist for any stream.
@@ -812,153 +875,27 @@ std::string get_stream_json_metadata(
812875
if ((seekMode != SeekMode::custom_frame_mappings) ||
813876
(seekMode == SeekMode::custom_frame_mappings &&
814877
stream_index == activeStreamIndex)) {
815-
if (streamMetadata.durationSecondsFromHeader.has_value()) {
816-
map["durationSecondsFromHeader"] =
817-
std::to_string(*streamMetadata.durationSecondsFromHeader);
818-
}
819878
if (streamMetadata.getDurationSeconds(seekMode).has_value()) {
820879
map["durationSeconds"] =
821880
std::to_string(streamMetadata.getDurationSeconds(seekMode).value());
822881
}
823-
if (streamMetadata.bitRate.has_value()) {
824-
map["bitRate"] = std::to_string(*streamMetadata.bitRate);
825-
}
826-
if (streamMetadata.numFramesFromContent.has_value()) {
827-
map["numFramesFromContent"] =
828-
std::to_string(*streamMetadata.numFramesFromContent);
829-
}
830-
if (streamMetadata.numFramesFromHeader.has_value()) {
831-
map["numFramesFromHeader"] =
832-
std::to_string(*streamMetadata.numFramesFromHeader);
833-
}
834882
if (streamMetadata.getNumFrames(seekMode).has_value()) {
835883
map["numFrames"] =
836884
std::to_string(streamMetadata.getNumFrames(seekMode).value());
837885
}
838-
839-
if (streamMetadata.beginStreamSecondsFromHeader.has_value()) {
840-
map["beginStreamSecondsFromHeader"] =
841-
std::to_string(*streamMetadata.beginStreamSecondsFromHeader);
842-
}
843-
if (streamMetadata.beginStreamPtsSecondsFromContent.has_value()) {
844-
map["beginStreamSecondsFromContent"] =
845-
std::to_string(*streamMetadata.beginStreamPtsSecondsFromContent);
846-
}
847886
map["beginStreamSeconds"] =
848887
std::to_string(streamMetadata.getBeginStreamSeconds(seekMode));
849-
if (streamMetadata.endStreamPtsSecondsFromContent.has_value()) {
850-
map["endStreamSecondsFromContent"] =
851-
std::to_string(*streamMetadata.endStreamPtsSecondsFromContent);
852-
}
853888
if (streamMetadata.getEndStreamSeconds(seekMode).has_value()) {
854889
map["endStreamSeconds"] =
855890
std::to_string(streamMetadata.getEndStreamSeconds(seekMode).value());
856891
}
857-
if (streamMetadata.codecName.has_value()) {
858-
map["codec"] = quoteValue(streamMetadata.codecName.value());
859-
}
860-
if (streamMetadata.width.has_value()) {
861-
map["width"] = std::to_string(*streamMetadata.width);
862-
}
863-
if (streamMetadata.height.has_value()) {
864-
map["height"] = std::to_string(*streamMetadata.height);
865-
}
866-
if (streamMetadata.sampleAspectRatio.has_value()) {
867-
map["sampleAspectRatioNum"] =
868-
std::to_string((*streamMetadata.sampleAspectRatio).num);
869-
map["sampleAspectRatioDen"] =
870-
std::to_string((*streamMetadata.sampleAspectRatio).den);
871-
}
872-
if (streamMetadata.averageFpsFromHeader.has_value()) {
873-
map["averageFpsFromHeader"] =
874-
std::to_string(*streamMetadata.averageFpsFromHeader);
875-
}
876892
if (streamMetadata.getAverageFps(seekMode).has_value()) {
877893
map["averageFps"] =
878894
std::to_string(streamMetadata.getAverageFps(seekMode).value());
879895
}
880-
if (streamMetadata.sampleRate.has_value()) {
881-
map["sampleRate"] = std::to_string(*streamMetadata.sampleRate);
882-
}
883-
if (streamMetadata.numChannels.has_value()) {
884-
map["numChannels"] = std::to_string(*streamMetadata.numChannels);
885-
}
886-
if (streamMetadata.sampleFormat.has_value()) {
887-
map["sampleFormat"] = quoteValue(streamMetadata.sampleFormat.value());
888-
}
889-
if (streamMetadata.mediaType == AVMEDIA_TYPE_VIDEO) {
890-
map["mediaType"] = quoteValue("video");
891-
} else if (streamMetadata.mediaType == AVMEDIA_TYPE_AUDIO) {
892-
map["mediaType"] = quoteValue("audio");
893-
} else {
894-
map["mediaType"] = quoteValue("other");
895-
}
896-
return mapToJson(map);
897-
} else {
898-
if (streamMetadata.durationSecondsFromHeader.has_value()) {
899-
map["durationSecondsFromHeader"] =
900-
std::to_string(*streamMetadata.durationSecondsFromHeader);
901-
}
902-
if (streamMetadata.bitRate.has_value()) {
903-
map["bitRate"] = std::to_string(*streamMetadata.bitRate);
904-
}
905-
if (streamMetadata.numFramesFromContent.has_value()) {
906-
map["numFramesFromContent"] =
907-
std::to_string(*streamMetadata.numFramesFromContent);
908-
}
909-
if (streamMetadata.numFramesFromHeader.has_value()) {
910-
map["numFramesFromHeader"] =
911-
std::to_string(*streamMetadata.numFramesFromHeader);
912-
}
913-
if (streamMetadata.beginStreamSecondsFromHeader.has_value()) {
914-
map["beginStreamSecondsFromHeader"] =
915-
std::to_string(*streamMetadata.beginStreamSecondsFromHeader);
916-
}
917-
if (streamMetadata.beginStreamPtsSecondsFromContent.has_value()) {
918-
map["beginStreamSecondsFromContent"] =
919-
std::to_string(*streamMetadata.beginStreamPtsSecondsFromContent);
920-
}
921-
if (streamMetadata.endStreamPtsSecondsFromContent.has_value()) {
922-
map["endStreamSecondsFromContent"] =
923-
std::to_string(*streamMetadata.endStreamPtsSecondsFromContent);
924-
}
925-
if (streamMetadata.codecName.has_value()) {
926-
map["codec"] = quoteValue(streamMetadata.codecName.value());
927-
}
928-
if (streamMetadata.width.has_value()) {
929-
map["width"] = std::to_string(*streamMetadata.width);
930-
}
931-
if (streamMetadata.height.has_value()) {
932-
map["height"] = std::to_string(*streamMetadata.height);
933-
}
934-
if (streamMetadata.sampleAspectRatio.has_value()) {
935-
map["sampleAspectRatioNum"] =
936-
std::to_string((*streamMetadata.sampleAspectRatio).num);
937-
map["sampleAspectRatioDen"] =
938-
std::to_string((*streamMetadata.sampleAspectRatio).den);
939-
}
940-
if (streamMetadata.averageFpsFromHeader.has_value()) {
941-
map["averageFpsFromHeader"] =
942-
std::to_string(*streamMetadata.averageFpsFromHeader);
943-
}
944-
if (streamMetadata.sampleRate.has_value()) {
945-
map["sampleRate"] = std::to_string(*streamMetadata.sampleRate);
946-
}
947-
if (streamMetadata.numChannels.has_value()) {
948-
map["numChannels"] = std::to_string(*streamMetadata.numChannels);
949-
}
950-
if (streamMetadata.sampleFormat.has_value()) {
951-
map["sampleFormat"] = quoteValue(streamMetadata.sampleFormat.value());
952-
}
953-
if (streamMetadata.mediaType == AVMEDIA_TYPE_VIDEO) {
954-
map["mediaType"] = quoteValue("video");
955-
} else if (streamMetadata.mediaType == AVMEDIA_TYPE_AUDIO) {
956-
map["mediaType"] = quoteValue("audio");
957-
} else {
958-
map["mediaType"] = quoteValue("other");
959-
}
960-
return mapToJson(map);
961896
}
897+
898+
return mapToJson(map);
962899
}
963900

964901
// Returns version information about the various FFMPEG libraries that are

0 commit comments

Comments
 (0)