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 }