torchcodec 0.8.0__cp310-cp310-win_amd64.whl → 0.8.1__cp310-cp310-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of torchcodec might be problematic. Click here for more details.
- torchcodec/_core/AVIOTensorContext.cpp +23 -16
- torchcodec/_core/AVIOTensorContext.h +2 -1
- torchcodec/_core/BetaCudaDeviceInterface.cpp +168 -86
- torchcodec/_core/BetaCudaDeviceInterface.h +7 -5
- torchcodec/_core/CMakeLists.txt +1 -19
- torchcodec/_core/CUDACommon.cpp +21 -6
- torchcodec/_core/CUDACommon.h +6 -1
- torchcodec/_core/Cache.h +6 -20
- torchcodec/_core/CpuDeviceInterface.cpp +7 -1
- torchcodec/_core/CpuDeviceInterface.h +4 -1
- torchcodec/_core/CudaDeviceInterface.cpp +19 -11
- torchcodec/_core/CudaDeviceInterface.h +6 -1
- torchcodec/_core/DeviceInterface.h +27 -27
- torchcodec/_core/Encoder.cpp +51 -7
- torchcodec/_core/Encoder.h +12 -1
- torchcodec/_core/FFMPEGCommon.cpp +1 -1
- torchcodec/_core/FFMPEGCommon.h +9 -1
- torchcodec/_core/FilterGraph.cpp +2 -1
- torchcodec/_core/Frame.cpp +5 -0
- torchcodec/_core/Frame.h +1 -1
- torchcodec/_core/NVCUVIDRuntimeLoader.cpp +320 -0
- torchcodec/_core/NVCUVIDRuntimeLoader.h +14 -0
- torchcodec/_core/NVDECCache.cpp +3 -13
- torchcodec/_core/NVDECCache.h +4 -6
- torchcodec/_core/SingleStreamDecoder.cpp +22 -31
- torchcodec/_core/SingleStreamDecoder.h +4 -2
- torchcodec/_core/StreamOptions.h +2 -2
- torchcodec/_core/Transform.cpp +27 -0
- torchcodec/_core/Transform.h +25 -0
- torchcodec/_core/__init__.py +3 -0
- torchcodec/_core/custom_ops.cpp +99 -22
- torchcodec/_core/ops.py +76 -16
- torchcodec/decoders/_video_decoder.py +0 -10
- torchcodec/libtorchcodec_core4.dll +0 -0
- torchcodec/libtorchcodec_core5.dll +0 -0
- torchcodec/libtorchcodec_core6.dll +0 -0
- torchcodec/libtorchcodec_core7.dll +0 -0
- torchcodec/libtorchcodec_core8.dll +0 -0
- torchcodec/libtorchcodec_custom_ops4.dll +0 -0
- torchcodec/libtorchcodec_custom_ops5.dll +0 -0
- torchcodec/libtorchcodec_custom_ops6.dll +0 -0
- torchcodec/libtorchcodec_custom_ops7.dll +0 -0
- torchcodec/libtorchcodec_custom_ops8.dll +0 -0
- torchcodec/libtorchcodec_pybind_ops4.pyd +0 -0
- torchcodec/libtorchcodec_pybind_ops5.pyd +0 -0
- torchcodec/libtorchcodec_pybind_ops6.pyd +0 -0
- torchcodec/libtorchcodec_pybind_ops7.pyd +0 -0
- torchcodec/libtorchcodec_pybind_ops8.pyd +0 -0
- torchcodec/version.py +1 -1
- {torchcodec-0.8.0.dist-info → torchcodec-0.8.1.dist-info}/METADATA +6 -4
- torchcodec-0.8.1.dist-info/RECORD +82 -0
- torchcodec-0.8.0.dist-info/RECORD +0 -80
- {torchcodec-0.8.0.dist-info → torchcodec-0.8.1.dist-info}/WHEEL +0 -0
- {torchcodec-0.8.0.dist-info → torchcodec-0.8.1.dist-info}/licenses/LICENSE +0 -0
- {torchcodec-0.8.0.dist-info → torchcodec-0.8.1.dist-info}/top_level.txt +0 -0
torchcodec/_core/custom_ops.cpp
CHANGED
|
@@ -32,20 +32,24 @@ TORCH_LIBRARY(torchcodec_ns, m) {
|
|
|
32
32
|
m.def("create_from_file(str filename, str? seek_mode=None) -> Tensor");
|
|
33
33
|
m.def(
|
|
34
34
|
"encode_audio_to_file(Tensor samples, int sample_rate, str filename, int? bit_rate=None, int? num_channels=None, int? desired_sample_rate=None) -> ()");
|
|
35
|
-
m.def(
|
|
36
|
-
"encode_video_to_file(Tensor frames, int frame_rate, str filename, int? crf=None) -> ()");
|
|
37
35
|
m.def(
|
|
38
36
|
"encode_audio_to_tensor(Tensor samples, int sample_rate, str format, int? bit_rate=None, int? num_channels=None, int? desired_sample_rate=None) -> Tensor");
|
|
39
37
|
m.def(
|
|
40
38
|
"_encode_audio_to_file_like(Tensor samples, int sample_rate, str format, int file_like_context, int? bit_rate=None, int? num_channels=None, int? desired_sample_rate=None) -> ()");
|
|
39
|
+
m.def(
|
|
40
|
+
"encode_video_to_file(Tensor frames, int frame_rate, str filename, int? crf=None) -> ()");
|
|
41
|
+
m.def(
|
|
42
|
+
"encode_video_to_tensor(Tensor frames, int frame_rate, str format, int? crf=None) -> Tensor");
|
|
43
|
+
m.def(
|
|
44
|
+
"_encode_video_to_file_like(Tensor frames, int frame_rate, str format, int file_like_context, int? crf=None) -> ()");
|
|
41
45
|
m.def(
|
|
42
46
|
"create_from_tensor(Tensor video_tensor, str? seek_mode=None) -> Tensor");
|
|
43
47
|
m.def(
|
|
44
48
|
"_create_from_file_like(int file_like_context, str? seek_mode=None) -> Tensor");
|
|
45
49
|
m.def(
|
|
46
|
-
"_add_video_stream(Tensor(a!) decoder, *, int? num_threads=None, str? dimension_order=None, int? stream_index=None, str device=\"cpu\", str device_variant=\"
|
|
50
|
+
"_add_video_stream(Tensor(a!) decoder, *, int? num_threads=None, str? dimension_order=None, int? stream_index=None, str device=\"cpu\", str device_variant=\"ffmpeg\", str transform_specs=\"\", (Tensor, Tensor, Tensor)? custom_frame_mappings=None, str? color_conversion_library=None) -> ()");
|
|
47
51
|
m.def(
|
|
48
|
-
"add_video_stream(Tensor(a!) decoder, *, int? num_threads=None, str? dimension_order=None, int? stream_index=None, str device=\"cpu\", str device_variant=\"
|
|
52
|
+
"add_video_stream(Tensor(a!) decoder, *, int? num_threads=None, str? dimension_order=None, int? stream_index=None, str device=\"cpu\", str device_variant=\"ffmpeg\", str transform_specs=\"\", (Tensor, Tensor, Tensor)? custom_frame_mappings=None) -> ()");
|
|
49
53
|
m.def(
|
|
50
54
|
"add_audio_stream(Tensor(a!) decoder, *, int? stream_index=None, int? sample_rate=None, int? num_channels=None) -> ()");
|
|
51
55
|
m.def("seek_to_pts(Tensor(a!) decoder, float seconds) -> ()");
|
|
@@ -70,6 +74,7 @@ TORCH_LIBRARY(torchcodec_ns, m) {
|
|
|
70
74
|
m.def(
|
|
71
75
|
"get_stream_json_metadata(Tensor(a!) decoder, int stream_index) -> str");
|
|
72
76
|
m.def("_get_json_ffmpeg_library_versions() -> str");
|
|
77
|
+
m.def("_get_backend_details(Tensor(a!) decoder) -> str");
|
|
73
78
|
m.def(
|
|
74
79
|
"_test_frame_pts_equality(Tensor(a!) decoder, *, int frame_index, float pts_seconds_to_test) -> bool");
|
|
75
80
|
m.def("scan_all_streams_to_update_metadata(Tensor(a!) decoder) -> ()");
|
|
@@ -212,6 +217,26 @@ Transform* makeResizeTransform(
|
|
|
212
217
|
return new ResizeTransform(FrameDims(height, width));
|
|
213
218
|
}
|
|
214
219
|
|
|
220
|
+
// Crop transform specs take the form:
|
|
221
|
+
//
|
|
222
|
+
// "crop, <height>, <width>, <x>, <y>"
|
|
223
|
+
//
|
|
224
|
+
// Where "crop" is the string literal and <height>, <width>, <x> and <y> are
|
|
225
|
+
// positive integers. <x> and <y> are the x and y coordinates of the top left
|
|
226
|
+
// corner of the crop. Note that we follow the PyTorch convention of (height,
|
|
227
|
+
// width) for specifying image dimensions; FFmpeg uses (width, height).
|
|
228
|
+
Transform* makeCropTransform(
|
|
229
|
+
const std::vector<std::string>& cropTransformSpec) {
|
|
230
|
+
TORCH_CHECK(
|
|
231
|
+
cropTransformSpec.size() == 5,
|
|
232
|
+
"cropTransformSpec must have 5 elements including its name");
|
|
233
|
+
int height = checkedToPositiveInt(cropTransformSpec[1]);
|
|
234
|
+
int width = checkedToPositiveInt(cropTransformSpec[2]);
|
|
235
|
+
int x = checkedToPositiveInt(cropTransformSpec[3]);
|
|
236
|
+
int y = checkedToPositiveInt(cropTransformSpec[4]);
|
|
237
|
+
return new CropTransform(FrameDims(height, width), x, y);
|
|
238
|
+
}
|
|
239
|
+
|
|
215
240
|
std::vector<std::string> split(const std::string& str, char delimiter) {
|
|
216
241
|
std::vector<std::string> tokens;
|
|
217
242
|
std::string token;
|
|
@@ -239,6 +264,8 @@ std::vector<Transform*> makeTransforms(const std::string& transformSpecsRaw) {
|
|
|
239
264
|
auto name = transformSpec[0];
|
|
240
265
|
if (name == "resize") {
|
|
241
266
|
transforms.push_back(makeResizeTransform(transformSpec));
|
|
267
|
+
} else if (name == "crop") {
|
|
268
|
+
transforms.push_back(makeCropTransform(transformSpec));
|
|
242
269
|
} else {
|
|
243
270
|
TORCH_CHECK(false, "Invalid transform name: " + name);
|
|
244
271
|
}
|
|
@@ -319,7 +346,7 @@ void _add_video_stream(
|
|
|
319
346
|
std::optional<std::string_view> dimension_order = std::nullopt,
|
|
320
347
|
std::optional<int64_t> stream_index = std::nullopt,
|
|
321
348
|
std::string_view device = "cpu",
|
|
322
|
-
std::string_view device_variant = "
|
|
349
|
+
std::string_view device_variant = "ffmpeg",
|
|
323
350
|
std::string_view transform_specs = "",
|
|
324
351
|
std::optional<std::tuple<at::Tensor, at::Tensor, at::Tensor>>
|
|
325
352
|
custom_frame_mappings = std::nullopt,
|
|
@@ -376,7 +403,7 @@ void add_video_stream(
|
|
|
376
403
|
std::optional<std::string_view> dimension_order = std::nullopt,
|
|
377
404
|
std::optional<int64_t> stream_index = std::nullopt,
|
|
378
405
|
std::string_view device = "cpu",
|
|
379
|
-
std::string_view device_variant = "
|
|
406
|
+
std::string_view device_variant = "ffmpeg",
|
|
380
407
|
std::string_view transform_specs = "",
|
|
381
408
|
const std::optional<std::tuple<at::Tensor, at::Tensor, at::Tensor>>&
|
|
382
409
|
custom_frame_mappings = std::nullopt) {
|
|
@@ -498,21 +525,6 @@ OpsAudioFramesOutput get_frames_by_pts_in_range_audio(
|
|
|
498
525
|
return makeOpsAudioFramesOutput(result);
|
|
499
526
|
}
|
|
500
527
|
|
|
501
|
-
void encode_video_to_file(
|
|
502
|
-
const at::Tensor& frames,
|
|
503
|
-
int64_t frame_rate,
|
|
504
|
-
std::string_view file_name,
|
|
505
|
-
std::optional<int64_t> crf = std::nullopt) {
|
|
506
|
-
VideoStreamOptions videoStreamOptions;
|
|
507
|
-
videoStreamOptions.crf = crf;
|
|
508
|
-
VideoEncoder(
|
|
509
|
-
frames,
|
|
510
|
-
validateInt64ToInt(frame_rate, "frame_rate"),
|
|
511
|
-
file_name,
|
|
512
|
-
videoStreamOptions)
|
|
513
|
-
.encode();
|
|
514
|
-
}
|
|
515
|
-
|
|
516
528
|
void encode_audio_to_file(
|
|
517
529
|
const at::Tensor& samples,
|
|
518
530
|
int64_t sample_rate,
|
|
@@ -587,6 +599,62 @@ void _encode_audio_to_file_like(
|
|
|
587
599
|
encoder.encode();
|
|
588
600
|
}
|
|
589
601
|
|
|
602
|
+
void encode_video_to_file(
|
|
603
|
+
const at::Tensor& frames,
|
|
604
|
+
int64_t frame_rate,
|
|
605
|
+
std::string_view file_name,
|
|
606
|
+
std::optional<int64_t> crf = std::nullopt) {
|
|
607
|
+
VideoStreamOptions videoStreamOptions;
|
|
608
|
+
videoStreamOptions.crf = crf;
|
|
609
|
+
VideoEncoder(
|
|
610
|
+
frames,
|
|
611
|
+
validateInt64ToInt(frame_rate, "frame_rate"),
|
|
612
|
+
file_name,
|
|
613
|
+
videoStreamOptions)
|
|
614
|
+
.encode();
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
at::Tensor encode_video_to_tensor(
|
|
618
|
+
const at::Tensor& frames,
|
|
619
|
+
int64_t frame_rate,
|
|
620
|
+
std::string_view format,
|
|
621
|
+
std::optional<int64_t> crf = std::nullopt) {
|
|
622
|
+
auto avioContextHolder = std::make_unique<AVIOToTensorContext>();
|
|
623
|
+
VideoStreamOptions videoStreamOptions;
|
|
624
|
+
videoStreamOptions.crf = crf;
|
|
625
|
+
return VideoEncoder(
|
|
626
|
+
frames,
|
|
627
|
+
validateInt64ToInt(frame_rate, "frame_rate"),
|
|
628
|
+
format,
|
|
629
|
+
std::move(avioContextHolder),
|
|
630
|
+
videoStreamOptions)
|
|
631
|
+
.encodeToTensor();
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
void _encode_video_to_file_like(
|
|
635
|
+
const at::Tensor& frames,
|
|
636
|
+
int64_t frame_rate,
|
|
637
|
+
std::string_view format,
|
|
638
|
+
int64_t file_like_context,
|
|
639
|
+
std::optional<int64_t> crf = std::nullopt) {
|
|
640
|
+
auto fileLikeContext =
|
|
641
|
+
reinterpret_cast<AVIOFileLikeContext*>(file_like_context);
|
|
642
|
+
TORCH_CHECK(
|
|
643
|
+
fileLikeContext != nullptr, "file_like_context must be a valid pointer");
|
|
644
|
+
std::unique_ptr<AVIOFileLikeContext> avioContextHolder(fileLikeContext);
|
|
645
|
+
|
|
646
|
+
VideoStreamOptions videoStreamOptions;
|
|
647
|
+
videoStreamOptions.crf = crf;
|
|
648
|
+
|
|
649
|
+
VideoEncoder encoder(
|
|
650
|
+
frames,
|
|
651
|
+
validateInt64ToInt(frame_rate, "frame_rate"),
|
|
652
|
+
format,
|
|
653
|
+
std::move(avioContextHolder),
|
|
654
|
+
videoStreamOptions);
|
|
655
|
+
encoder.encode();
|
|
656
|
+
}
|
|
657
|
+
|
|
590
658
|
// For testing only. We need to implement this operation as a core library
|
|
591
659
|
// function because what we're testing is round-tripping pts values as
|
|
592
660
|
// double-precision floating point numbers from C++ to Python and back to C++.
|
|
@@ -828,6 +896,11 @@ std::string _get_json_ffmpeg_library_versions() {
|
|
|
828
896
|
return ss.str();
|
|
829
897
|
}
|
|
830
898
|
|
|
899
|
+
std::string get_backend_details(at::Tensor& decoder) {
|
|
900
|
+
auto videoDecoder = unwrapTensorToGetDecoder(decoder);
|
|
901
|
+
return videoDecoder->getDeviceInterfaceDetails();
|
|
902
|
+
}
|
|
903
|
+
|
|
831
904
|
// Scans video packets to get more accurate metadata like frame count, exact
|
|
832
905
|
// keyframe positions, etc. Exact keyframe positions are useful for efficient
|
|
833
906
|
// accurate seeking. Note that this function reads the entire video but it does
|
|
@@ -847,9 +920,11 @@ TORCH_LIBRARY_IMPL(torchcodec_ns, BackendSelect, m) {
|
|
|
847
920
|
|
|
848
921
|
TORCH_LIBRARY_IMPL(torchcodec_ns, CPU, m) {
|
|
849
922
|
m.impl("encode_audio_to_file", &encode_audio_to_file);
|
|
850
|
-
m.impl("encode_video_to_file", &encode_video_to_file);
|
|
851
923
|
m.impl("encode_audio_to_tensor", &encode_audio_to_tensor);
|
|
852
924
|
m.impl("_encode_audio_to_file_like", &_encode_audio_to_file_like);
|
|
925
|
+
m.impl("encode_video_to_file", &encode_video_to_file);
|
|
926
|
+
m.impl("encode_video_to_tensor", &encode_video_to_tensor);
|
|
927
|
+
m.impl("_encode_video_to_file_like", &_encode_video_to_file_like);
|
|
853
928
|
m.impl("seek_to_pts", &seek_to_pts);
|
|
854
929
|
m.impl("add_video_stream", &add_video_stream);
|
|
855
930
|
m.impl("_add_video_stream", &_add_video_stream);
|
|
@@ -870,6 +945,8 @@ TORCH_LIBRARY_IMPL(torchcodec_ns, CPU, m) {
|
|
|
870
945
|
m.impl(
|
|
871
946
|
"scan_all_streams_to_update_metadata",
|
|
872
947
|
&scan_all_streams_to_update_metadata);
|
|
948
|
+
|
|
949
|
+
m.impl("_get_backend_details", &get_backend_details);
|
|
873
950
|
}
|
|
874
951
|
|
|
875
952
|
} // namespace facebook::torchcodec
|
torchcodec/_core/ops.py
CHANGED
|
@@ -69,7 +69,7 @@ def load_torchcodec_shared_libraries():
|
|
|
69
69
|
raise RuntimeError(
|
|
70
70
|
f"""Could not load libtorchcodec. Likely causes:
|
|
71
71
|
1. FFmpeg is not properly installed in your environment. We support
|
|
72
|
-
versions 4, 5, 6 and 7.
|
|
72
|
+
versions 4, 5, 6, and 7 on all platforms, and 8 on Mac and Linux.
|
|
73
73
|
2. The PyTorch version ({torch.__version__}) is not compatible with
|
|
74
74
|
this version of TorchCodec. Refer to the version compatibility
|
|
75
75
|
table:
|
|
@@ -92,15 +92,21 @@ create_from_file = torch._dynamo.disallow_in_graph(
|
|
|
92
92
|
encode_audio_to_file = torch._dynamo.disallow_in_graph(
|
|
93
93
|
torch.ops.torchcodec_ns.encode_audio_to_file.default
|
|
94
94
|
)
|
|
95
|
-
encode_video_to_file = torch._dynamo.disallow_in_graph(
|
|
96
|
-
torch.ops.torchcodec_ns.encode_video_to_file.default
|
|
97
|
-
)
|
|
98
95
|
encode_audio_to_tensor = torch._dynamo.disallow_in_graph(
|
|
99
96
|
torch.ops.torchcodec_ns.encode_audio_to_tensor.default
|
|
100
97
|
)
|
|
101
98
|
_encode_audio_to_file_like = torch._dynamo.disallow_in_graph(
|
|
102
99
|
torch.ops.torchcodec_ns._encode_audio_to_file_like.default
|
|
103
100
|
)
|
|
101
|
+
encode_video_to_file = torch._dynamo.disallow_in_graph(
|
|
102
|
+
torch.ops.torchcodec_ns.encode_video_to_file.default
|
|
103
|
+
)
|
|
104
|
+
encode_video_to_tensor = torch._dynamo.disallow_in_graph(
|
|
105
|
+
torch.ops.torchcodec_ns.encode_video_to_tensor.default
|
|
106
|
+
)
|
|
107
|
+
_encode_video_to_file_like = torch._dynamo.disallow_in_graph(
|
|
108
|
+
torch.ops.torchcodec_ns._encode_video_to_file_like.default
|
|
109
|
+
)
|
|
104
110
|
create_from_tensor = torch._dynamo.disallow_in_graph(
|
|
105
111
|
torch.ops.torchcodec_ns.create_from_tensor.default
|
|
106
112
|
)
|
|
@@ -136,6 +142,7 @@ _get_stream_json_metadata = torch.ops.torchcodec_ns.get_stream_json_metadata.def
|
|
|
136
142
|
_get_json_ffmpeg_library_versions = (
|
|
137
143
|
torch.ops.torchcodec_ns._get_json_ffmpeg_library_versions.default
|
|
138
144
|
)
|
|
145
|
+
_get_backend_details = torch.ops.torchcodec_ns._get_backend_details.default
|
|
139
146
|
|
|
140
147
|
|
|
141
148
|
# =============================
|
|
@@ -200,6 +207,33 @@ def encode_audio_to_file_like(
|
|
|
200
207
|
)
|
|
201
208
|
|
|
202
209
|
|
|
210
|
+
def encode_video_to_file_like(
|
|
211
|
+
frames: torch.Tensor,
|
|
212
|
+
frame_rate: int,
|
|
213
|
+
format: str,
|
|
214
|
+
file_like: Union[io.RawIOBase, io.BufferedIOBase],
|
|
215
|
+
crf: Optional[int] = None,
|
|
216
|
+
) -> None:
|
|
217
|
+
"""Encode video frames to a file-like object.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
frames: Video frames tensor
|
|
221
|
+
frame_rate: Frame rate in frames per second
|
|
222
|
+
format: Video format (e.g., "mp4", "mov", "mkv")
|
|
223
|
+
file_like: File-like object that supports write() and seek() methods
|
|
224
|
+
crf: Optional constant rate factor for encoding quality
|
|
225
|
+
"""
|
|
226
|
+
assert _pybind_ops is not None
|
|
227
|
+
|
|
228
|
+
_encode_video_to_file_like(
|
|
229
|
+
frames,
|
|
230
|
+
frame_rate,
|
|
231
|
+
format,
|
|
232
|
+
_pybind_ops.create_file_like_context(file_like, True), # True means for writing
|
|
233
|
+
crf,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
203
237
|
def get_frames_at_indices(
|
|
204
238
|
decoder: torch.Tensor, *, frame_indices: Union[torch.Tensor, list[int]]
|
|
205
239
|
) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
|
|
@@ -254,16 +288,6 @@ def encode_audio_to_file_abstract(
|
|
|
254
288
|
return
|
|
255
289
|
|
|
256
290
|
|
|
257
|
-
@register_fake("torchcodec_ns::encode_video_to_file")
|
|
258
|
-
def encode_video_to_file_abstract(
|
|
259
|
-
frames: torch.Tensor,
|
|
260
|
-
frame_rate: int,
|
|
261
|
-
filename: str,
|
|
262
|
-
crf: Optional[int] = None,
|
|
263
|
-
) -> None:
|
|
264
|
-
return
|
|
265
|
-
|
|
266
|
-
|
|
267
291
|
@register_fake("torchcodec_ns::encode_audio_to_tensor")
|
|
268
292
|
def encode_audio_to_tensor_abstract(
|
|
269
293
|
samples: torch.Tensor,
|
|
@@ -289,6 +313,37 @@ def _encode_audio_to_file_like_abstract(
|
|
|
289
313
|
return
|
|
290
314
|
|
|
291
315
|
|
|
316
|
+
@register_fake("torchcodec_ns::encode_video_to_file")
|
|
317
|
+
def encode_video_to_file_abstract(
|
|
318
|
+
frames: torch.Tensor,
|
|
319
|
+
frame_rate: int,
|
|
320
|
+
filename: str,
|
|
321
|
+
crf: Optional[int],
|
|
322
|
+
) -> None:
|
|
323
|
+
return
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
@register_fake("torchcodec_ns::encode_video_to_tensor")
|
|
327
|
+
def encode_video_to_tensor_abstract(
|
|
328
|
+
frames: torch.Tensor,
|
|
329
|
+
frame_rate: int,
|
|
330
|
+
format: str,
|
|
331
|
+
crf: Optional[int],
|
|
332
|
+
) -> torch.Tensor:
|
|
333
|
+
return torch.empty([], dtype=torch.long)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
@register_fake("torchcodec_ns::_encode_video_to_file_like")
|
|
337
|
+
def _encode_video_to_file_like_abstract(
|
|
338
|
+
frames: torch.Tensor,
|
|
339
|
+
frame_rate: int,
|
|
340
|
+
format: str,
|
|
341
|
+
file_like_context: int,
|
|
342
|
+
crf: Optional[int] = None,
|
|
343
|
+
) -> None:
|
|
344
|
+
return
|
|
345
|
+
|
|
346
|
+
|
|
292
347
|
@register_fake("torchcodec_ns::create_from_tensor")
|
|
293
348
|
def create_from_tensor_abstract(
|
|
294
349
|
video_tensor: torch.Tensor, seek_mode: Optional[str]
|
|
@@ -304,7 +359,7 @@ def _add_video_stream_abstract(
|
|
|
304
359
|
dimension_order: Optional[str] = None,
|
|
305
360
|
stream_index: Optional[int] = None,
|
|
306
361
|
device: str = "cpu",
|
|
307
|
-
device_variant: str = "
|
|
362
|
+
device_variant: str = "ffmpeg",
|
|
308
363
|
transform_specs: str = "",
|
|
309
364
|
custom_frame_mappings: Optional[
|
|
310
365
|
tuple[torch.Tensor, torch.Tensor, torch.Tensor]
|
|
@@ -322,7 +377,7 @@ def add_video_stream_abstract(
|
|
|
322
377
|
dimension_order: Optional[str] = None,
|
|
323
378
|
stream_index: Optional[int] = None,
|
|
324
379
|
device: str = "cpu",
|
|
325
|
-
device_variant: str = "
|
|
380
|
+
device_variant: str = "ffmpeg",
|
|
326
381
|
transform_specs: str = "",
|
|
327
382
|
custom_frame_mappings: Optional[
|
|
328
383
|
tuple[torch.Tensor, torch.Tensor, torch.Tensor]
|
|
@@ -496,3 +551,8 @@ def scan_all_streams_to_update_metadata_abstract(decoder: torch.Tensor) -> None:
|
|
|
496
551
|
def get_ffmpeg_library_versions():
|
|
497
552
|
versions_json = _get_json_ffmpeg_library_versions()
|
|
498
553
|
return json.loads(versions_json)
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
@register_fake("torchcodec_ns::_get_backend_details")
|
|
557
|
+
def _get_backend_details_abstract(decoder: torch.Tensor) -> str:
|
|
558
|
+
return ""
|
|
@@ -147,16 +147,6 @@ class VideoDecoder:
|
|
|
147
147
|
device = str(device)
|
|
148
148
|
|
|
149
149
|
device_variant = _get_cuda_backend()
|
|
150
|
-
if device_variant == "ffmpeg":
|
|
151
|
-
# TODONVDEC P2 rename 'default' into 'ffmpeg' everywhere.
|
|
152
|
-
device_variant = "default"
|
|
153
|
-
|
|
154
|
-
# Legacy support for device="cuda:0:beta" syntax
|
|
155
|
-
# TODONVDEC P2: remove support for this everywhere. This will require
|
|
156
|
-
# updating our tests.
|
|
157
|
-
if device == "cuda:0:beta":
|
|
158
|
-
device = "cuda:0"
|
|
159
|
-
device_variant = "beta"
|
|
160
150
|
|
|
161
151
|
core.add_video_stream(
|
|
162
152
|
self._decoder,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
torchcodec/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Note that this file is generated during install.
|
|
2
|
-
__version__ = '0.8.
|
|
2
|
+
__version__ = '0.8.1'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: torchcodec
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.1
|
|
4
4
|
Summary: A video decoder for PyTorch
|
|
5
5
|
Author-email: PyTorch Team <packages@pytorch.org>
|
|
6
6
|
Project-URL: GitHub, https://github.com/pytorch/torchcodec
|
|
@@ -123,8 +123,8 @@ ffmpeg -f lavfi -i \
|
|
|
123
123
|
`torch` and `torchcodec`.
|
|
124
124
|
|
|
125
125
|
2. Install FFmpeg, if it's not already installed. Linux distributions usually
|
|
126
|
-
come with FFmpeg pre-installed. TorchCodec supports
|
|
127
|
-
in [4, 7].
|
|
126
|
+
come with FFmpeg pre-installed. TorchCodec supports major FFmpeg versions
|
|
127
|
+
in [4, 7] on all platforms, and FFmpeg version 8 is supported on Mac and Linux.
|
|
128
128
|
|
|
129
129
|
If FFmpeg is not already installed, or you need a more recent version, an
|
|
130
130
|
easy way to install it is to use `conda`:
|
|
@@ -147,6 +147,7 @@ The following table indicates the compatibility between versions of
|
|
|
147
147
|
| `torchcodec` | `torch` | Python |
|
|
148
148
|
| ------------------ | ------------------ | ------------------- |
|
|
149
149
|
| `main` / `nightly` | `main` / `nightly` | `>=3.10`, `<=3.13` |
|
|
150
|
+
| `0.8` | `2.9` | `>=3.10`, `<=3.13` |
|
|
150
151
|
| `0.7` | `2.8` | `>=3.9`, `<=3.13` |
|
|
151
152
|
| `0.6` | `2.8` | `>=3.9`, `<=3.13` |
|
|
152
153
|
| `0.5` | `2.7` | `>=3.9`, `<=3.13` |
|
|
@@ -163,7 +164,8 @@ format you want. Refer to Nvidia's GPU support matrix for more details
|
|
|
163
164
|
[here](https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new).
|
|
164
165
|
|
|
165
166
|
1. Install FFmpeg with NVDEC support.
|
|
166
|
-
TorchCodec with CUDA should work with FFmpeg versions in [4, 7]
|
|
167
|
+
TorchCodec with CUDA should work with FFmpeg versions in [4, 7] on all platforms,
|
|
168
|
+
and FFmpeg version 8 is supported on Linux.
|
|
167
169
|
|
|
168
170
|
If FFmpeg is not already installed, or you need a more recent version, an
|
|
169
171
|
easy way to install it is to use `conda`:
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
torchcodec/__init__.py,sha256=F9OpGp7psa4OKvSqaIsCL1FPGtBgqNyAd5Jn0_qUn9s,595
|
|
2
|
+
torchcodec/_frame.py,sha256=_LIIorsNn0nbcInGC9Mwh3Dwc3AuPDhxK4YIBFsfOww,5350
|
|
3
|
+
torchcodec/_internally_replaced_utils.py,sha256=5uYbY1l23FcfWSmLuwZb7j8mWXtMTTp--6sl9LQH28E,2422
|
|
4
|
+
torchcodec/libtorchcodec_core4.dll,sha256=UjUzZTCO9ik_J-B4eogoEEqBPo_3b8eoD6HQPS9BF4Y,349184
|
|
5
|
+
torchcodec/libtorchcodec_core5.dll,sha256=ppf5kCIPPpL-ujxWgLA7_SBW4O80n3EGNGDOA5bFDGw,349696
|
|
6
|
+
torchcodec/libtorchcodec_core6.dll,sha256=4SwjrNkmV3pvRgc_iaQRgbiOeF004tlyXOJkJ-OgXQM,349696
|
|
7
|
+
torchcodec/libtorchcodec_core7.dll,sha256=V8FSPVHwIaUMWqDJzMddSR_Qfl5JpBY1BsStHIo9-kE,349696
|
|
8
|
+
torchcodec/libtorchcodec_core8.dll,sha256=jj8V2NKBRHGXZLHS0xjSCzdZ2059hmTJV6_j3gfJyZI,350208
|
|
9
|
+
torchcodec/libtorchcodec_custom_ops4.dll,sha256=95Oqbd894w2xEIUnOKjP460CJ_ylNgpsFSaeZVxCP4I,620544
|
|
10
|
+
torchcodec/libtorchcodec_custom_ops5.dll,sha256=2vVUjJ-nMT0wNjcgQMyuRMdHwYVLTOIK9d9Cy5V4aeI,620544
|
|
11
|
+
torchcodec/libtorchcodec_custom_ops6.dll,sha256=bBB3IgRbjj5jwq7cH-JGkyphJ_-PNR_Mn7dmUrLha-s,620544
|
|
12
|
+
torchcodec/libtorchcodec_custom_ops7.dll,sha256=PbYVmpTOMJj8gNP8ebeZ6s3klRQgBF-k-9sqVzf5YqE,620544
|
|
13
|
+
torchcodec/libtorchcodec_custom_ops8.dll,sha256=hHRLeZzfvgC2lY3ZHthpWboojKdvy_JOukeqfS73pP8,620544
|
|
14
|
+
torchcodec/libtorchcodec_pybind_ops4.pyd,sha256=jdgJvfIEWXSRW5i3FX9pinVNNbHUgRkCL7qFX6Qhi1M,203264
|
|
15
|
+
torchcodec/libtorchcodec_pybind_ops5.pyd,sha256=JZrKPiMdkVeATbo9De085a0hdo5gA3BjEX9L4pT7xMM,203264
|
|
16
|
+
torchcodec/libtorchcodec_pybind_ops6.pyd,sha256=3zgvs3s0xpYYwrLJ8jYMlaql6yhQ6vKaq6tXXU2L5LI,203264
|
|
17
|
+
torchcodec/libtorchcodec_pybind_ops7.pyd,sha256=wDclMH3tqpScH1dlEBdzTAFHUBRl0qezcdfyZExU0l0,203264
|
|
18
|
+
torchcodec/libtorchcodec_pybind_ops8.pyd,sha256=sBKi2URv4n5vwPYcQ6bu6cInVNnxznnDyafWEHGalzk,203264
|
|
19
|
+
torchcodec/version.py,sha256=LmZD0tBGznDm3FOv2sw71abX1JHFUljgfEe0r-NZeV0,75
|
|
20
|
+
torchcodec/_core/AVIOContextHolder.cpp,sha256=ucOD1bGORgSzZfL5TxJtUVH2GAtXGVDylzWpvbJ2qJY,1628
|
|
21
|
+
torchcodec/_core/AVIOContextHolder.h,sha256=iYRap1vDdvK_4wylu3Ds9Dkn1k_vAdkbVJDlVni9uNY,2697
|
|
22
|
+
torchcodec/_core/AVIOFileLikeContext.cpp,sha256=bCMpEXhQPLWULWJRIPpNqzlio2eLE_EI7UoPuUgw70g,3450
|
|
23
|
+
torchcodec/_core/AVIOFileLikeContext.h,sha256=oJM9q9X3i1leplaBsU1vMW0gMt1a-xANHhgk5FID3zA,2130
|
|
24
|
+
torchcodec/_core/AVIOTensorContext.cpp,sha256=jkfrlaOYqEXyQzUL-49N9xGZvyvlxBne53hKwkM2eYQ,4339
|
|
25
|
+
torchcodec/_core/AVIOTensorContext.h,sha256=Z6CrXeWvaAtzPqiv4XZ1f-Xo_SqzxZuu-EArfCZ0Muc,1130
|
|
26
|
+
torchcodec/_core/BetaCudaDeviceInterface.cpp,sha256=kDv-8WtSERT3D2xSRmZ0b_u9c-t8SNQx6acG2yCfWww,27433
|
|
27
|
+
torchcodec/_core/BetaCudaDeviceInterface.h,sha256=MhsCyLqbsD7ktI8ynKu2F99dZoxbRbsS_1vVIoFgIjI,8291
|
|
28
|
+
torchcodec/_core/CMakeLists.txt,sha256=QD40ucnyiGXmcudL7CM3JzjdIf-1kayQt0p6-f0CGnE,11241
|
|
29
|
+
torchcodec/_core/CUDACommon.cpp,sha256=zwU1EWMIJhML4HJdbXupgr52aru5b7Cvb4Y4oROev74,13669
|
|
30
|
+
torchcodec/_core/CUDACommon.h,sha256=CuKWQU99I2mFxQoWryRG_WJI0yOv3zCM9m2dZ9jtmxk,1601
|
|
31
|
+
torchcodec/_core/Cache.h,sha256=5H85W_X_dfcacjDFjqgB9TyEbVqJL5fsLI57dPGpBdg,4342
|
|
32
|
+
torchcodec/_core/CpuDeviceInterface.cpp,sha256=HdjezZ-2_DWYtCJyfwWSok2-QsGyMQN0TAKNKt6lYDU,13496
|
|
33
|
+
torchcodec/_core/CpuDeviceInterface.h,sha256=ODqIXddW5ynAl4PL_Q0-vHE-BBNcAIrw4ZzNei3Qkqw,5128
|
|
34
|
+
torchcodec/_core/CudaDeviceInterface.cpp,sha256=sQJrCynbO6KXQGhnz_S-dCIfi9J_xRpcQDEnBNfXJJY,14014
|
|
35
|
+
torchcodec/_core/CudaDeviceInterface.h,sha256=6bUMuSpu1nQwsVpYrihIapxhMSWyJ05wbt5gA8n6TnE,2326
|
|
36
|
+
torchcodec/_core/DeviceInterface.cpp,sha256=6Is9D-K8G5qQUJnZPIuYF4Tynn4TltSRTKi8uxHGfpg,3335
|
|
37
|
+
torchcodec/_core/DeviceInterface.h,sha256=oSHigqvKz_9Ld9RqncsUt9JZMDT7ThZXf83m06PWOqE,5081
|
|
38
|
+
torchcodec/_core/Encoder.cpp,sha256=W_HfIOR-8Op5mw3FiqICbxayXe6-0ytz1aQp9wNupYU,30155
|
|
39
|
+
torchcodec/_core/Encoder.h,sha256=xC_kCQe-ryamhOOREwVUzwhKXqcK_9KfxhahmZWrzdI,8237
|
|
40
|
+
torchcodec/_core/FFMPEGCommon.cpp,sha256=MLFTShI9M51l6NlZzzLYv2mfMjW_7lVcQC0b8EScX38,19668
|
|
41
|
+
torchcodec/_core/FFMPEGCommon.h,sha256=Qbpl3JhXUQM6yd3uRHkeQlPDQXJfVPKcLyvjiP57gvM,8594
|
|
42
|
+
torchcodec/_core/FilterGraph.cpp,sha256=zr0v_WkwbzvBBfdTqAFTumQlX5sM7TGPAeM9AjUcyXc,5192
|
|
43
|
+
torchcodec/_core/FilterGraph.h,sha256=l8FfApNcRwN-cl-LepfXvK6DqLNCij_p9BfwhKT-l_Q,1693
|
|
44
|
+
torchcodec/_core/Frame.cpp,sha256=k2thv-jm9rjUmCmlDSEi18GI5OA9-crWXxQKIQdO380,1800
|
|
45
|
+
torchcodec/_core/Frame.h,sha256=qjpUb6d65oRwbGsAncTb6ROaNL5WqI8rY7JAj3YP7wQ,2309
|
|
46
|
+
torchcodec/_core/Metadata.h,sha256=cUTRJAgwUyXH5JjvCRl9tB0na7_2kJvydfkAKT4QZN8,2580
|
|
47
|
+
torchcodec/_core/NVCUVIDRuntimeLoader.cpp,sha256=wbHzp3qZCiQfqtitKvkAyzc-cM__74trmXvFG_A62O4,12734
|
|
48
|
+
torchcodec/_core/NVCUVIDRuntimeLoader.h,sha256=_CV2W0-g0usJeRZHbw27IqJ8uG9nDAt26u2gE9CcSlM,378
|
|
49
|
+
torchcodec/_core/NVDECCache.cpp,sha256=zyhHF4H5DLdQZdnu4SC_kTQ57Hb-WG8XVd9QO__vK9Y,1482
|
|
50
|
+
torchcodec/_core/NVDECCache.h,sha256=NPWsHu-XO6gCN8KRu4iV67e8TJEMZRZtmBHIeWC7FU8,3212
|
|
51
|
+
torchcodec/_core/SingleStreamDecoder.cpp,sha256=udIUNtqNWe9h57B_VoEOCeQHztOLMfx2YClrCcIqdfk,67012
|
|
52
|
+
torchcodec/_core/SingleStreamDecoder.h,sha256=yhS6wkWyYvWdR0l-ep96ThTdnM4uy26P107DeYNUwvg,16804
|
|
53
|
+
torchcodec/_core/StreamOptions.h,sha256=sBvoczOYKMpZzO9x4uNWXC6186yKD59w_QS0klbkF2s,1943
|
|
54
|
+
torchcodec/_core/Transform.cpp,sha256=KYKpB1XpZOwy6cy4TCG9i0UszU_bS3CR42LP6rZ_hi4,2682
|
|
55
|
+
torchcodec/_core/Transform.h,sha256=oM-e8E5grzEfdCK8UWYJ8pEXCpwuE_rcYdgG7rGPtLM,2762
|
|
56
|
+
torchcodec/_core/ValidationUtils.cpp,sha256=PkBTLv_38eYG9ZUVbGijHSug3YewtD2FNiftfZ3q8S8,994
|
|
57
|
+
torchcodec/_core/ValidationUtils.h,sha256=XWSUL441nPNYRGCnnpul0iuWtUNgZXC_fcsxeb-oB6E,579
|
|
58
|
+
torchcodec/_core/__init__.py,sha256=R54c11OAZlputhXhWsDxBD6dsp0bko38a94_a6VgR68,1185
|
|
59
|
+
torchcodec/_core/_metadata.py,sha256=LWlCQmJwJ66TjK_4bwtMARzSDVlid62dpsOVpDHk8NQ,13117
|
|
60
|
+
torchcodec/_core/custom_ops.cpp,sha256=Bc1gPQesEuSeM2qfhZR5IYGGSgyfExJzPDMqU8PcOsE,38476
|
|
61
|
+
torchcodec/_core/fetch_and_expose_non_gpl_ffmpeg_libs.cmake,sha256=q6KCuRVW3R1zZls-lIFAgATntCnKspc9pbfLbifZBvU,8324
|
|
62
|
+
torchcodec/_core/ops.py,sha256=vvdwQ3yZWT9Gu-ytT0XbETpCP5W8iFYxiZg-q2aFnmc,19615
|
|
63
|
+
torchcodec/_core/pybind_ops.cpp,sha256=RyDIZOFPjFxONg1MsO1tyn8Mp4N-J6R-td8-XCIWpmY,2066
|
|
64
|
+
torchcodec/_core/nvcuvid_include/cuviddec.h,sha256=tSf1ap09onfbt6bZ5mkib6pBMc-MfviZW5RxeI8_-Fk,63992
|
|
65
|
+
torchcodec/_core/nvcuvid_include/nvcuvid.h,sha256=Kw7TUxeelTXP5PTJbR8Gjo_B1h-rjI1BiWknoMVebGE,29342
|
|
66
|
+
torchcodec/_samplers/__init__.py,sha256=qWg69NiVSnMcYi68RTVFGvvp9bh1jkNha5u7q3VMRLw,258
|
|
67
|
+
torchcodec/_samplers/video_clip_sampler.py,sha256=1tyYp75oW7g_JZWbKT08viqMv2wn8RKZBG8v1YOu0P8,18172
|
|
68
|
+
torchcodec/decoders/__init__.py,sha256=nR-ewJrecOi2C-eiB2i_vuoMPY9IhbHLyo1A6sq2Ww0,468
|
|
69
|
+
torchcodec/decoders/_audio_decoder.py,sha256=dWbtH7OLIgcbiFQIvP9qpATvIC7XeS67P9uGM4dmsRE,7580
|
|
70
|
+
torchcodec/decoders/_decoder_utils.py,sha256=lV9_S3k7pp-Se7m_dqqFZzxPr-a4zOsUdwVDXh7buj4,4377
|
|
71
|
+
torchcodec/decoders/_video_decoder.py,sha256=2bvazig_zeXFC9jW7W37oQlGnUzGdPcZJdGudDIxitA,19880
|
|
72
|
+
torchcodec/encoders/__init__.py,sha256=Jw7dTzlTbzTaD_ZMrgSxUWEMs7Pn0cyxKm-_beuBIGo,50
|
|
73
|
+
torchcodec/encoders/_audio_encoder.py,sha256=VMZs6VTQDIMcsBxWtQEUpwq_ruILrrvNVktkswajaiM,6312
|
|
74
|
+
torchcodec/samplers/__init__.py,sha256=pijGrxa71UjRYHh1sRqLzwpsVXYAmHe24kMbC-rZW_M,159
|
|
75
|
+
torchcodec/samplers/_common.py,sha256=okgK1nVKA6mE9Li1Jex1GbzN7m26S3LtaREeF1AX-dA,2823
|
|
76
|
+
torchcodec/samplers/_index_based.py,sha256=8iwlYZrqTdP7CnnBbwd3PsJhQNkF-YHH802AHAEoG-g,11695
|
|
77
|
+
torchcodec/samplers/_time_based.py,sha256=wjFNo0gkgBKIslGWGYgUWDwGVJBg9L7EiM32fA3kCOc,15068
|
|
78
|
+
torchcodec-0.8.1.dist-info/licenses/LICENSE,sha256=ry9-8rOEo-Fe1s7VhuGoMWcBx72CjMauQWTw26jlrI8,1502
|
|
79
|
+
torchcodec-0.8.1.dist-info/METADATA,sha256=yEPtv8EtW6PvwsHFjYsRmnZDH7rC9WGBx3WyJLknUWU,9914
|
|
80
|
+
torchcodec-0.8.1.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
|
|
81
|
+
torchcodec-0.8.1.dist-info/top_level.txt,sha256=S1IZq2_jNQE_RDGwxNunVF8S1RCMXmWdAAQjLXBdu2g,21
|
|
82
|
+
torchcodec-0.8.1.dist-info/RECORD,,
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
torchcodec/__init__.py,sha256=F9OpGp7psa4OKvSqaIsCL1FPGtBgqNyAd5Jn0_qUn9s,595
|
|
2
|
-
torchcodec/_frame.py,sha256=_LIIorsNn0nbcInGC9Mwh3Dwc3AuPDhxK4YIBFsfOww,5350
|
|
3
|
-
torchcodec/_internally_replaced_utils.py,sha256=5uYbY1l23FcfWSmLuwZb7j8mWXtMTTp--6sl9LQH28E,2422
|
|
4
|
-
torchcodec/libtorchcodec_core4.dll,sha256=C6vYYdoQ-TFS-I39s1dY7a39XI-qsfTGZoOYPjJUAlg,336896
|
|
5
|
-
torchcodec/libtorchcodec_core5.dll,sha256=8JVEQUNx-f3GGzulrOq4IbxT4vfvH9IzQXE8kNxbir0,336896
|
|
6
|
-
torchcodec/libtorchcodec_core6.dll,sha256=woVhAfOf1Em-Ixc4uvSIYoTUaGuWyH0TSKNxuS8Plg0,336896
|
|
7
|
-
torchcodec/libtorchcodec_core7.dll,sha256=XD9CiAQFYil8zg3MxDtL4qK_OpqksiuwytldqGsCKuE,336896
|
|
8
|
-
torchcodec/libtorchcodec_core8.dll,sha256=hDjbaFbFpPS5GfK0fmfH9FVgyTY3j-CaovYMRP3oei8,337408
|
|
9
|
-
torchcodec/libtorchcodec_custom_ops4.dll,sha256=MPkSTXRdAgKgcNV_tRLYg-U9-5JvdfHf3f-lxBnS530,597504
|
|
10
|
-
torchcodec/libtorchcodec_custom_ops5.dll,sha256=_L7ZpHMVLs8PtLoo2NHHaylisoQydpHegG3X2aUf_VY,597504
|
|
11
|
-
torchcodec/libtorchcodec_custom_ops6.dll,sha256=CqEhzcrfPCAL5nlBHoEFkOsuwPwu04HiITQZtynMfTA,597504
|
|
12
|
-
torchcodec/libtorchcodec_custom_ops7.dll,sha256=XhvjBj9xeZ8RDLH-eqAKDmC2I6nyslNe4CkHQmv_PMk,597504
|
|
13
|
-
torchcodec/libtorchcodec_custom_ops8.dll,sha256=XQKpr3pjN7s5WAcFi7Spm1_MJkzPSRAZ5mKEuOa-1Zw,597504
|
|
14
|
-
torchcodec/libtorchcodec_pybind_ops4.pyd,sha256=UsPE2ZNiVrZ3ED33hAOoko8QmZ7FSEfTUT2ZaKzpc6w,203264
|
|
15
|
-
torchcodec/libtorchcodec_pybind_ops5.pyd,sha256=_iCNaFqeWfCsf1DBASbPUJQd5W_Xbfpw5QAmdGmkBto,203264
|
|
16
|
-
torchcodec/libtorchcodec_pybind_ops6.pyd,sha256=5OJQbqusKFpHQstscwYH7_kXaV1T2OP8VnLGLM_9X2c,203264
|
|
17
|
-
torchcodec/libtorchcodec_pybind_ops7.pyd,sha256=DTJJ4wjAOKHkNwRiuk-1Qpctg54QhKE0s-Mfcpj-4nQ,203264
|
|
18
|
-
torchcodec/libtorchcodec_pybind_ops8.pyd,sha256=-14GQOd0k5azLaizvCyFlu1uSiQcJIfTrZU8jj79sdg,203264
|
|
19
|
-
torchcodec/version.py,sha256=ZdzHKm4XFhMcVH6-ULI-5zf2UncGmXJTB4vBr0c_p3g,75
|
|
20
|
-
torchcodec/_core/AVIOContextHolder.cpp,sha256=ucOD1bGORgSzZfL5TxJtUVH2GAtXGVDylzWpvbJ2qJY,1628
|
|
21
|
-
torchcodec/_core/AVIOContextHolder.h,sha256=iYRap1vDdvK_4wylu3Ds9Dkn1k_vAdkbVJDlVni9uNY,2697
|
|
22
|
-
torchcodec/_core/AVIOFileLikeContext.cpp,sha256=bCMpEXhQPLWULWJRIPpNqzlio2eLE_EI7UoPuUgw70g,3450
|
|
23
|
-
torchcodec/_core/AVIOFileLikeContext.h,sha256=oJM9q9X3i1leplaBsU1vMW0gMt1a-xANHhgk5FID3zA,2130
|
|
24
|
-
torchcodec/_core/AVIOTensorContext.cpp,sha256=bNE33CeYuTsXbaZRo0Izs1pLJOQlYPtlX_ofgeBH9hM,4018
|
|
25
|
-
torchcodec/_core/AVIOTensorContext.h,sha256=kYO93vn1hVINRHRoP2BWzEKUoPl1WeI62cgz5y0T6OA,1106
|
|
26
|
-
torchcodec/_core/BetaCudaDeviceInterface.cpp,sha256=9SruWlr99VCG05LdhN2A4xjBOFdcPQjUoWJQGe3fwqY,24894
|
|
27
|
-
torchcodec/_core/BetaCudaDeviceInterface.h,sha256=1f5RaG9P0sJbuy70L2_7ere6YPBh5DhO8cnGp4bu6M8,8191
|
|
28
|
-
torchcodec/_core/CMakeLists.txt,sha256=ykYMYzzH5ZnWb2e-Se_dd0Hb0_iYTIeB2ZAiZ7Ae_kE,11946
|
|
29
|
-
torchcodec/_core/CUDACommon.cpp,sha256=UVD4N4NHsqzhKWIfjdoNLbsvDdi1WBxATKRZZTm2xuY,13321
|
|
30
|
-
torchcodec/_core/CUDACommon.h,sha256=TnAQVJ9GLE35cwxbRZbmT47s-T2yHuIssfZYEyRBTyE,1397
|
|
31
|
-
torchcodec/_core/Cache.h,sha256=TG3kE1i86edBR9LXsEl4nToMOOi8wPJXFJYkTbBiJdk,5210
|
|
32
|
-
torchcodec/_core/CpuDeviceInterface.cpp,sha256=y9Emp-7M_LyrplNszajTvXjmhxPBKwOo-gd9Y9zI54E,13315
|
|
33
|
-
torchcodec/_core/CpuDeviceInterface.h,sha256=t7BwlKIev9baPh8whO1H37K1ue5p7n1GGf3en806WTU,5039
|
|
34
|
-
torchcodec/_core/CudaDeviceInterface.cpp,sha256=3jo1ZodG1TZJ6KqdK3_JlQ3QInIX1SmxkFcUHwuk2Kc,13936
|
|
35
|
-
torchcodec/_core/CudaDeviceInterface.h,sha256=Ni-0h-vZUUv63_yr29qRMI7boEtDdnH5dh5gGvlYeDU,2200
|
|
36
|
-
torchcodec/_core/DeviceInterface.cpp,sha256=6Is9D-K8G5qQUJnZPIuYF4Tynn4TltSRTKi8uxHGfpg,3335
|
|
37
|
-
torchcodec/_core/DeviceInterface.h,sha256=93Yiut6Wl_SlLUJpriy3ZU7iOc1RFoFGFGYukhG3MiQ,5010
|
|
38
|
-
torchcodec/_core/Encoder.cpp,sha256=iZDJvog3ZIWfT8MilXFwcXjB463BfU-Vl3F0hlao_84,28524
|
|
39
|
-
torchcodec/_core/Encoder.h,sha256=SrsBaDIMuqdNX4YatPL3DBEZdcJFR6gC8hv-r2DUNLM,7902
|
|
40
|
-
torchcodec/_core/FFMPEGCommon.cpp,sha256=Zqz2rzcOVHW7sHrFbMjXW3nv7FsaIEqnbO7oloKCs4w,19668
|
|
41
|
-
torchcodec/_core/FFMPEGCommon.h,sha256=qmNqakH6SD6JQzYjwVPxnb7P4sOjcit-zrwZTlSPKSk,8294
|
|
42
|
-
torchcodec/_core/FilterGraph.cpp,sha256=b-7Htlc1mahQYQMd1u4BZgS1H83HXMazE6O_RGOZh2M,5129
|
|
43
|
-
torchcodec/_core/FilterGraph.h,sha256=l8FfApNcRwN-cl-LepfXvK6DqLNCij_p9BfwhKT-l_Q,1693
|
|
44
|
-
torchcodec/_core/Frame.cpp,sha256=wLNVu7lrGvi6fAqOn7U3-zLx4C59kG4FO6RvHwwUAUE,1570
|
|
45
|
-
torchcodec/_core/Frame.h,sha256=x5GyoaAVf1_avDf4uXolhU3e5391dcy6c7a4K-qjbNU,2333
|
|
46
|
-
torchcodec/_core/Metadata.h,sha256=cUTRJAgwUyXH5JjvCRl9tB0na7_2kJvydfkAKT4QZN8,2580
|
|
47
|
-
torchcodec/_core/NVDECCache.cpp,sha256=9O2Iyxf0vnLDusA8Hi8QwhWkpaW9KrJOQrmoIMTdR0Q,1798
|
|
48
|
-
torchcodec/_core/NVDECCache.h,sha256=uN6LKQVp9M6mbuW7PnnYksxZ3KGbXF6p8TdYvrhiCnk,3376
|
|
49
|
-
torchcodec/_core/SingleStreamDecoder.cpp,sha256=XnbHHanEBKz6TQdIfSIJX9mc0QsbMqOn4dHP_C6p6lA,67483
|
|
50
|
-
torchcodec/_core/SingleStreamDecoder.h,sha256=63zQKGlfgPJGpJ8qQkhkf41WELyO0sWCaqg6BNkHngY,16753
|
|
51
|
-
torchcodec/_core/StreamOptions.h,sha256=uj5Zw2I9E5Ek1VmHZNkGvprd2BdbKMfiFRdhbhymsgo,1945
|
|
52
|
-
torchcodec/_core/Transform.cpp,sha256=V8Nc9hNioA-Z33vwEic1fCRQ1imrWBx037doQZKyoFU,1634
|
|
53
|
-
torchcodec/_core/Transform.h,sha256=dESbEg7wLKXGvD4mD6lRAJLC-yw5UM3BIVXg7FrdTKc,1861
|
|
54
|
-
torchcodec/_core/ValidationUtils.cpp,sha256=PkBTLv_38eYG9ZUVbGijHSug3YewtD2FNiftfZ3q8S8,994
|
|
55
|
-
torchcodec/_core/ValidationUtils.h,sha256=XWSUL441nPNYRGCnnpul0iuWtUNgZXC_fcsxeb-oB6E,579
|
|
56
|
-
torchcodec/_core/__init__.py,sha256=cVcOlVRTBQ37oxmU7O3juISHRZhBC2kX2k7LtBwZAp4,1097
|
|
57
|
-
torchcodec/_core/_metadata.py,sha256=LWlCQmJwJ66TjK_4bwtMARzSDVlid62dpsOVpDHk8NQ,13117
|
|
58
|
-
torchcodec/_core/custom_ops.cpp,sha256=pCiNussNsiDFUC-DQCDGnCef4P__TXFQq6-rUdGNoRI,35508
|
|
59
|
-
torchcodec/_core/fetch_and_expose_non_gpl_ffmpeg_libs.cmake,sha256=q6KCuRVW3R1zZls-lIFAgATntCnKspc9pbfLbifZBvU,8324
|
|
60
|
-
torchcodec/_core/ops.py,sha256=CDQNUEuuJefEDGWkk1utHJhhOcgd-FZU3qjCuvNsM0k,17793
|
|
61
|
-
torchcodec/_core/pybind_ops.cpp,sha256=RyDIZOFPjFxONg1MsO1tyn8Mp4N-J6R-td8-XCIWpmY,2066
|
|
62
|
-
torchcodec/_core/nvcuvid_include/cuviddec.h,sha256=tSf1ap09onfbt6bZ5mkib6pBMc-MfviZW5RxeI8_-Fk,63992
|
|
63
|
-
torchcodec/_core/nvcuvid_include/nvcuvid.h,sha256=Kw7TUxeelTXP5PTJbR8Gjo_B1h-rjI1BiWknoMVebGE,29342
|
|
64
|
-
torchcodec/_samplers/__init__.py,sha256=qWg69NiVSnMcYi68RTVFGvvp9bh1jkNha5u7q3VMRLw,258
|
|
65
|
-
torchcodec/_samplers/video_clip_sampler.py,sha256=1tyYp75oW7g_JZWbKT08viqMv2wn8RKZBG8v1YOu0P8,18172
|
|
66
|
-
torchcodec/decoders/__init__.py,sha256=nR-ewJrecOi2C-eiB2i_vuoMPY9IhbHLyo1A6sq2Ww0,468
|
|
67
|
-
torchcodec/decoders/_audio_decoder.py,sha256=dWbtH7OLIgcbiFQIvP9qpATvIC7XeS67P9uGM4dmsRE,7580
|
|
68
|
-
torchcodec/decoders/_decoder_utils.py,sha256=lV9_S3k7pp-Se7m_dqqFZzxPr-a4zOsUdwVDXh7buj4,4377
|
|
69
|
-
torchcodec/decoders/_video_decoder.py,sha256=rntQe97_E1cyAs1Nlo8Ppgsf8_0yWjLoP8i2bG_-ejc,20306
|
|
70
|
-
torchcodec/encoders/__init__.py,sha256=Jw7dTzlTbzTaD_ZMrgSxUWEMs7Pn0cyxKm-_beuBIGo,50
|
|
71
|
-
torchcodec/encoders/_audio_encoder.py,sha256=VMZs6VTQDIMcsBxWtQEUpwq_ruILrrvNVktkswajaiM,6312
|
|
72
|
-
torchcodec/samplers/__init__.py,sha256=pijGrxa71UjRYHh1sRqLzwpsVXYAmHe24kMbC-rZW_M,159
|
|
73
|
-
torchcodec/samplers/_common.py,sha256=okgK1nVKA6mE9Li1Jex1GbzN7m26S3LtaREeF1AX-dA,2823
|
|
74
|
-
torchcodec/samplers/_index_based.py,sha256=8iwlYZrqTdP7CnnBbwd3PsJhQNkF-YHH802AHAEoG-g,11695
|
|
75
|
-
torchcodec/samplers/_time_based.py,sha256=wjFNo0gkgBKIslGWGYgUWDwGVJBg9L7EiM32fA3kCOc,15068
|
|
76
|
-
torchcodec-0.8.0.dist-info/licenses/LICENSE,sha256=ry9-8rOEo-Fe1s7VhuGoMWcBx72CjMauQWTw26jlrI8,1502
|
|
77
|
-
torchcodec-0.8.0.dist-info/METADATA,sha256=GuIN2gGGF8pddR9TQT-asmVCg6-ClR7pI_BIKkkFrkI,9716
|
|
78
|
-
torchcodec-0.8.0.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
|
|
79
|
-
torchcodec-0.8.0.dist-info/top_level.txt,sha256=S1IZq2_jNQE_RDGwxNunVF8S1RCMXmWdAAQjLXBdu2g,21
|
|
80
|
-
torchcodec-0.8.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|