1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker *
4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*b7c941bbSAndroid Build Coastguard Worker *
8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*b7c941bbSAndroid Build Coastguard Worker *
10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License.
15*b7c941bbSAndroid Build Coastguard Worker */
16*b7c941bbSAndroid Build Coastguard Worker
17*b7c941bbSAndroid Build Coastguard Worker #ifndef MEDIACTSNATIVE_NATIVE_MEDIA_COMMON_H
18*b7c941bbSAndroid Build Coastguard Worker #define MEDIACTSNATIVE_NATIVE_MEDIA_COMMON_H
19*b7c941bbSAndroid Build Coastguard Worker
20*b7c941bbSAndroid Build Coastguard Worker #include <inttypes.h>
21*b7c941bbSAndroid Build Coastguard Worker #include <string>
22*b7c941bbSAndroid Build Coastguard Worker #include <vector>
23*b7c941bbSAndroid Build Coastguard Worker #include <media/NdkMediaFormat.h>
24*b7c941bbSAndroid Build Coastguard Worker #include <media/NdkMediaMuxer.h>
25*b7c941bbSAndroid Build Coastguard Worker
26*b7c941bbSAndroid Build Coastguard Worker // Migrate this method to std::format when C++20 becomes available
27*b7c941bbSAndroid Build Coastguard Worker template <typename... Args>
StringFormat(const std::string & format,Args...args)28*b7c941bbSAndroid Build Coastguard Worker std::string StringFormat(const std::string& format, Args... args) {
29*b7c941bbSAndroid Build Coastguard Worker auto size = std::snprintf(nullptr, 0, format.c_str(), args...);
30*b7c941bbSAndroid Build Coastguard Worker if (size < 0) return std::string();
31*b7c941bbSAndroid Build Coastguard Worker std::vector<char> buffer(size + 1); // Add 1 for terminating null byte
32*b7c941bbSAndroid Build Coastguard Worker std::snprintf(buffer.data(), buffer.size(), format.c_str(), args...);
33*b7c941bbSAndroid Build Coastguard Worker return std::string(buffer.data(), size); // Exclude the terminating null byte
34*b7c941bbSAndroid Build Coastguard Worker }
35*b7c941bbSAndroid Build Coastguard Worker
36*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_VP8;
37*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_VP9;
38*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_AV1;
39*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_AVC;
40*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_HEVC;
41*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_MPEG4;
42*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_VIDEO_H263;
43*b7c941bbSAndroid Build Coastguard Worker
44*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_AMR_NB;
45*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_AMR_WB;
46*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_AAC;
47*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_FLAC;
48*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_VORBIS;
49*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_OPUS;
50*b7c941bbSAndroid Build Coastguard Worker extern const char* AMEDIA_MIMETYPE_AUDIO_RAW;
51*b7c941bbSAndroid Build Coastguard Worker
52*b7c941bbSAndroid Build Coastguard Worker extern const float kRmsErrorTolerance;
53*b7c941bbSAndroid Build Coastguard Worker
54*b7c941bbSAndroid Build Coastguard Worker extern const long kQDeQTimeOutUs;
55*b7c941bbSAndroid Build Coastguard Worker extern const int kRetryLimit;
56*b7c941bbSAndroid Build Coastguard Worker
57*b7c941bbSAndroid Build Coastguard Worker // TODO: make this extend itself automatically
58*b7c941bbSAndroid Build Coastguard Worker constexpr int LOCAL_AMEDIAMUXER_OUTPUT_FORMAT_FIRST = AMEDIAMUXER_OUTPUT_FORMAT_MPEG_4;
59*b7c941bbSAndroid Build Coastguard Worker constexpr int LOCAL_AMEDIAMUXER_OUTPUT_FORMAT_LAST = AMEDIAMUXER_OUTPUT_FORMAT_OGG;
60*b7c941bbSAndroid Build Coastguard Worker
61*b7c941bbSAndroid Build Coastguard Worker // Color formats supported by encoder - should mirror supportedColorList
62*b7c941bbSAndroid Build Coastguard Worker // from MediaCodecConstants.h (are these going to be deprecated)
63*b7c941bbSAndroid Build Coastguard Worker constexpr int COLOR_FormatYUV420SemiPlanar = 21;
64*b7c941bbSAndroid Build Coastguard Worker constexpr int COLOR_FormatYUV420Flexible = 0x7F420888;
65*b7c941bbSAndroid Build Coastguard Worker constexpr int COLOR_FormatSurface = 0x7f000789;
66*b7c941bbSAndroid Build Coastguard Worker constexpr int COLOR_FormatYUVP010 = 54;
67*b7c941bbSAndroid Build Coastguard Worker
68*b7c941bbSAndroid Build Coastguard Worker // constants not defined in NDK
69*b7c941bbSAndroid Build Coastguard Worker extern const char* TBD_AMEDIACODEC_PARAMETER_KEY_REQUEST_SYNC_FRAME;
70*b7c941bbSAndroid Build Coastguard Worker extern const char* TBD_AMEDIACODEC_PARAMETER_KEY_VIDEO_BITRATE;
71*b7c941bbSAndroid Build Coastguard Worker extern const char* COMPATIBLE_AMEDIAFORMAT_KEY_MAX_B_FRAMES; // available >= sdk 34
72*b7c941bbSAndroid Build Coastguard Worker extern const char* TBD_AMEDIAFORMAT_KEY_BIT_RATE_MODE;
73*b7c941bbSAndroid Build Coastguard Worker
74*b7c941bbSAndroid Build Coastguard Worker // common utility functions
75*b7c941bbSAndroid Build Coastguard Worker bool isCSDIdentical(AMediaFormat* refFormat, AMediaFormat* testFormat);
76*b7c941bbSAndroid Build Coastguard Worker bool isFormatSimilar(AMediaFormat* refFormat, AMediaFormat* testFormat);
77*b7c941bbSAndroid Build Coastguard Worker AMediaFormat* deSerializeMediaFormat(const char* msg, const char* separator);
78*b7c941bbSAndroid Build Coastguard Worker bool isMediaTypeOutputUnAffectedBySeek(const char* mediaType);
79*b7c941bbSAndroid Build Coastguard Worker
80*b7c941bbSAndroid Build Coastguard Worker template <class T>
81*b7c941bbSAndroid Build Coastguard Worker void flattenField(uint8_t* buffer, int* pos, T value);
82*b7c941bbSAndroid Build Coastguard Worker
83*b7c941bbSAndroid Build Coastguard Worker #endif // MEDIACTSNATIVE_NATIVE_MEDIA_COMMON_H
84