1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_AV_TRANS_STREAM_DATA_H 17 #define OHOS_AV_TRANS_STREAM_DATA_H 18 19 #include "av_trans_data_buffer.h" 20 #include "cJSON.h" 21 #include <memory> 22 #include <optional> 23 24 namespace OHOS { 25 namespace DistributedCollab { 26 enum class AvCodecBufferFlag : uint32_t { 27 AVCODEC_BUFFER_FLAG_NONE = 0, 28 AVCODEC_BUFFER_FLAG_EOS, 29 AVCODEC_BUFFER_FLAG_SYNC_FRAME, 30 AVCODEC_BUFFER_FLAG_PARTIAL_FRAME, 31 AVCODEC_BUFFER_FLAG_CODEC_DATA, 32 AVCODEC_BUFFER_FLAG_PIXEL_MAP, 33 AVCODEC_BUFFER_FLAG_SURFACE_PARAM 34 }; 35 36 enum class SurfaceRotate : uint32_t { 37 ROTATE_NONE = 0, 38 ROTATE_90, 39 ROTATE_180, 40 ROTATE_270 41 }; 42 43 enum class SurfaceFilp : uint32_t { 44 FLIP_NONE = 0, 45 FLIP_H, 46 FLIP_V 47 }; 48 49 struct SurfaceParam { 50 SurfaceRotate rotate = SurfaceRotate::ROTATE_NONE; 51 SurfaceFilp filp = SurfaceFilp::FLIP_NONE; 52 }; 53 54 struct PixelMapPackOption { 55 uint8_t quality = 100; 56 uint32_t width = 0; 57 uint32_t height = 0; 58 }; 59 60 struct AVTransStreamDataExt { 61 AvCodecBufferFlag flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA; 62 uint32_t index_ = 0; 63 uint64_t pts_ = 0; 64 uint64_t startEncodeT_ = 0; 65 uint64_t finishEncodeT_ = 0; 66 uint64_t sendEncodeT_ = 0; 67 PixelMapPackOption pixelMapOption_; 68 SurfaceParam surfaceParam_; 69 }; 70 71 class AVTransStreamData { 72 public: AVTransStreamData(const std::shared_ptr<AVTransDataBuffer> & buffer,const AVTransStreamDataExt ext)73 explicit AVTransStreamData( 74 const std::shared_ptr<AVTransDataBuffer>& buffer, 75 const AVTransStreamDataExt ext) 76 : data_(buffer), 77 ext_(ext) {}; 78 ~AVTransStreamData() = default; 79 80 std::shared_ptr<AVTransDataBuffer> StreamData(); 81 const AVTransStreamDataExt& GetStreamDataExt() const; 82 cJSON* SerializeStreamDataExt() const; 83 int32_t DeserializeStreamDataExt(const char* data); 84 void DeserializeExtFromJson(const cJSON* root); 85 86 private: 87 std::shared_ptr<AVTransDataBuffer> data_; 88 AVTransStreamDataExt ext_; 89 90 private: 91 void WriteExtFlagToJson(cJSON* root) const; 92 void WriteExtIndexToJson(cJSON* root) const; 93 void WriteExtPtsToJson(cJSON* root) const; 94 void WriteExtStartEncodeTToJson(cJSON* root) const; 95 void WriteExtFinishEncodeTToJson(cJSON* root) const; 96 void WriteExtSendEncodeTToJson(cJSON* root) const; 97 void WriteExtPixelMapPackOptionToJson(cJSON* root) const; 98 void WriteExtSurfaceParamToJson(cJSON* root) const; 99 100 void ReadExtFlagFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 101 void ReadExtIndexFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 102 void ReadExtPtsFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 103 void ReadExtStartEncodeTFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 104 void ReadExtFinishEncodeTFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 105 void ReadExtSendEncodeTFromJson(AVTransStreamDataExt& dataExt, const cJSON* root); 106 void ReadExtPixelMapPackOptionToJson(AVTransStreamDataExt& dataExt, const cJSON* root); 107 void ReadExtSurfaceParamToJson(AVTransStreamDataExt& dataExt, const cJSON* root); 108 }; 109 } // namespace DistributedSchedule 110 } // namespace OHOS 111 #endif // OHOS_AV_TRANS_DATA_BUFFER_H 112