OSDN Git Service

tools/avinfo: Print content protection
authorAndrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>
Fri, 13 Nov 2015 10:59:40 +0000 (11:59 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 16 Nov 2015 08:05:46 +0000 (10:05 +0200)
tools/avinfo.c

index cc756f1..31c4e10 100644 (file)
 #define AVDTP_MEDIA_TYPE_VIDEO         0x01
 #define AVDTP_MEDIA_TYPE_MULTIMEDIA    0x02
 
+/* Content Protection types definitions */
+#define AVDTP_CONTENT_PROTECTION_TYPE_DTCP     0x0001
+#define AVDTP_CONTENT_PROTECTION_TYPE_SCMS_T   0x0002
+
 struct avdtp_service_capability {
        uint8_t category;
        uint8_t length;
@@ -158,6 +162,11 @@ struct getcap_resp {
        uint8_t caps[0];
 } __attribute__ ((packed));
 
+struct avdtp_content_protection_capability {
+       uint16_t content_protection_type;
+       uint8_t data[0];
+} __attribute__ ((packed));
+
 static void print_aptx(a2dp_aptx_t *aptx)
 {
        printf("\t\tVendor Specific Value (aptX)");
@@ -405,6 +414,25 @@ static void print_media_codec(struct avdtp_media_codec_capability *cap)
        }
 }
 
+static void print_content_protection(
+                               struct avdtp_content_protection_capability *cap)
+{
+       printf("\tContent Protection: ");
+
+       switch (btohs(cap->content_protection_type)) {
+       case AVDTP_CONTENT_PROTECTION_TYPE_DTCP:
+               printf("DTCP");
+               break;
+       case AVDTP_CONTENT_PROTECTION_TYPE_SCMS_T:
+               printf("SCMS-T");
+               break;
+       default:
+               printf("Unknown");
+       }
+
+       printf("\n");
+}
+
 static void print_caps(void *data, int size)
 {
        int processed;
@@ -423,13 +451,15 @@ static void print_caps(void *data, int size)
                case AVDTP_MEDIA_TRANSPORT:
                case AVDTP_REPORTING:
                case AVDTP_RECOVERY:
-               case AVDTP_CONTENT_PROTECTION:
                case AVDTP_MULTIPLEXING:
                        /* FIXME: Add proper functions */
                        break;
                case AVDTP_MEDIA_CODEC:
                        print_media_codec((void *) cap->data);
                        break;
+               case AVDTP_CONTENT_PROTECTION:
+                       print_content_protection((void *) cap->data);
+                       break;
                }
 
                processed += 2 + cap->length;