File indexing completed on 2024-06-02 05:00:30
0001 // SPDX-FileCopyrightText: 2021 Linus Jahn <lnj@kaidan.im> 0002 // SPDX-License-Identifier: GPL-3.0-or-later 0003 0004 #pragma once 0005 0006 #include "qinvidiousglobal.h" 0007 0008 #include <QDateTime> 0009 #include <QUrl> 0010 0011 #include <cstdint> 0012 0013 namespace QInvidious 0014 { 0015 0016 class MediaFormatBase 0017 { 0018 public: 0019 enum Container : uint8_t { 0020 InvalidContainer, 0021 WebM, 0022 Mp4, 0023 M4a, 0024 }; 0025 0026 enum Codec : uint8_t { 0027 InvalidCodec, 0028 Opus, 0029 AAC, 0030 VP9, 0031 H264, 0032 AV1, 0033 }; 0034 0035 FROM_JSON_OVERLOADS(MediaFormatBase) 0036 static MediaFormatBase fromJson(const QJsonObject &obj, MediaFormatBase &); 0037 0038 QUrl url() const; 0039 0040 uint16_t formatId() const; 0041 0042 uint8_t fps() const; 0043 0044 uint16_t resolution() const; 0045 0046 Container container() const; 0047 0048 private: 0049 QUrl m_url; 0050 uint16_t m_formatId = 0; 0051 uint8_t m_fps = 0; 0052 uint16_t m_resolution = 0; 0053 Container m_container = InvalidContainer; 0054 }; 0055 0056 class MediaFormat : public MediaFormatBase 0057 { 0058 public: 0059 FROM_JSON_OVERLOADS(MediaFormat) 0060 static MediaFormat fromJson(const QJsonObject &obj, MediaFormat &); 0061 0062 enum MediaType { 0063 Unknown, 0064 Audio, 0065 Video, 0066 }; 0067 0068 MediaType mediaType() const; 0069 0070 uint32_t bitrate() const; 0071 void setBitrate(uint32_t bitrate); 0072 0073 uint64_t size() const; 0074 void setSize(uint64_t size); 0075 0076 Codec codec() const; 0077 void setCodec(Codec codec); 0078 0079 QDateTime createdTimestamp() const; 0080 void setCreatedTimestamp(const QDateTime &createdTimestamp); 0081 0082 private: 0083 uint32_t m_bitrate = 0; 0084 uint64_t m_size = 0; 0085 Codec m_codec = InvalidCodec; 0086 QDateTime m_createdTimestamp; 0087 }; 0088 0089 class MediaFormatCombined : public MediaFormatBase 0090 { 0091 public: 0092 FROM_JSON_OVERLOADS(MediaFormatCombined) 0093 static MediaFormatCombined fromJson(const QJsonObject &obj, MediaFormatCombined &); 0094 0095 Codec audioCodec() const; 0096 void setAudioCodec(Codec audioCodec); 0097 0098 Codec videoCodec() const; 0099 void setVideoCodec(Codec videoCodec); 0100 0101 private: 0102 Codec m_audioCodec = InvalidCodec; 0103 Codec m_videoCodec = InvalidCodec; 0104 }; 0105 0106 }