c7bd0f23创建于 2024年2月6日历史提交
/*
 * Copyright (c) 2021-2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include "plugin/core/plugin_wrapper.h"
#include <set>

namespace {
std::set<OHOS::Media::Plugin::Tag> g_metaIdSet = {
    OHOS::Media::Plugin::Tag::MIME,
    OHOS::Media::Plugin::Tag::TRACK_ID,
    OHOS::Media::Plugin::Tag::MEDIA_CODEC_CONFIG,
    OHOS::Media::Plugin::Tag::MEDIA_BITRATE,
    OHOS::Media::Plugin::Tag::AUDIO_CHANNELS,
    OHOS::Media::Plugin::Tag::AUDIO_SAMPLE_RATE,
    OHOS::Media::Plugin::Tag::AUDIO_SAMPLE_FORMAT,
    OHOS::Media::Plugin::Tag::AUDIO_SAMPLE_PER_FRAME,
    OHOS::Media::Plugin::Tag::AUDIO_CHANNEL_LAYOUT,
    OHOS::Media::Plugin::Tag::MEDIA_TITLE,
    OHOS::Media::Plugin::Tag::MEDIA_ARTIST,
    OHOS::Media::Plugin::Tag::MEDIA_LYRICIST,
    OHOS::Media::Plugin::Tag::MEDIA_ALBUM,
    OHOS::Media::Plugin::Tag::MEDIA_ALBUM_ARTIST,
    OHOS::Media::Plugin::Tag::MEDIA_DATE,
    OHOS::Media::Plugin::Tag::MEDIA_COMMENT,
    OHOS::Media::Plugin::Tag::MEDIA_GENRE,
    OHOS::Media::Plugin::Tag::MEDIA_DESCRIPTION,
    OHOS::Media::Plugin::Tag::MEDIA_COPYRIGHT,
    OHOS::Media::Plugin::Tag::MEDIA_LANGUAGE,
    OHOS::Media::Plugin::Tag::MEDIA_LYRICS,
    OHOS::Media::Plugin::Tag::MEDIA_DURATION,
    OHOS::Media::Plugin::Tag::MEDIA_FILE_URI,
    OHOS::Media::Plugin::Tag::MEDIA_FILE_SIZE,
    OHOS::Media::Plugin::Tag::MEDIA_SEEKABLE,
    OHOS::Media::Plugin::Tag::MEDIA_TYPE,
    OHOS::Media::Plugin::Tag::AUDIO_MPEG_VERSION,
    OHOS::Media::Plugin::Tag::AUDIO_MPEG_LAYER,
    OHOS::Media::Plugin::Tag::AUDIO_AAC_PROFILE,
    OHOS::Media::Plugin::Tag::AUDIO_AAC_LEVEL,
    OHOS::Media::Plugin::Tag::AUDIO_AAC_STREAM_FORMAT,
    OHOS::Media::Plugin::Tag::VIDEO_WIDTH,
    OHOS::Media::Plugin::Tag::VIDEO_HEIGHT,
    OHOS::Media::Plugin::Tag::VIDEO_PIXEL_FORMAT,
    OHOS::Media::Plugin::Tag::VIDEO_BIT_STREAM_FORMAT,
    OHOS::Media::Plugin::Tag::VIDEO_FRAME_RATE,
    OHOS::Media::Plugin::Tag::VIDEO_H264_LEVEL,
    OHOS::Media::Plugin::Tag::VIDEO_H264_PROFILE,
    OHOS::Media::Plugin::Tag::BITS_PER_CODED_SAMPLE,
};
}

namespace OHOS {
namespace Media {
namespace Plugin {
DataSourceWrapper::DataSourceWrapper(uint32_t pkgVersion, std::shared_ptr<DataSourceHelper> dataSource)
    : version(pkgVersion), helper(std::move(dataSource))
{
}

Status DataSourceWrapper::ReadAt(int64_t offset, std::shared_ptr<Buffer>& buffer, size_t expectedLen)
{
    return helper->ReadAt(offset, buffer, expectedLen);
}

Status DataSourceWrapper::GetSize(uint64_t& size)
{
    return helper->GetSize(size);
}

Seekable DataSourceWrapper::GetSeekable()
{
    return helper->GetSeekable();
}

DataSinkWrapper::DataSinkWrapper(uint32_t pkgVersion, std::shared_ptr<DataSinkHelper> dataSink)
    : version(pkgVersion), helper(std::move(dataSink)) {}

Status DataSinkWrapper::WriteAt(int64_t offset, const std::shared_ptr<Buffer>& buffer)
{
    return helper->WriteAt(offset, buffer);
}

void ConvertToMediaInfoHelper(uint32_t pkgVersion, const MediaInfo& src, MediaInfoHelper& dest)
{
    (void)(pkgVersion);
    for (auto const& global : src.general) {
        dest.globalMeta.SetData(global.first, global.second);
    }
    size_t streamSize = src.tracks.size();
    if (streamSize == 0) {
        return;
    }
    dest.trackMeta.resize(streamSize);
    for (size_t i = 0; i < streamSize; ++i) {
        for (auto const& meta : src.tracks[i]) {
            if (g_metaIdSet.count(meta.first)) {
                dest.trackMeta[i].SetData(meta.first, meta.second);
            }
        }
    }
}
} // namespace Plugin
} // namespace Media
} // namespace OHOS