1/* 2 * Copyright (c) 2022 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#include "input.h" 17 18namespace OHOS { 19namespace Rosen { 20void Input::DoProcess(ProcessData& data) 21{ 22 if (format_ == "image/jpg" || format_ == "image/png") { 23 DecodeFromFile(data); 24 } else if (format_ == "pixelMap") { 25 DecodeFromPixelMap(data); 26 } else if (format_ == "buffer") { 27 DecodeFromBuffer(data); 28 } 29} 30 31void Input::DecodeFromFile(ProcessData& data) 32{ 33 uint32_t errorCode = 0; 34 OHOS::Media::SourceOptions sourceOpts; 35 sourceOpts.formatHint = format_; 36 std::unique_ptr<OHOS::Media::ImageSource> imageSource = 37 OHOS::Media::ImageSource::CreateImageSource(srcImagePath_, sourceOpts, errorCode); 38 OHOS::Media::DecodeOptions decodeOpts; 39 if (imageSource == nullptr) { 40 LOGD("Failed to create imageSource!"); 41 return; 42 } 43 pixelMap_ = imageSource->CreatePixelMap(decodeOpts, errorCode); 44 DecodeFromPixelMap(data); 45} 46 47void Input::DecodeFromPixelMap(ProcessData& data) 48{ 49 if (pixelMap_ == nullptr) { 50 LOGD("Failed to create PixelMap!"); 51 return; 52 } 53 data.textureWidth = pixelMap_->GetWidth(); 54 data.textureHeight = pixelMap_->GetHeight(); 55 56 glBindTexture(GL_TEXTURE_2D, data.srcTextureID); 57 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 58 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, data.textureWidth, data.textureHeight, 59 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelMap_->GetPixels()); 60 glGenerateMipmap(GL_TEXTURE_2D); 61} 62 63void Input::DecodeFromBuffer(ProcessData& data) 64{ 65 if (buffer_ == nullptr) { 66 return; 67 } 68 data.textureWidth = bufferWidth_; 69 data.textureHeight = bufferHeight_; 70 glBindTexture(GL_TEXTURE_2D, data.srcTextureID); 71 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 72 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, data.textureWidth, data.textureHeight, 73 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer_.get()); 74 glGenerateMipmap(GL_TEXTURE_2D); 75} 76FILTER_TYPE Input::GetFilterType() 77{ 78 return FILTER_TYPE::INPUT; 79} 80 81void Input::SetValue(const std::string& key, std::shared_ptr<void> value, int size) 82{ 83 if (key == "format" && size > 0) { 84 std::shared_ptr<std::string> format = std::static_pointer_cast<std::string>(value); 85 format_ = *(format.get()); 86 if (format_ == "jpg" || format_ == "jpeg") { 87 format_ = "image/jpg"; 88 } else if (format_ == "png") { 89 format_ = "image/png"; 90 } else if (format_ == "pixelMap") { 91 format_ = "pixelMap"; 92 } else if (format_ == "buffer") { 93 format_ = "buffer"; 94 } 95 LOGD("The input format is %{public}s.", format_.c_str()); 96 } else if (key == "src" && size > 0) { 97 if (format_ == "image/jpg" || format_ == "image/png") { 98 std::shared_ptr<std::string> srcImagePath = std::static_pointer_cast<std::string>(value); 99 srcImagePath_ = *(srcImagePath.get()); 100 LOGD("The input source image path is %{public}s.", srcImagePath_.c_str()); 101 } else if (format_ == "pixelMap") { 102 pixelMap_ = std::static_pointer_cast<OHOS::Media::PixelMap>(value); 103 } else if (format_ == "buffer") { 104 buffer_ = std::static_pointer_cast<uint8_t>(value); 105 } 106 } else if (key == "bufferWidth" && size > 0) { 107 std::shared_ptr<int> bufferWidth = std::static_pointer_cast<int>(value); 108 bufferWidth_ = *(bufferWidth.get()); 109 } else if (key == "bufferHeight" && size > 0) { 110 std::shared_ptr<int> bufferHeight = std::static_pointer_cast<int>(value); 111 bufferHeight_ = *(bufferHeight.get()); 112 } 113} 114} // namespcae Rosen 115} // namespace OHOS