1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 Shenzhen Kaihong DID Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci * 		http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci#ifndef CODEC_PACKET_READER_H
16094332d3Sopenharmony_ci#define CODEC_PACKET_READER_H
17094332d3Sopenharmony_ci#include <cinttypes>
18094332d3Sopenharmony_ci#include <fstream>
19094332d3Sopenharmony_ci#include <iostream>
20094332d3Sopenharmony_ci#include <memory>
21094332d3Sopenharmony_ci#include "command_parse.h"
22094332d3Sopenharmony_ciclass CodecPacketReader {
23094332d3Sopenharmony_cipublic:
24094332d3Sopenharmony_ci    using Ptr = std::shared_ptr<CodecPacketReader>;
25094332d3Sopenharmony_ci    CodecPacketReader() = default;
26094332d3Sopenharmony_ci    virtual ~CodecPacketReader() = default;
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_ci    virtual bool ReadOnePacket(std::ifstream &ioIn, char *buf, uint32_t &filledCount) = 0;
29094332d3Sopenharmony_ci
30094332d3Sopenharmony_ci    static Ptr GetPacketReader(const CodecMime &mime);
31094332d3Sopenharmony_ci};
32094332d3Sopenharmony_ci
33094332d3Sopenharmony_ciclass CodecH264Reader : public CodecPacketReader {
34094332d3Sopenharmony_cipublic:
35094332d3Sopenharmony_ci    using Ptr = std::shared_ptr<CodecPacketReader>;
36094332d3Sopenharmony_ci    CodecH264Reader();
37094332d3Sopenharmony_ci    ~CodecH264Reader() = default;
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ci    bool ReadOnePacket(std::ifstream &ioIn, char *buf, uint32_t &filledCount) override;
40094332d3Sopenharmony_ci};
41094332d3Sopenharmony_ci
42094332d3Sopenharmony_ciclass CodecMpeg4Reader : public CodecPacketReader {
43094332d3Sopenharmony_cipublic:
44094332d3Sopenharmony_ci    using Ptr = std::shared_ptr<CodecPacketReader>;
45094332d3Sopenharmony_ci    CodecMpeg4Reader();
46094332d3Sopenharmony_ci    ~CodecMpeg4Reader() = default;
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_ci    bool ReadOnePacket(std::ifstream &ioIn, char *buf, uint32_t &filledCount) override;
49094332d3Sopenharmony_ci};
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_ciclass CodecVp9Reader : public CodecPacketReader {
52094332d3Sopenharmony_cipublic:
53094332d3Sopenharmony_ci    using Ptr = std::shared_ptr<CodecVp9Reader>;
54094332d3Sopenharmony_ci    CodecVp9Reader();
55094332d3Sopenharmony_ci    ~CodecVp9Reader() = default;
56094332d3Sopenharmony_ci
57094332d3Sopenharmony_ci    bool ReadOnePacket(std::ifstream &ioIn, char *buf, uint32_t &filledCount) override;
58094332d3Sopenharmony_ci};
59094332d3Sopenharmony_ci#endif