MTP: Add support for some audio specific object properties

This stops Windows 7 from putting up the
"Your device might not be able to play or view this file" dialog
when copying MP3 files to the device.

Bug: 3195286
Change-Id: Ic5b3fb75309893caae1a4f4b56068a543847f1f7
This commit is contained in:
Mike Lockwood
2014-03-13 14:51:29 -07:00
parent e97b62ed0d
commit 92b53bc2dd
2 changed files with 38 additions and 0 deletions

View File

@@ -596,6 +596,11 @@ public class MtpDatabase {
MtpConstants.PROPERTY_DURATION,
MtpConstants.PROPERTY_GENRE,
MtpConstants.PROPERTY_COMPOSER,
MtpConstants.PROPERTY_AUDIO_WAVE_CODEC,
MtpConstants.PROPERTY_BITRATE_TYPE,
MtpConstants.PROPERTY_AUDIO_BITRATE,
MtpConstants.PROPERTY_NUMBER_OF_CHANNELS,
MtpConstants.PROPERTY_SAMPLE_RATE,
};
static final int[] VIDEO_PROPERTIES = {

View File

@@ -1000,6 +1000,22 @@ MtpResponseCode MyMtpDatabase::setObjectReferences(MtpObjectHandle handle,
MtpProperty* MyMtpDatabase::getObjectPropertyDesc(MtpObjectProperty property,
MtpObjectFormat format) {
static const int channelEnum[] = {
1, // mono
2, // stereo
3, // 2.1
4, // 3
5, // 3.1
6, // 4
7, // 4.1
8, // 5
9, // 5.1
};
static const int bitrateEnum[] = {
1, // fixed rate
2, // variable rate
};
MtpProperty* result = NULL;
switch (property) {
case MTP_PROPERTY_OBJECT_FORMAT:
@@ -1013,6 +1029,7 @@ MtpProperty* MyMtpDatabase::getObjectPropertyDesc(MtpObjectProperty property,
case MTP_PROPERTY_STORAGE_ID:
case MTP_PROPERTY_PARENT_OBJECT:
case MTP_PROPERTY_DURATION:
case MTP_PROPERTY_AUDIO_WAVE_CODEC:
result = new MtpProperty(property, MTP_TYPE_UINT32);
break;
case MTP_PROPERTY_OBJECT_SIZE:
@@ -1041,6 +1058,22 @@ MtpProperty* MyMtpDatabase::getObjectPropertyDesc(MtpObjectProperty property,
// We allow renaming files and folders
result = new MtpProperty(property, MTP_TYPE_STR, true);
break;
case MTP_PROPERTY_BITRATE_TYPE:
result = new MtpProperty(property, MTP_TYPE_UINT16);
result->setFormEnum(bitrateEnum, sizeof(bitrateEnum)/sizeof(bitrateEnum[0]));
break;
case MTP_PROPERTY_AUDIO_BITRATE:
result = new MtpProperty(property, MTP_TYPE_UINT32);
result->setFormRange(1, 1536000, 1);
break;
case MTP_PROPERTY_NUMBER_OF_CHANNELS:
result = new MtpProperty(property, MTP_TYPE_UINT16);
result->setFormEnum(channelEnum, sizeof(channelEnum)/sizeof(channelEnum[0]));
break;
case MTP_PROPERTY_SAMPLE_RATE:
result = new MtpProperty(property, MTP_TYPE_UINT32);
result->setFormRange(8000, 48000, 1);
break;
}
return result;