Add key for haptic channel count in metadata.

This key could be useful to query if a file contains haptic channels or
not.

Test: test with files (not) containing haptic channels
Bug: 128012181
Change-Id: I5f0a9ca9fde23ce7d6f48921acc9a1074a6a1601
gugelfrei
jiabin 5 years ago
parent 76e348fc43
commit 9e0ad02784

@ -1280,7 +1280,7 @@ void MyOggExtractor::parseFileMetaData() {
//ALOGI("comment #%d: '%s'", i + 1, mVc.user_comments[i]);
}
AMediaFormat_getInt32(mFileMeta, "haptic", &mHapticChannelCount);
AMediaFormat_getInt32(mFileMeta, AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT, &mHapticChannelCount);
}
void MyOggExtractor::setChannelMask(int channelCount) {
@ -1297,6 +1297,8 @@ void MyOggExtractor::setChannelMask(int channelCount) {
const audio_channel_mask_t channelMask = audio_channel_out_mask_from_count(
audioChannelCount) | hapticChannelMask;
AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_CHANNEL_MASK, channelMask);
AMediaFormat_setInt32(
mMeta, AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT, mHapticChannelCount);
}
} else {
AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_CHANNEL_MASK,

@ -65,6 +65,7 @@ static const char *AMediaFormatKeyGroupInt32[] = {
AMEDIAFORMAT_KEY_FLAC_COMPRESSION_LEVEL,
AMEDIAFORMAT_KEY_GRID_COLUMNS,
AMEDIAFORMAT_KEY_GRID_ROWS,
AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT,
AMEDIAFORMAT_KEY_HEIGHT,
AMEDIAFORMAT_KEY_INTRA_REFRESH_PERIOD,
AMEDIAFORMAT_KEY_IS_ADTS,

@ -309,7 +309,6 @@ static void extractAlbumArt(
void parseVorbisComment(
AMediaFormat *fileMeta, const char *comment, size_t commentLength) {
// Haptic tag is only kept here as it will only be used in extractor to generate channel mask.
const char* const haptic = "haptic";
struct {
const char *const mTag;
const char *mKey;
@ -330,7 +329,7 @@ void parseVorbisComment(
{ "LYRICIST", AMEDIAFORMAT_KEY_LYRICIST },
{ "METADATA_BLOCK_PICTURE", AMEDIAFORMAT_KEY_ALBUMART },
{ "ANDROID_LOOP", AMEDIAFORMAT_KEY_LOOP },
{ "ANDROID_HAPTIC", haptic },
{ "ANDROID_HAPTIC", AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT },
};
for (size_t j = 0; j < sizeof(kMap) / sizeof(kMap[0]); ++j) {
@ -346,12 +345,12 @@ void parseVorbisComment(
if (!strcasecmp(&comment[tagLen + 1], "true")) {
AMediaFormat_setInt32(fileMeta, AMEDIAFORMAT_KEY_LOOP, 1);
}
} else if (kMap[j].mKey == haptic) {
} else if (kMap[j].mKey == AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT) {
char *end;
errno = 0;
const int hapticChannelCount = strtol(&comment[tagLen + 1], &end, 10);
if (errno == 0) {
AMediaFormat_setInt32(fileMeta, haptic, hapticChannelCount);
AMediaFormat_setInt32(fileMeta, kMap[j].mKey, hapticChannelCount);
} else {
ALOGE("Error(%d) when parsing haptic channel count", errno);
}

@ -967,6 +967,11 @@ status_t convertMetaDataToMessage(
if (meta->findInt32(kKeyPcmEncoding, &pcmEncoding)) {
msg->setInt32("pcm-encoding", pcmEncoding);
}
int32_t hapticChannelCount;
if (meta->findInt32(kKeyHapticChannelCount, &hapticChannelCount)) {
msg->setInt32("haptic-channel-count", hapticChannelCount);
}
}
int32_t maxInputSize;
@ -1708,6 +1713,11 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) {
if (msg->findInt32("pcm-encoding", &pcmEncoding)) {
meta->setInt32(kKeyPcmEncoding, pcmEncoding);
}
int32_t hapticChannelCount;
if (msg->findInt32("haptic-channel-count", &hapticChannelCount)) {
meta->setInt32(kKeyHapticChannelCount, hapticChannelCount);
}
}
int32_t maxInputSize;

@ -238,6 +238,8 @@ enum {
kKeyOpaqueCSD0 = 'csd0',
kKeyOpaqueCSD1 = 'csd1',
kKeyOpaqueCSD2 = 'csd2',
kKeyHapticChannelCount = 'hapC',
};
enum {

@ -324,6 +324,7 @@ EXPORT const char* AMEDIAFORMAT_KEY_FRAME_RATE = "frame-rate";
EXPORT const char* AMEDIAFORMAT_KEY_GENRE = "genre";
EXPORT const char* AMEDIAFORMAT_KEY_GRID_COLUMNS = "grid-cols";
EXPORT const char* AMEDIAFORMAT_KEY_GRID_ROWS = "grid-rows";
EXPORT const char* AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT = "haptic-channel-count";
EXPORT const char* AMEDIAFORMAT_KEY_HDR_STATIC_INFO = "hdr-static-info";
EXPORT const char* AMEDIAFORMAT_KEY_HDR10_PLUS_INFO = "hdr10-plus-info";
EXPORT const char* AMEDIAFORMAT_KEY_HEIGHT = "height";

@ -209,6 +209,7 @@ extern const char* AMEDIAFORMAT_KEY_EXIF_OFFSET __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_EXIF_SIZE __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_FRAME_COUNT __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_GENRE __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_ICC_PROFILE __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_IS_SYNC_FRAME __INTRODUCED_IN(29);
extern const char* AMEDIAFORMAT_KEY_LOCATION __INTRODUCED_IN(29);

@ -89,6 +89,7 @@ LIBMEDIANDK {
AMEDIAFORMAT_KEY_GENRE; # var introduced=29
AMEDIAFORMAT_KEY_GRID_COLUMNS; # var introduced=28
AMEDIAFORMAT_KEY_GRID_ROWS; # var introduced=28
AMEDIAFORMAT_KEY_HAPTIC_CHANNEL_COUNT; # var introduced=29
AMEDIAFORMAT_KEY_HDR_STATIC_INFO; # var introduced=28
AMEDIAFORMAT_KEY_HEIGHT; # var introduced=21
AMEDIAFORMAT_KEY_ICC_PROFILE; # var introduced=29

Loading…
Cancel
Save