diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index 8b890b9..eb500a2 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2011 The Android Open Source Project *
@@ -233,14 +233,26 @@
     uint16_t  gain_step;
 };
 
+struct aptx_dec_bt_addr {
+    uint32_t nap;
+    uint32_t uap;
+    uint32_t lap;
+};
+
+struct qahw_aptx_dec_param {
+   struct aptx_dec_bt_addr bt_addr;
+};
+
 typedef union {
     struct qahw_source_tracking_param st_params;
     struct qahw_sound_focus_param sf_params;
+    struct qahw_aptx_dec_param aptx_params;
 } qahw_param_payload;
 
 typedef enum {
     QAHW_PARAM_SOURCE_TRACK,
-    QAHW_PARAM_SOUND_FOCUS
+    QAHW_PARAM_SOUND_FOCUS,
+    QAHW_PARAM_APTX_DEC
 } qahw_param_id;
 
 
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 900f189..5ff1f9a 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -102,7 +102,8 @@
     FILE_EAC3,
     FILE_EAC3_JOC,
     FILE_DTS,
-    FILE_MP2
+    FILE_MP2,
+    FILE_APTX
 };
 
 typedef enum {
@@ -552,6 +553,28 @@
     return rc;
 }
 
+void parse_aptx_dec_bt_addr(char *value, struct qahw_aptx_dec_param *aptx_cfg)
+{
+    int ba[6];
+    char *str, *tok;
+    uint32_t addr[3];
+    int i = 0;
+
+    tok = strtok_r(value, ":", &str);
+    while (tok != NULL) {
+        ba[i] = strtol(tok, NULL, 16);
+        i++;
+        tok = strtok_r(NULL, ":", &str);
+    }
+    addr[0] = (ba[0] << 8) | ba[1];
+    addr[1] = ba[2];
+    addr[2] = (ba[3] << 16) | (ba[4] << 8) | ba[5];
+
+    aptx_cfg->bt_addr.nap = addr[0];
+    aptx_cfg->bt_addr.uap = addr[1];
+    aptx_cfg->bt_addr.lap = addr[2];
+}
+
 void usage() {
     printf(" \n Command \n");
     printf(" \n hal_play_test -f file-path <options>   - Plays audio file from the path provided\n");
@@ -583,6 +606,7 @@
     printf("                                             file path and other file specific options would be ignored in this mode.\n\n");
     printf(" -e  --effect-type <effect type>           - Effect used for test\n");
     printf("                                             0:bassboost 1:virtualizer 2:equalizer 3:visualizer(NA) 4:reverb 5:audiosphere others:null");
+    printf(" -A  --bt-addr <bt device addr>            - Required to set bt device adress for aptx decoder\n");
     printf(" \n Examples \n");
     printf(" hal_play_test -f /etc/Anukoledenadu.wav     -> plays Wav stream with default params\n\n");
     printf(" hal_play_test -f /etc/MateRani.mp3 -t 2 -d 2 -v 0.01 -r 44100 -c 2 \n");
@@ -621,6 +645,10 @@
     printf("                                          -> kvpair(-k) values represent media-info of clip & values should be in below mentioned sequence\n");
     printf("                                          ->avg_bit_rate,sample_rate,wma_bit_per_sample,wma_block_align\n");
     printf("                                          ->wma_channel_mask,wma_encode_option,wma_format_tag\n");
+    printf(" hal_play_test -f /etc/03_Kuch_Khaas_BE.btaptx -t 9 -d 2 -v 0.2 -r 44100 -c 2 -A 00:02:5b:00:ff:03 \n");
+    printf("                                          -> Play aptx clip (-t = 9)\n");
+    printf("                                          -> 2 channels and 44100 sample rate\n");
+    printf("                                          -> BT addr: bt_addr=00:02:5b:00:ff:03\n");
     printf(" hal_play_test -K -F 4                    -> Measure latency KPIs for low latency output\n\n");
     printf(" hal_play_test -f /etc//Moto_320kbps.mp3 -t 2 -d 2 -v 0.1 -r 44100 -c 2 -e 2\n");
     printf("                                          -> plays MP3 stream(-t = 2) on speaker device(-d = 2)\n");
@@ -640,7 +668,10 @@
     char *kvpair_values = NULL;
     char kvpair[1000] = {0};
     struct proxy_data proxy_params;
-
+    char *ba = NULL;
+    qahw_param_payload payload;
+    qahw_param_id param_id;
+    struct qahw_aptx_dec_param aptx_params;
     /*
      * Default values
      */
@@ -675,6 +706,7 @@
         {"flags",         required_argument,    0, 'F'},
         {"kpi-mode",      no_argument,          0, 'K'},
         {"effect-path",   required_argument,    0, 'e'},
+        {"bt-addr",       required_argument,    0, 'A'},
         {"help",          no_argument,          0, 'h'},
         {0, 0, 0, 0}
     };
@@ -698,7 +730,7 @@
     proxy_params.hdr.data_sz = 0;
     while ((opt = getopt_long(argc,
                               argv,
-                              "-f:r:c:b:d:v:l:t:a:w:k:D:KF:e:h",
+                              "-f:r:c:b:d:v:l:t:a:w:k:D:KF:e:A:h",
                               long_options,
                               &option_index)) != -1) {
             switch (opt) {
@@ -767,6 +799,9 @@
                     ethread_func = effect_thread_funcs[effect_index];
                 }
                 break;
+            case 'A':
+                ba = optarg;
+                break;
             case 'h':
                 usage();
                 return 0;
@@ -902,6 +937,9 @@
         case FILE_DTS:
             config.offload_info.format = AUDIO_FORMAT_DTS;
             break;
+        case FILE_APTX:
+            config.offload_info.format = AUDIO_FORMAT_APTX;
+            break;
         default:
            fprintf(stderr, "Does not support given filetype\n");
            usage();
@@ -924,6 +962,23 @@
     if (output_device & AUDIO_DEVICE_OUT_ALL_A2DP) {
         output_device = AUDIO_DEVICE_OUT_PROXY;
     }
+    if (filetype == FILE_APTX) {
+        if (ba != NULL) {
+            parse_aptx_dec_bt_addr(ba, &aptx_params);
+            payload = (qahw_param_payload)aptx_params;
+            param_id = QAHW_PARAM_APTX_DEC;
+            fprintf(log_file, "Send BT addr nap %d, uap %d lap %d to HAL\n", aptx_params.bt_addr.nap,
+                        aptx_params.bt_addr.uap, aptx_params.bt_addr.lap);
+            rc = qahw_set_param_data(qahw_mod_handle, param_id, &payload);
+            if (rc != 0)
+                 printf("Error.Failed Set BT addr\n");
+        } else {
+            fprintf(log_file, "BT addr is NULL, Need valid BT addr for aptx file playback to work\n");
+            fprintf(stderr, "BT addr is NULL, Need valid BT addr for aptx file playback to work\n");
+            goto EXIT;
+        }
+    }
+
     fprintf(log_file, "calling open_out_put_stream:\n");
     rc = qahw_open_output_stream(qahw_mod_handle,
                                  handle,
