diff --git a/BUILD.gn b/BUILD.gn index d361f88..4086fa6 100755 --- a/BUILD.gn +++ b/BUILD.gn @@ -22,7 +22,7 @@ shared_library("media_common") { cflags += [ "-Wall" ] cflags_cc = cflags include_dirs = [ - "include", + "interfaces/kits", "//third_party/bounds_checking_function/include", ] public_deps = [ diff --git a/README.md b/README.md index 58b04ff..acf2ab1 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ The following table lists the error codes. ``` foundation/multimedia/utils/lite -├── include # Header file of the data types and media formats +├── interfaces # Header file of the data types and media formats └── hals # HAL adaptation APIs └── src # Implementation of the data types and media formats ``` diff --git a/README_zh.md b/README_zh.md index ed75d07..2dc0431 100644 --- a/README_zh.md +++ b/README_zh.md @@ -124,7 +124,7 @@ ``` foundation/multimedia/utils/lite -├── include # 数据类型和媒体格式头文件 +├── interfaces # 数据类型和媒体格式头文件 └── hals # HAL层适配接口 └── src # 数据类型和媒体格式实现 ``` diff --git a/include/format.h b/interfaces/kits/format.h old mode 100755 new mode 100644 similarity index 96% rename from include/format.h rename to interfaces/kits/format.h index 7b3cb8e..85e59ea --- a/include/format.h +++ b/interfaces/kits/format.h @@ -1,367 +1,367 @@ -/* - * Copyright (c) 2020 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. - */ - -/** - * @addtogroup MultiMedia_MediaCommon - * @{ - * - * @brief Provides data types and media formats required for recording and playing audio and videos. - * - * - * @since 1.0 - * @version 1.0 - */ - -/** - * @file format.h - * - * @brief Declares the media formats provided in the Format class. - * - * - * @since 1.0 - * @version 1.0 - */ - - -#ifndef FORMAT_H -#define FORMAT_H - -#include -#include -#include - -namespace OHOS { -namespace Media { -/** Indicates the key representing the codec type. */ -extern const char *CODEC_MIME; - -/** Indicates the codec for Advanced Audio Coding (AAC) streams, which is a value of the codec type key. */ -extern const char *MIME_AUDIO_AAC; - -/** Indicates the codec for RAW audios (not supported yet), which is a value of the codec type key. */ -extern const char *MIME_AUDIO_RAW; - -/** - * @brief Enumerates formats. - * - * @since 1.0 - * @version 1.0 - */ -enum FormatDataType : uint32_t { - /** None */ - FORMAT_TYPE_NONE, - /** Int32 */ - FORMAT_TYPE_INT32, - /** Int64 */ - FORMAT_TYPE_INT64, - /** Float */ - FORMAT_TYPE_FLOAT, - /** Double */ - FORMAT_TYPE_DOUBLE, - /** String */ - FORMAT_TYPE_STRING -}; - -/** - * @brief Represents the data format. - * - * @since 1.0 - * @version 1.0 - */ -class FormatData { -public: - explicit FormatData(FormatDataType type); - FormatData(); - ~FormatData(); - - /** - * @brief Obtains the format type. - * - * @return Returns the format type. For details, see {@link OHOS::Media::FormatDataType}. - * @since 1.0 - * @version 1.0 - */ - FormatDataType GetType() const - { - return type_; - } - - /** - * @brief Sets a 32-bit integer. - * - * @param val Indicates the 32-bit integer to set. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool SetValue(int32_t val); - - /** - * @brief Sets a 64-bit long integer. - * - * @param val Indicates the 64-bit long integer to set. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool SetValue(int64_t val); - - /** - * @brief Sets a single-precision floating-point number. - * - * @param val Indicates the single-precision floating-point number to set. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool SetValue(float val); - - /** - * @brief Sets a double-precision floating-point number. - * - * @param val Indicates the double-precision floating-point number to set. - * @return Returns true if the double-precision floating-point number is successfully set; returns - * false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool SetValue(double val); - - /** - * @brief Sets a string. - * - * @param val Indicates the string to set. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool SetValue(const std::string &val); - - /** - * @brief Obtains a 32-bit integer. - * - * @param val Indicates the 32-bit integer to obtain. - * @return Returns true if the integer is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetInt32Value(int32_t &val) const; - - /** - * @brief Obtains a long integer. - * - * @param val Indicates the long integer to obtain. - * @return Returns true if the integer is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetInt64Value(int64_t &val) const; - - /** - * @brief Obtains a single-precision floating-point number. - * - * @param val Indicates the single-precision floating-point number to obtain. - * @return Returns true if the single-precision number is successfully obtained; returns - * false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetFloatValue(float &val) const; - - /** - * @brief Obtains a double-precision floating-point number. - * - * @param val Indicates the double-precision floating-point number to obtain. - * @return Returns true if the double-precision number is successfully obtained; returns - * false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetDoubleValue(double &val) const; - - /** - * @brief Obtains a string. - * - * @param val Indicates the string to obtain. - * @return Returns true if the string is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetStringValue(std::string &val) const; -private: - FormatDataType type_; - union { - int32_t int32Val; - int64_t int64Val; - float floatVal; - double doubleVal; - std::string *stringVal; - } val_; -}; - -/** - * @brief Saves and sets media metadata, such as the media playback duration. - * - * @since 1.0 - * @version 1.0 - */ -class Format { -public: - /** - * @brief Default constructor of the {@link Format} instance. - * - */ - Format(); - ~Format(); - - /** - * @brief Sets metadata of the integer type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value, which is a 32-bit integer. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool PutIntValue(const std::string &key, int32_t value); - - /** - * @brief Sets metadata of the long integer type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value, which is a 64-bit integer. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool PutLongValue(const std::string &key, int64_t value); - - /** - * @brief Sets metadata of the single-precision floating-point type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value, which is a single-precision floating-point number. - * @return Returns true if the metadata is successfully set; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool PutFloatValue(const std::string &key, float value); - - /** - * @brief Sets metadata of the double-precision floating-point type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value, which is a double-precision floating-point number. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool PutDoubleValue(const std::string &key, double value); - - /** - * @brief Sets metadata of the string type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value, which is a string. - * @return Returns true if the metadata is successfully set; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool PutStringValue(const std::string &key, const std::string &value); - - /** - * @brief Obtains the metadata value of the integer type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value to obtain, which is a 32-bit integer. - * @return Returns true if the integer is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetIntValue(const std::string &key, int32_t &value) const; - - /** - * @brief Obtains the metadata value of the long integer type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value to obtain, which is a 64-bit long integer. - * @return Returns true if the integer is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetLongValue(const std::string &key, int64_t &value) const; - - /** - * @brief Obtains the metadata value of the single-precision floating-point type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value to obtain, which is a single-precision floating-point number. - * @return Returns true if the single-precision number is successfully obtained; returns - * false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetFloatValue(const std::string &key, float &value) const; - - /** - * @brief Obtains the metadata value of the double-precision floating-point type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value to obtain, which is a double-precision floating-point number. - * @return Returns true if the double-precision number is successfully obtained; returns - * false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetDoubleValue(const std::string &key, double &value) const; - - /** - * @brief Obtains the metadata value of the string type. - * - * @param key Indicates the metadata key. - * @param value Indicates the metadata value to obtain, which is a string. - * @return Returns true if the string is successfully obtained; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool GetStringValue(const std::string &key, std::string &value) const; - - /** - * @brief Obtains the metadata map. - * - * @return Returns the map object. - * @since 1.0 - * @version 1.0 - */ - const std::map &GetFormatMap() const; - - /** - * @brief Sets all metadata to a specified format. - * - * @param format Indicates the format. For details, see {@link Format}. - * @return Returns true if the setting is successful; returns false otherwise. - * @since 1.0 - * @version 1.0 - */ - bool CopyFrom(const Format &format); - -private: - template - bool SetFormatCommon(const std::string &key, const T &value, FormatDataType type); - std::map formatMap_; -}; -} // namespace Media -} // namespace OHOS -#endif // FORMAT_H +/* + * Copyright (c) 2020 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. + */ + +/** + * @addtogroup MultiMedia_MediaCommon + * @{ + * + * @brief Provides data types and media formats required for recording and playing audio and videos. + * + * + * @since 1.0 + * @version 1.0 + */ + +/** + * @file format.h + * + * @brief Declares the media formats provided in the Format class. + * + * + * @since 1.0 + * @version 1.0 + */ + + +#ifndef FORMAT_H +#define FORMAT_H + +#include +#include +#include + +namespace OHOS { +namespace Media { +/** Indicates the key representing the codec type. */ +extern const char *CODEC_MIME; + +/** Indicates the codec for Advanced Audio Coding (AAC) streams, which is a value of the codec type key. */ +extern const char *MIME_AUDIO_AAC; + +/** Indicates the codec for RAW audios (not supported yet), which is a value of the codec type key. */ +extern const char *MIME_AUDIO_RAW; + +/** + * @brief Enumerates formats. + * + * @since 1.0 + * @version 1.0 + */ +enum FormatDataType : uint32_t { + /** None */ + FORMAT_TYPE_NONE, + /** Int32 */ + FORMAT_TYPE_INT32, + /** Int64 */ + FORMAT_TYPE_INT64, + /** Float */ + FORMAT_TYPE_FLOAT, + /** Double */ + FORMAT_TYPE_DOUBLE, + /** String */ + FORMAT_TYPE_STRING +}; + +/** + * @brief Represents the data format. + * + * @since 1.0 + * @version 1.0 + */ +class FormatData { +public: + explicit FormatData(FormatDataType type); + FormatData(); + ~FormatData(); + + /** + * @brief Obtains the format type. + * + * @return Returns the format type. For details, see {@link OHOS::Media::FormatDataType}. + * @since 1.0 + * @version 1.0 + */ + FormatDataType GetType() const + { + return type_; + } + + /** + * @brief Sets a 32-bit integer. + * + * @param val Indicates the 32-bit integer to set. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool SetValue(int32_t val); + + /** + * @brief Sets a 64-bit long integer. + * + * @param val Indicates the 64-bit long integer to set. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool SetValue(int64_t val); + + /** + * @brief Sets a single-precision floating-point number. + * + * @param val Indicates the single-precision floating-point number to set. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool SetValue(float val); + + /** + * @brief Sets a double-precision floating-point number. + * + * @param val Indicates the double-precision floating-point number to set. + * @return Returns true if the double-precision floating-point number is successfully set; returns + * false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool SetValue(double val); + + /** + * @brief Sets a string. + * + * @param val Indicates the string to set. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool SetValue(const std::string &val); + + /** + * @brief Obtains a 32-bit integer. + * + * @param val Indicates the 32-bit integer to obtain. + * @return Returns true if the integer is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetInt32Value(int32_t &val) const; + + /** + * @brief Obtains a long integer. + * + * @param val Indicates the long integer to obtain. + * @return Returns true if the integer is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetInt64Value(int64_t &val) const; + + /** + * @brief Obtains a single-precision floating-point number. + * + * @param val Indicates the single-precision floating-point number to obtain. + * @return Returns true if the single-precision number is successfully obtained; returns + * false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetFloatValue(float &val) const; + + /** + * @brief Obtains a double-precision floating-point number. + * + * @param val Indicates the double-precision floating-point number to obtain. + * @return Returns true if the double-precision number is successfully obtained; returns + * false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetDoubleValue(double &val) const; + + /** + * @brief Obtains a string. + * + * @param val Indicates the string to obtain. + * @return Returns true if the string is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetStringValue(std::string &val) const; +private: + FormatDataType type_; + union { + int32_t int32Val; + int64_t int64Val; + float floatVal; + double doubleVal; + std::string *stringVal; + } val_; +}; + +/** + * @brief Saves and sets media metadata, such as the media playback duration. + * + * @since 1.0 + * @version 1.0 + */ +class Format { +public: + /** + * @brief Default constructor of the {@link Format} instance. + * + */ + Format(); + ~Format(); + + /** + * @brief Sets metadata of the integer type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value, which is a 32-bit integer. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool PutIntValue(const std::string &key, int32_t value); + + /** + * @brief Sets metadata of the long integer type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value, which is a 64-bit integer. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool PutLongValue(const std::string &key, int64_t value); + + /** + * @brief Sets metadata of the single-precision floating-point type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value, which is a single-precision floating-point number. + * @return Returns true if the metadata is successfully set; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool PutFloatValue(const std::string &key, float value); + + /** + * @brief Sets metadata of the double-precision floating-point type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value, which is a double-precision floating-point number. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool PutDoubleValue(const std::string &key, double value); + + /** + * @brief Sets metadata of the string type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value, which is a string. + * @return Returns true if the metadata is successfully set; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool PutStringValue(const std::string &key, const std::string &value); + + /** + * @brief Obtains the metadata value of the integer type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value to obtain, which is a 32-bit integer. + * @return Returns true if the integer is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetIntValue(const std::string &key, int32_t &value) const; + + /** + * @brief Obtains the metadata value of the long integer type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value to obtain, which is a 64-bit long integer. + * @return Returns true if the integer is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetLongValue(const std::string &key, int64_t &value) const; + + /** + * @brief Obtains the metadata value of the single-precision floating-point type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value to obtain, which is a single-precision floating-point number. + * @return Returns true if the single-precision number is successfully obtained; returns + * false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetFloatValue(const std::string &key, float &value) const; + + /** + * @brief Obtains the metadata value of the double-precision floating-point type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value to obtain, which is a double-precision floating-point number. + * @return Returns true if the double-precision number is successfully obtained; returns + * false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetDoubleValue(const std::string &key, double &value) const; + + /** + * @brief Obtains the metadata value of the string type. + * + * @param key Indicates the metadata key. + * @param value Indicates the metadata value to obtain, which is a string. + * @return Returns true if the string is successfully obtained; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool GetStringValue(const std::string &key, std::string &value) const; + + /** + * @brief Obtains the metadata map. + * + * @return Returns the map object. + * @since 1.0 + * @version 1.0 + */ + const std::map &GetFormatMap() const; + + /** + * @brief Sets all metadata to a specified format. + * + * @param format Indicates the format. For details, see {@link Format}. + * @return Returns true if the setting is successful; returns false otherwise. + * @since 1.0 + * @version 1.0 + */ + bool CopyFrom(const Format &format); + +private: + template + bool SetFormatCommon(const std::string &key, const T &value, FormatDataType type); + std::map formatMap_; +}; +} // namespace Media +} // namespace OHOS +#endif // FORMAT_H diff --git a/include/media_errors.h b/interfaces/kits/media_errors.h old mode 100755 new mode 100644 similarity index 96% rename from include/media_errors.h rename to interfaces/kits/media_errors.h index 44abe3d..ac7593d --- a/include/media_errors.h +++ b/interfaces/kits/media_errors.h @@ -1,104 +1,104 @@ -/* - * Copyright (c) 2020 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. - */ - -/** - * @addtogroup MultiMedia_MediaCommon - * @{ - * - * @brief Provides data types and media formats required for recording and playing audio and videos. - * - * - * @since 1.0 - * @version 1.0 - */ - -/** - * @file media_errors.h - * - * @brief Declares the media_errors class to define errors that may occur during media operations. - * - * - * @since 1.0 - * @version 1.0 - */ - -#ifndef MEDIA_ERRORS_H -#define MEDIA_ERRORS_H - -#include - -namespace OHOS { -namespace Media { -constexpr int MODULE_MEDIA = 1; -constexpr int SUBSYS_MEDIA = 30; - -using ErrCode = int32_t; -constexpr int SUBSYSTEM_BIT_NUM = 21; -constexpr int MODULE_BIT_NUM = 16; - -/** - * @brief Generates a start error code with a unique identifier based on specified subsystem and module bit numbers. - * - * @param subsystem Indicates the subsystem bit number. - * @param module Indicates the module bit number. - * @return - * @since 1.0 - * @version 1.0 - */ -constexpr ErrCode ErrCodeOffset(unsigned int subsystem, unsigned int module = 0) -{ - return (subsystem << SUBSYSTEM_BIT_NUM) | (module << MODULE_BIT_NUM); -} - -constexpr int32_t BASE_MEDIA_ERR_OFFSET = ErrCodeOffset(SUBSYS_MEDIA, MODULE_MEDIA); - -/** Invalid data size that has been read */ -const int32_t ERR_INVALID_READ = -1; - -/** Success */ -const int32_t SUCCESS = 0; - -/** Fail */ -const int32_t ERROR = BASE_MEDIA_ERR_OFFSET; - -/** Status error */ -const int32_t ERR_ILLEGAL_STATE = BASE_MEDIA_ERR_OFFSET + 1; - -/** Invalid parameter */ -const int32_t ERR_INVALID_PARAM = BASE_MEDIA_ERR_OFFSET + 2; - -/** Early media preparation */ -const int32_t ERR_EARLY_PREPARE = BASE_MEDIA_ERR_OFFSET + 3; - -/** No media source */ -const int32_t ERR_SOURCE_NOT_SET = BASE_MEDIA_ERR_OFFSET + 4; - -/** Invalid operation */ -const int32_t ERR_INVALID_OPERATION = BASE_MEDIA_ERR_OFFSET + 5; - -/** No idle channel */ -const int32_t ERR_NOFREE_CHANNEL = BASE_MEDIA_ERR_OFFSET + 6; - -/** Buffer reading failed */ -const int32_t ERR_READ_BUFFER = BASE_MEDIA_ERR_OFFSET + 7; - -/** Device not started */ -const int32_t ERR_NOT_STARTED = BASE_MEDIA_ERR_OFFSET + 8; - -/** Unknown error */ -const int32_t ERR_UNKNOWN = BASE_MEDIA_ERR_OFFSET + 200; -} // namespace Media -} // namespace OHOS -#endif // MEDIA_ERRORS_H +/* + * Copyright (c) 2020 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. + */ + +/** + * @addtogroup MultiMedia_MediaCommon + * @{ + * + * @brief Provides data types and media formats required for recording and playing audio and videos. + * + * + * @since 1.0 + * @version 1.0 + */ + +/** + * @file media_errors.h + * + * @brief Declares the media_errors class to define errors that may occur during media operations. + * + * + * @since 1.0 + * @version 1.0 + */ + +#ifndef MEDIA_ERRORS_H +#define MEDIA_ERRORS_H + +#include + +namespace OHOS { +namespace Media { +constexpr int MODULE_MEDIA = 1; +constexpr int SUBSYS_MEDIA = 30; + +using ErrCode = int32_t; +constexpr int SUBSYSTEM_BIT_NUM = 21; +constexpr int MODULE_BIT_NUM = 16; + +/** + * @brief Generates a start error code with a unique identifier based on specified subsystem and module bit numbers. + * + * @param subsystem Indicates the subsystem bit number. + * @param module Indicates the module bit number. + * @return + * @since 1.0 + * @version 1.0 + */ +constexpr ErrCode ErrCodeOffset(unsigned int subsystem, unsigned int module = 0) +{ + return (subsystem << SUBSYSTEM_BIT_NUM) | (module << MODULE_BIT_NUM); +} + +constexpr int32_t BASE_MEDIA_ERR_OFFSET = ErrCodeOffset(SUBSYS_MEDIA, MODULE_MEDIA); + +/** Invalid data size that has been read */ +const int32_t ERR_INVALID_READ = -1; + +/** Success */ +const int32_t SUCCESS = 0; + +/** Fail */ +const int32_t ERROR = BASE_MEDIA_ERR_OFFSET; + +/** Status error */ +const int32_t ERR_ILLEGAL_STATE = BASE_MEDIA_ERR_OFFSET + 1; + +/** Invalid parameter */ +const int32_t ERR_INVALID_PARAM = BASE_MEDIA_ERR_OFFSET + 2; + +/** Early media preparation */ +const int32_t ERR_EARLY_PREPARE = BASE_MEDIA_ERR_OFFSET + 3; + +/** No media source */ +const int32_t ERR_SOURCE_NOT_SET = BASE_MEDIA_ERR_OFFSET + 4; + +/** Invalid operation */ +const int32_t ERR_INVALID_OPERATION = BASE_MEDIA_ERR_OFFSET + 5; + +/** No idle channel */ +const int32_t ERR_NOFREE_CHANNEL = BASE_MEDIA_ERR_OFFSET + 6; + +/** Buffer reading failed */ +const int32_t ERR_READ_BUFFER = BASE_MEDIA_ERR_OFFSET + 7; + +/** Device not started */ +const int32_t ERR_NOT_STARTED = BASE_MEDIA_ERR_OFFSET + 8; + +/** Unknown error */ +const int32_t ERR_UNKNOWN = BASE_MEDIA_ERR_OFFSET + 200; +} // namespace Media +} // namespace OHOS +#endif // MEDIA_ERRORS_H diff --git a/include/media_info.h b/interfaces/kits/media_info.h old mode 100755 new mode 100644 similarity index 96% rename from include/media_info.h rename to interfaces/kits/media_info.h index 94ce91c..5c53efc --- a/include/media_info.h +++ b/interfaces/kits/media_info.h @@ -1,214 +1,214 @@ -/* - * Copyright (c) 2020 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. - */ - -/** - * @addtogroup MultiMedia_MediaCommon - * @{ - * - * @brief Provides data types and media formats required for recording and playing audio and videos. - * - * - * @since 1.0 - * @version 1.0 - */ - -/** - * @file media_info.h - * - * @brief Declares the media_info class and provides various audio, video, and codec types. - * - * - * @since 1.0 - * @version 1.0 - */ - -#ifndef MEDIA_INFO_H -#define MEDIA_INFO_H -#include - -/** - * Indicates the constant quality mode. In this mode, the bit rate is not limited to guarantee the image quality to - * the largest extent. - */ -const int BITRATE_MODE_CQ = 0; - -/** - * Indicates the variable bit rate mode. In this mode, the codec dynamically adjusts the output bit rate based on - * the image complexity. The codec increases the bit rate if the image is complex and decreases the bit rate if the - * image is simple. - */ -const int BITRATE_MODE_VBR = 1; - -/** Indicates the constant bit rate mode. In this mode, the codec keeps the output bit rate as constant as possible. */ -const int BITRATE_MODE_CBR = 2; - -/** Indicates the ARGB8888 color format. */ -const int32_t COLOR_FORMAT_ARGB8888_32BIT = 16; - -/** Indicates the YUV420SP color format. */ -const int32_t COLOR_FORMAT_YUV420SP = 21; - -/** Indicates that the current frame is an Instantaneous Decoder Refresh (IDR) frame. */ -const std::string KEY_IS_SYNC_FRAME = "is-sync-frame"; - -/** Indicates the frame timestamp. */ -const std::string KEY_TIME_US = "timeUs"; - -/** - * @brief Enumerates audio source types. - * - * @since 1.0 - * @version 1.0 - */ -typedef enum { - /** Invalid audio source */ - AUDIO_SOURCE_INVALID = -1, - /** Default audio source */ - AUDIO_SOURCE_DEFAULT = 0, - /** Microphone */ - AUDIO_MIC = 1, - /** Uplink voice */ - AUDIO_VOICE_UPLINK = 2, - /** Downlink voice */ - AUDIO_VOICE_DOWNLINK = 3, - /** Voice call */ - AUDIO_VOICE_CALL = 4, - /** Camcorder */ - AUDIO_CAMCORDER = 5, - /** Voice recognition */ - AUDIO_VOICE_RECOGNITION = 6, - /** Voice communication */ - AUDIO_VOICE_COMMUNICATION = 7, - /** Remote submix */ - AUDIO_REMOTE_SUBMIX = 8, - /** Unprocessed audio */ - AUDIO_UNPROCESSED = 9, - /** Voice performance */ - AUDIO_VOICE_PERFORMANCE = 10, - /** Echo reference */ - AUDIO_ECHO_REFERENCE = 1997, - /** Radio tuner */ - AUDIO_RADIO_TUNER = 1998, - /** Hotword */ - AUDIO_HOTWORD = 1999, - /** Extended remote submix */ - AUDIO_REMOTE_SUBMIX_EXTEND = 10007, -} AudioSourceType; - -/** - * @brief Defines the audio Device Descriptor. - * - * @since 1.0 - * @version 1.0 - */ -typedef struct { - /** Device name */ - std::string deviceName; - /** Type of the audio input source */ - AudioSourceType inputSourceType; - /** Bits 31-24: reserved bits; bits 23-16: mode ID; bits 15-8: device ID; bits 7-0: channel ID */ - uint32_t deviceId; -} AudioDeviceDesc; - -/** - * @brief Enumerates audio stream types. - * - * @since 1.0 - * @version 1.0 - */ -typedef enum { - /** Default audio stream type */ - TYPE_DEFAULT = -1, - /** Media */ - TYPE_MEDIA = 0, - /** Voice call */ - TYPE_VOICE_COMMUNICATION = 1, - /** System sound */ - TYPE_SYSTEM = 2, - /** Ringtone */ - TYPE_RING = 3, - /** Music */ - TYPE_MUSIC = 4, - /** Alarm */ - TYPE_ALARM = 5, - /** Notification */ - TYPE_NOTIFICATION = 6, - /** Bluetooth Synchronous Connection-Oriented (SCO) */ - TYPE_BLUETOOTH_SCO = 7, - /** Enforced audible */ - TYPE_ENFORCED_AUDIBLE = 8, - /** Dual-tone multi-frequency (DTMF) */ - TYPE_DTMF = 9, - /** Text-To-Speech (TTS) */ - TYPE_TTS = 10, - /** Accessibility */ - TYPE_ACCESSIBILITY = 11, -} AudioStreamType; - -/** - * @brief Enumerates video codec formats. - * - * @since 1.0 - * @version 1.0 - */ -typedef enum { - /** Default format */ - VIDEO_DEFAULT = 0, - /** H.264 */ - H264 = 2, - /** High Efficiency Video Coding (HEVC) */ - HEVC = 5, -} VideoCodecFormat; - -/** - * @brief Enumerates audio codec formats. - * - * @since 1.0 - * @version 1.0 - */ -typedef enum { - /** Default format */ - AUDIO_DEFAULT = 0, - /** Advanced Audio Coding Low Complexity (AAC-LC) */ - AAC_LC = 1, - /** High-Efficiency Advanced Audio Coding (AAC-HE), previously known as AAC+ or aacPlus v1 */ - AAC_HE_V1 = 2, - /** AAC++ or aacPlus v2 */ - AAC_HE_V2 = 3, - /** Advanced Audio Coding Low Delay (AAC-LD) */ - AAC_LD = 4, - /** Advanced Audio Coding Enhanced Low Delay (AAC-ELD) */ - AAC_ELD = 5, - /** Invalid value */ - FORMAT_BUTT, -} AudioCodecFormat; - -/** - * @brief Enumerates audio bit widths. - * - * @since 1.0 - * @version 1.0 - */ -typedef enum { - /** 8-bit width */ - BIT_WIDTH_8 = 8, - /** 16-bit width */ - BIT_WIDTH_16 = 16, - /** 24-bit width */ - BIT_WIDTH_24 = 24, - /** Invalid value */ - BIT_WIDTH_BUTT, -} AudioBitWidth; -#endif // MEDIA_INFO_H +/* + * Copyright (c) 2020 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. + */ + +/** + * @addtogroup MultiMedia_MediaCommon + * @{ + * + * @brief Provides data types and media formats required for recording and playing audio and videos. + * + * + * @since 1.0 + * @version 1.0 + */ + +/** + * @file media_info.h + * + * @brief Declares the media_info class and provides various audio, video, and codec types. + * + * + * @since 1.0 + * @version 1.0 + */ + +#ifndef MEDIA_INFO_H +#define MEDIA_INFO_H +#include + +/** + * Indicates the constant quality mode. In this mode, the bit rate is not limited to guarantee the image quality to + * the largest extent. + */ +const int BITRATE_MODE_CQ = 0; + +/** + * Indicates the variable bit rate mode. In this mode, the codec dynamically adjusts the output bit rate based on + * the image complexity. The codec increases the bit rate if the image is complex and decreases the bit rate if the + * image is simple. + */ +const int BITRATE_MODE_VBR = 1; + +/** Indicates the constant bit rate mode. In this mode, the codec keeps the output bit rate as constant as possible. */ +const int BITRATE_MODE_CBR = 2; + +/** Indicates the ARGB8888 color format. */ +const int32_t COLOR_FORMAT_ARGB8888_32BIT = 16; + +/** Indicates the YUV420SP color format. */ +const int32_t COLOR_FORMAT_YUV420SP = 21; + +/** Indicates that the current frame is an Instantaneous Decoder Refresh (IDR) frame. */ +const std::string KEY_IS_SYNC_FRAME = "is-sync-frame"; + +/** Indicates the frame timestamp. */ +const std::string KEY_TIME_US = "timeUs"; + +/** + * @brief Enumerates audio source types. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** Invalid audio source */ + AUDIO_SOURCE_INVALID = -1, + /** Default audio source */ + AUDIO_SOURCE_DEFAULT = 0, + /** Microphone */ + AUDIO_MIC = 1, + /** Uplink voice */ + AUDIO_VOICE_UPLINK = 2, + /** Downlink voice */ + AUDIO_VOICE_DOWNLINK = 3, + /** Voice call */ + AUDIO_VOICE_CALL = 4, + /** Camcorder */ + AUDIO_CAMCORDER = 5, + /** Voice recognition */ + AUDIO_VOICE_RECOGNITION = 6, + /** Voice communication */ + AUDIO_VOICE_COMMUNICATION = 7, + /** Remote submix */ + AUDIO_REMOTE_SUBMIX = 8, + /** Unprocessed audio */ + AUDIO_UNPROCESSED = 9, + /** Voice performance */ + AUDIO_VOICE_PERFORMANCE = 10, + /** Echo reference */ + AUDIO_ECHO_REFERENCE = 1997, + /** Radio tuner */ + AUDIO_RADIO_TUNER = 1998, + /** Hotword */ + AUDIO_HOTWORD = 1999, + /** Extended remote submix */ + AUDIO_REMOTE_SUBMIX_EXTEND = 10007, +} AudioSourceType; + +/** + * @brief Defines the audio Device Descriptor. + * + * @since 1.0 + * @version 1.0 + */ +typedef struct { + /** Device name */ + std::string deviceName; + /** Type of the audio input source */ + AudioSourceType inputSourceType; + /** Bits 31-24: reserved bits; bits 23-16: mode ID; bits 15-8: device ID; bits 7-0: channel ID */ + uint32_t deviceId; +} AudioDeviceDesc; + +/** + * @brief Enumerates audio stream types. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** Default audio stream type */ + TYPE_DEFAULT = -1, + /** Media */ + TYPE_MEDIA = 0, + /** Voice call */ + TYPE_VOICE_COMMUNICATION = 1, + /** System sound */ + TYPE_SYSTEM = 2, + /** Ringtone */ + TYPE_RING = 3, + /** Music */ + TYPE_MUSIC = 4, + /** Alarm */ + TYPE_ALARM = 5, + /** Notification */ + TYPE_NOTIFICATION = 6, + /** Bluetooth Synchronous Connection-Oriented (SCO) */ + TYPE_BLUETOOTH_SCO = 7, + /** Enforced audible */ + TYPE_ENFORCED_AUDIBLE = 8, + /** Dual-tone multi-frequency (DTMF) */ + TYPE_DTMF = 9, + /** Text-To-Speech (TTS) */ + TYPE_TTS = 10, + /** Accessibility */ + TYPE_ACCESSIBILITY = 11, +} AudioStreamType; + +/** + * @brief Enumerates video codec formats. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** Default format */ + VIDEO_DEFAULT = 0, + /** H.264 */ + H264 = 2, + /** High Efficiency Video Coding (HEVC) */ + HEVC = 5, +} VideoCodecFormat; + +/** + * @brief Enumerates audio codec formats. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** Default format */ + AUDIO_DEFAULT = 0, + /** Advanced Audio Coding Low Complexity (AAC-LC) */ + AAC_LC = 1, + /** High-Efficiency Advanced Audio Coding (AAC-HE), previously known as AAC+ or aacPlus v1 */ + AAC_HE_V1 = 2, + /** AAC++ or aacPlus v2 */ + AAC_HE_V2 = 3, + /** Advanced Audio Coding Low Delay (AAC-LD) */ + AAC_LD = 4, + /** Advanced Audio Coding Enhanced Low Delay (AAC-ELD) */ + AAC_ELD = 5, + /** Invalid value */ + FORMAT_BUTT, +} AudioCodecFormat; + +/** + * @brief Enumerates audio bit widths. + * + * @since 1.0 + * @version 1.0 + */ +typedef enum { + /** 8-bit width */ + BIT_WIDTH_8 = 8, + /** 16-bit width */ + BIT_WIDTH_16 = 16, + /** 24-bit width */ + BIT_WIDTH_24 = 24, + /** Invalid value */ + BIT_WIDTH_BUTT, +} AudioBitWidth; +#endif // MEDIA_INFO_H diff --git a/include/media_log.h b/interfaces/kits/media_log.h similarity index 97% rename from include/media_log.h rename to interfaces/kits/media_log.h index f01d6e2..dae46ee 100644 --- a/include/media_log.h +++ b/interfaces/kits/media_log.h @@ -1,53 +1,53 @@ -/* - * Copyright (c) 2020 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. - */ -#ifndef OHOS_MEDIA_LOG_H -#define OHOS_MEDIA_LOG_H - -#include - -#include "log.h" - -#undef LOG_DOMAIN -#undef LOG_TAG -#define LOG_DOMAIN 0xD002B00 -#define LOG_TAG "MultiMedia" - -#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) - -#ifndef OHOS_DEBUG -#define DECORATOR_HILOG(op, fmt, args...) \ - do { \ - op(LOG_CORE, fmt, ##args); \ - } while (0) -#else -#define DECORATOR_HILOG(op, fmt, args...) \ - do { \ - op(LOG_CORE, "{%s()-%s:%d} " fmt, __FUNCTION__, __FILENAME__, __LINE__, ##args); \ - } while (0) -#endif - -#define MEDIA_DEBUG_LOG(fmt, ...) DECORATOR_HILOG(HILOG_DEBUG, fmt, ##__VA_ARGS__) -#define MEDIA_ERR_LOG(fmt, ...) DECORATOR_HILOG(HILOG_ERROR, fmt, ##__VA_ARGS__) -#define MEDIA_WARNING_LOG(fmt, ...) DECORATOR_HILOG(HILOG_WARN, fmt, ##__VA_ARGS__) -#define MEDIA_INFO_LOG(fmt, ...) DECORATOR_HILOG(HILOG_INFO, fmt, ##__VA_ARGS__) -#define MEDIA_FATAL_LOG(fmt, ...) DECORATOR_HILOG(HILOG_FATAL, fmt, ##__VA_ARGS__) - -#define MEDIA_OK 0 -#define MEDIA_INVALID_PARAM (-1) -#define MEDIA_INIT_FAIL (-2) -#define MEDIA_ERR (-3) -#define MEDIA_PERMISSION_DENIED (-4) - +/* + * Copyright (c) 2020 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. + */ +#ifndef OHOS_MEDIA_LOG_H +#define OHOS_MEDIA_LOG_H + +#include + +#include "log.h" + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0xD002B00 +#define LOG_TAG "MultiMedia" + +#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) + +#ifndef OHOS_DEBUG +#define DECORATOR_HILOG(op, fmt, args...) \ + do { \ + op(LOG_CORE, fmt, ##args); \ + } while (0) +#else +#define DECORATOR_HILOG(op, fmt, args...) \ + do { \ + op(LOG_CORE, "{%s()-%s:%d} " fmt, __FUNCTION__, __FILENAME__, __LINE__, ##args); \ + } while (0) +#endif + +#define MEDIA_DEBUG_LOG(fmt, ...) DECORATOR_HILOG(HILOG_DEBUG, fmt, ##__VA_ARGS__) +#define MEDIA_ERR_LOG(fmt, ...) DECORATOR_HILOG(HILOG_ERROR, fmt, ##__VA_ARGS__) +#define MEDIA_WARNING_LOG(fmt, ...) DECORATOR_HILOG(HILOG_WARN, fmt, ##__VA_ARGS__) +#define MEDIA_INFO_LOG(fmt, ...) DECORATOR_HILOG(HILOG_INFO, fmt, ##__VA_ARGS__) +#define MEDIA_FATAL_LOG(fmt, ...) DECORATOR_HILOG(HILOG_FATAL, fmt, ##__VA_ARGS__) + +#define MEDIA_OK 0 +#define MEDIA_INVALID_PARAM (-1) +#define MEDIA_INIT_FAIL (-2) +#define MEDIA_ERR (-3) +#define MEDIA_PERMISSION_DENIED (-4) + #endif // OHOS_MEDIA_LOG_H \ No newline at end of file diff --git a/include/source.h b/interfaces/kits/source.h old mode 100755 new mode 100644 similarity index 97% rename from include/source.h rename to interfaces/kits/source.h index 4b4027a..64b61a4 --- a/include/source.h +++ b/interfaces/kits/source.h @@ -1,248 +1,248 @@ -/* - * Copyright (c) 2020 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. - */ - -/** - * @addtogroup MultiMedia_MediaCommon - * @{ - * - * @brief Provides data types and media formats required for recording and playing audio and videos. - * - * - * @since 1.0 - * @version 1.0 - */ - -/** - * @file source.h - * - * @brief Declares the Source class, which is used to implement source-related operations. - * - * - * @since 1.0 - * @version 1.0 - */ - -#ifndef SOURCE_H -#define SOURCE_H -#include -#include -#include -#include "format.h" - -using std::shared_ptr; - -namespace OHOS { -namespace Media { -/** - * @brief Enumerates media source types. - * - * @since 1.0 - * @version 1.0 - */ -enum class SourceType : int32_t { - /** Local file path or network address */ - SOURCE_TYPE_URI = 0, - /** Local file descriptor */ - SOURCE_TYPE_FD, - /** Stream data, such as Advanced Audio Coding (AAC) stream data */ - SOURCE_TYPE_STREAM, -}; - -/** - * @brief Provides functions to obtain the address of a buffer memory and write the filled buffers into the playback - * queue. You need to implement the StreamCallback functions in a player object. - * - * @since 1.0 - * @version 1.0 - */ -struct StreamCallback { - /** - * @brief Enumerates buffer types of stream sources. - * - * @since 1.0 - * @version 1.0 - */ - enum BufferFlags : uint32_t { - /** Synchronous frame */ - STREAM_FLAG_SYNCFRAME = 1, - /** Codec configuration information */ - STREAM_FLAG_CODECCONFIG = 2, - /** End of Stream (EOS) */ - STREAM_FLAG_EOS = 4, - /** Part of a frame */ - STREAM_FLAG_PARTIAL_FRAME = 8, - /** End of a frame. It is used in pair with STREAM_FLAG_PARTIAL_FRAME. */ - STREAM_FLAG_ENDOFFRAME = 16, - /** Container file data, such as MP4 file data (not supported yet) */ - STREAM_FLAG_MUXER_DATA = 32, - }; - - /** - * @brief Obtains the virtual address of a buffer memory block based on its index. - * - * @param index Indicates the index of the buffer memory block. - * @return Returns the pointer to the virtual address of the buffer memory block. - * @since 1.0 - * @version 1.0 - */ - virtual uint8_t *GetBuffer(size_t index) = 0; - - /** - * @brief Writes the filled buffer memory block into the player memory. - * - * @param index Indicates the index of the buffer memory block. - * @param offset Indicates the start offset into which the buffer memory block will be written. - * @param size Indicates the size of the data filled in the buffer memory block. - * @param timestampUs Indicates the timestamp of the frame filled in the buffer memory block. As data in AAC - * streams can be filled not on a frame basis, set this parameter to 0 for AAC streams. - * @param flags Indicates the type of the current buffer memory block. For details, see {@link BufferFlags}. - * @since 1.0 - * @version 1.0 - */ - virtual void QueueBuffer(size_t index, size_t offset, size_t size, int64_t timestampUs, uint32_t flags) = 0; - - /** - * @brief Sets additional information about a stream. - * - * @param params Indicates the parameters for additional stream information. For details, see {@link Format}. - * @since 1.0 - * @version 1.0 - */ - virtual void SetParameters(const Format ¶ms) = 0; -}; - -/** - * @brief Provides functions related to the stream source for upper-layer applications. - * - * After the {@link SetSource} function is called, the player invokes {@link OnBufferAvailable} to notify your - * application of the buffer memory block that can be filled with data.\n - * The player can invoke {@link SetStreamCallback} to register a callback for your application. For example, - * the {@link GetBuffer} callback obtains the address of the buffer block and sends the filled buffer memory block to - * the player. The buffer memory block is allocated and processed on the player.\n - * StreamSourceis available only for the media source of the SOURCE_TYPE_STREAM type. - * For details, see {@link SourceType}.\n - * - * @since 1.0 - * @version 1.0 - */ -struct StreamSource { - /** - * @brief Notifies your application of the information about the buffer memory block that can be filled with data. - * - * @param index Indicates the index of the buffer memory block. - * @param offset Indicates the start offset into which the data will be written. - * @param size Indicates the size of data that the buffer memory block can store. - * @since 1.0 - * @version 1.0 - */ - virtual void OnBufferAvailable(size_t index, size_t offset, size_t size) = 0; - - /** - * @brief Sets a callback function for your application. - * - * @param callback Indicates the {@link StreamCallback} function to set. - * @since 1.0 - * @version 1.0 - */ - virtual void SetStreamCallback(const std::shared_ptr &callback) = 0; -}; - -/** - * @brief Provides functions to implement source-related operations. - * - * @since 1.0 - * @version 1.0 - */ -class Source { -public: - /** - * @brief A constructor used to create a {@link Source} instance based on a specified URI. - * - * @param uri Indicates the media source URI, which can be a network URI or local file path. - * @since 1.0 - * @version 1.0 - */ - explicit Source(const std::string& uri); - - Source(const std::string &uri, const std::map &header); - - /** - * @brief A constructor used to create a {@link Source} instance based on the stream source and format information. - * - * - * - * @param stream Indicates the media source stream. For details, see {@link StreamSource}. - * @param formats Indicates stream data information, which is subject to the stream type. For example, the key - * is {@link CODEC_MIME}, and the value is {@link MIME_AUDIO_AAC}. For details, see {@link Format}. This parameter - * can be null if no information needs to be passed. - * @since 1.0 - * @version 1.0 - */ - Source(const std::shared_ptr &stream, const Format &formats); - - ~Source() = default; - - /** - * @brief Obtains the source type. - * - * @return Returns the source type. For details, see {@link SourceType}. - * @since 1.0 - * @version 1.0 - */ - SourceType GetSourceType() const; - - /** - * @brief Obtains the media source URI. - * - * This function is called only when the {@link SourceType} is {@link SOURCE_TYPE_URI}. - * - * @return Returns the media source URI. - * @since 1.0 - * @version 1.0 - */ - const std::string &GetSourceUri() const; - - const std::map &GetSourceHeader() const; - - /** - * @brief Obtains information about the media source stream. - * - * This function is called only when the {@link SourceType} is {@link SOURCE_TYPE_STREAM}. - * - * @return Returns information about the media source stream. For details, see {@link StreamSource}. - * @since 1.0 - * @version 1.0 - */ - const std::shared_ptr &GetSourceStream() const; - - /** - * @brief Obtains the media source stream format. - * - * @return Returns the media source stream format. For details, see {@link Format}. - * @since 1.0 - * @version 1.0 - */ - const Format &GetSourceStreamFormat() const; - -private: - std::string uri_; - SourceType sourceType_; - std::map header_; - std::shared_ptr stream_; - Format format_; -}; -} // namespace Media -} // namespace OHOS -#endif // SOURCE_H +/* + * Copyright (c) 2020 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. + */ + +/** + * @addtogroup MultiMedia_MediaCommon + * @{ + * + * @brief Provides data types and media formats required for recording and playing audio and videos. + * + * + * @since 1.0 + * @version 1.0 + */ + +/** + * @file source.h + * + * @brief Declares the Source class, which is used to implement source-related operations. + * + * + * @since 1.0 + * @version 1.0 + */ + +#ifndef SOURCE_H +#define SOURCE_H +#include +#include +#include +#include "format.h" + +using std::shared_ptr; + +namespace OHOS { +namespace Media { +/** + * @brief Enumerates media source types. + * + * @since 1.0 + * @version 1.0 + */ +enum class SourceType : int32_t { + /** Local file path or network address */ + SOURCE_TYPE_URI = 0, + /** Local file descriptor */ + SOURCE_TYPE_FD, + /** Stream data, such as Advanced Audio Coding (AAC) stream data */ + SOURCE_TYPE_STREAM, +}; + +/** + * @brief Provides functions to obtain the address of a buffer memory and write the filled buffers into the playback + * queue. You need to implement the StreamCallback functions in a player object. + * + * @since 1.0 + * @version 1.0 + */ +struct StreamCallback { + /** + * @brief Enumerates buffer types of stream sources. + * + * @since 1.0 + * @version 1.0 + */ + enum BufferFlags : uint32_t { + /** Synchronous frame */ + STREAM_FLAG_SYNCFRAME = 1, + /** Codec configuration information */ + STREAM_FLAG_CODECCONFIG = 2, + /** End of Stream (EOS) */ + STREAM_FLAG_EOS = 4, + /** Part of a frame */ + STREAM_FLAG_PARTIAL_FRAME = 8, + /** End of a frame. It is used in pair with STREAM_FLAG_PARTIAL_FRAME. */ + STREAM_FLAG_ENDOFFRAME = 16, + /** Container file data, such as MP4 file data (not supported yet) */ + STREAM_FLAG_MUXER_DATA = 32, + }; + + /** + * @brief Obtains the virtual address of a buffer memory block based on its index. + * + * @param index Indicates the index of the buffer memory block. + * @return Returns the pointer to the virtual address of the buffer memory block. + * @since 1.0 + * @version 1.0 + */ + virtual uint8_t *GetBuffer(size_t index) = 0; + + /** + * @brief Writes the filled buffer memory block into the player memory. + * + * @param index Indicates the index of the buffer memory block. + * @param offset Indicates the start offset into which the buffer memory block will be written. + * @param size Indicates the size of the data filled in the buffer memory block. + * @param timestampUs Indicates the timestamp of the frame filled in the buffer memory block. As data in AAC + * streams can be filled not on a frame basis, set this parameter to 0 for AAC streams. + * @param flags Indicates the type of the current buffer memory block. For details, see {@link BufferFlags}. + * @since 1.0 + * @version 1.0 + */ + virtual void QueueBuffer(size_t index, size_t offset, size_t size, int64_t timestampUs, uint32_t flags) = 0; + + /** + * @brief Sets additional information about a stream. + * + * @param params Indicates the parameters for additional stream information. For details, see {@link Format}. + * @since 1.0 + * @version 1.0 + */ + virtual void SetParameters(const Format ¶ms) = 0; +}; + +/** + * @brief Provides functions related to the stream source for upper-layer applications. + * + * After the {@link SetSource} function is called, the player invokes {@link OnBufferAvailable} to notify your + * application of the buffer memory block that can be filled with data.\n + * The player can invoke {@link SetStreamCallback} to register a callback for your application. For example, + * the {@link GetBuffer} callback obtains the address of the buffer block and sends the filled buffer memory block to + * the player. The buffer memory block is allocated and processed on the player.\n + * StreamSourceis available only for the media source of the SOURCE_TYPE_STREAM type. + * For details, see {@link SourceType}.\n + * + * @since 1.0 + * @version 1.0 + */ +struct StreamSource { + /** + * @brief Notifies your application of the information about the buffer memory block that can be filled with data. + * + * @param index Indicates the index of the buffer memory block. + * @param offset Indicates the start offset into which the data will be written. + * @param size Indicates the size of data that the buffer memory block can store. + * @since 1.0 + * @version 1.0 + */ + virtual void OnBufferAvailable(size_t index, size_t offset, size_t size) = 0; + + /** + * @brief Sets a callback function for your application. + * + * @param callback Indicates the {@link StreamCallback} function to set. + * @since 1.0 + * @version 1.0 + */ + virtual void SetStreamCallback(const std::shared_ptr &callback) = 0; +}; + +/** + * @brief Provides functions to implement source-related operations. + * + * @since 1.0 + * @version 1.0 + */ +class Source { +public: + /** + * @brief A constructor used to create a {@link Source} instance based on a specified URI. + * + * @param uri Indicates the media source URI, which can be a network URI or local file path. + * @since 1.0 + * @version 1.0 + */ + explicit Source(const std::string& uri); + + Source(const std::string &uri, const std::map &header); + + /** + * @brief A constructor used to create a {@link Source} instance based on the stream source and format information. + * + * + * + * @param stream Indicates the media source stream. For details, see {@link StreamSource}. + * @param formats Indicates stream data information, which is subject to the stream type. For example, the key + * is {@link CODEC_MIME}, and the value is {@link MIME_AUDIO_AAC}. For details, see {@link Format}. This parameter + * can be null if no information needs to be passed. + * @since 1.0 + * @version 1.0 + */ + Source(const std::shared_ptr &stream, const Format &formats); + + ~Source() = default; + + /** + * @brief Obtains the source type. + * + * @return Returns the source type. For details, see {@link SourceType}. + * @since 1.0 + * @version 1.0 + */ + SourceType GetSourceType() const; + + /** + * @brief Obtains the media source URI. + * + * This function is called only when the {@link SourceType} is {@link SOURCE_TYPE_URI}. + * + * @return Returns the media source URI. + * @since 1.0 + * @version 1.0 + */ + const std::string &GetSourceUri() const; + + const std::map &GetSourceHeader() const; + + /** + * @brief Obtains information about the media source stream. + * + * This function is called only when the {@link SourceType} is {@link SOURCE_TYPE_STREAM}. + * + * @return Returns information about the media source stream. For details, see {@link StreamSource}. + * @since 1.0 + * @version 1.0 + */ + const std::shared_ptr &GetSourceStream() const; + + /** + * @brief Obtains the media source stream format. + * + * @return Returns the media source stream format. For details, see {@link Format}. + * @since 1.0 + * @version 1.0 + */ + const Format &GetSourceStreamFormat() const; + +private: + std::string uri_; + SourceType sourceType_; + std::map header_; + std::shared_ptr stream_; + Format format_; +}; +} // namespace Media +} // namespace OHOS +#endif // SOURCE_H