1#!/usr/bin/env python
2
3import os
4import sys
5import shutil
6
7download_fail_times = 0
8pvmp3_path = sys.path[0]
9
10download_path = os.path.join(pvmp3_path, "source")
11final_src_path = os.path.join(pvmp3_path, "src")
12
13pvmp3_source = ['pvmp3_normalize.c',
14                'pvmp3_alias_reduction.c',
15                'pvmp3_crc.c',
16                'pvmp3_decode_header.c',
17                'pvmp3_decode_huff_cw.c',
18                'pvmp3_getbits.c',
19                'pvmp3_dequantize_sample.c',
20                'pvmp3_framedecoder.c',
21                'pvmp3_get_main_data_size.c',
22                'pvmp3_get_side_info.c',
23                'pvmp3_get_scale_factors.c',
24                'pvmp3_mpeg2_get_scale_data.c',
25                'pvmp3_mpeg2_get_scale_factors.c',
26                'pvmp3_mpeg2_stereo_proc.c',
27                'pvmp3_huffman_decoding.c',
28                'pvmp3_huffman_parsing.c',
29                'pvmp3_tables.c',
30                'pvmp3_imdct_synth.c',
31                'pvmp3_mdct_6.c',
32                'pvmp3_dct_6.c',
33                'pvmp3_poly_phase_synthesis.c',
34                'pvmp3_equalizer.c',
35                'pvmp3_seek_synch.c',
36                'pvmp3_stereo_proc.c',
37                'pvmp3_reorder.c',
38                'pvmp3_polyphase_filter_window.c',
39                'pvmp3_mdct_18.c',
40                'pvmp3_dct_9.c',
41                'pvmp3_dct_16.c']
42
43print('download pvmp3 source file')
44if not os.path.exists(final_src_path):
45    while True:
46        if not os.path.exists(download_path):
47            #download_cmd = "git clone https://github.com/aosp-mirror/platform_external_opencore.git -b android-2.2.3_r2.1 " + str(download_path)
48            download_cmd = "git clone https://gitee.com/mirrors_aosp-mirror/platform_external_opencore.git -b android-2.2.3_r2.1 \"" + str(download_path) + "\""
49            print(download_cmd)
50            os.system(download_cmd)
51            if os.path.exists(download_path):
52                print("Download pvmp3 source success!\n")
53                break
54            else:
55                download_fail_times = download_fail_times + 1
56
57            if download_fail_times >= 3:
58                print("Download pvmp3 fail!\n")
59                break
60        break
61
62    src = os.path.join(pvmp3_path, 'source/codecs_v2/audio/mp3/dec/src')
63    dst = os.path.join(pvmp3_path, "src")
64    print(src)
65    print(dst)
66    shutil.copytree(src, dst)
67
68    os.remove(os.path.join(pvmp3_path, 'src/pvmp3_decoder.cpp'))
69
70    src = os.path.join(pvmp3_path, 'source/codecs_v2/audio/mp3/dec/include')
71    dst = os.path.join(pvmp3_path, 'include')
72    #shutil.rmtree(dst)
73    print(src)
74    print(dst)
75    shutil.copytree(src, dst)
76
77    n = 0
78    filelist = os.listdir(final_src_path)
79    for i in filelist:
80        oldname = os.path.join(final_src_path, filelist[n])
81
82        suffix = oldname.split('.')[-1]
83        if suffix == 'h' or suffix == 'cpp':
84            code =''
85            with open(oldname, 'r') as f:
86                code = f.read()
87                code = code.replace('double(', '(double)(')
88                code = code.replace('int32(', '(int32)(')
89                code = code.replace('huffcodetab     ht[HUFF_TBL];', 'struct huffcodetab     ht[HUFF_TBL];')
90                code = code.replace('huffcodetab       *pHuff;', 'struct huffcodetab       *pHuff;')
91                code = code.replace('__inline', 'static inline')
92                code = code.replace('inline int16 saturate16', 'static int16 saturate16')
93                code = code.replace('new_slen[4];', 'new_slen[4] = {0,0,0,0};')
94            with open(oldname, 'w') as f:
95                f.write(code)
96        if suffix == 'cpp':
97            newname = oldname[:-4] + '.c'
98            os.rename(oldname, newname)
99            print(oldname,'->', newname)
100        n = n + 1
101    shutil.copyfile('oscl_base.h', 'include/oscl_base.h')
102    shutil.copyfile('oscl_mem.h', 'include/oscl_mem.h')
103    shutil.rmtree(download_path)
104
105print('Download pvmp3 source file success!')
106
107
108