diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 17 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 196 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.h | 7 |
3 files changed, 219 insertions, 1 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index ae33e907f0..a72dcb8f02 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -360,7 +360,16 @@ static const struct wps_tag all_tags[] = { | |||
360 | { WPS_TOKEN_LASTTOUCH, "Tl", WPS_REFRESH_DYNAMIC, parse_timeout }, | 360 | { WPS_TOKEN_LASTTOUCH, "Tl", WPS_REFRESH_DYNAMIC, parse_timeout }, |
361 | { WPS_TOKEN_CURRENT_SCREEN, "cs", WPS_REFRESH_DYNAMIC, NULL }, | 361 | { WPS_TOKEN_CURRENT_SCREEN, "cs", WPS_REFRESH_DYNAMIC, NULL }, |
362 | { WPS_NO_TOKEN, "T", 0, parse_touchregion }, | 362 | { WPS_NO_TOKEN, "T", 0, parse_touchregion }, |
363 | 363 | ||
364 | |||
365 | /* Recording Tokens */ | ||
366 | { WPS_TOKEN_HAVE_RECORDING, "Rp", WPS_REFRESH_STATIC, NULL }, | ||
367 | #ifdef HAVE_RECORDING | ||
368 | { WPS_TOKEN_REC_FREQ, "Rf", WPS_REFRESH_DYNAMIC, NULL }, | ||
369 | { WPS_TOKEN_REC_ENCODER, "Re", WPS_REFRESH_DYNAMIC, NULL }, | ||
370 | { WPS_TOKEN_REC_BITRATE, "Rb", WPS_REFRESH_DYNAMIC, NULL }, | ||
371 | { WPS_TOKEN_REC_MONO, "Rm", WPS_REFRESH_DYNAMIC, NULL }, | ||
372 | #endif | ||
364 | { WPS_TOKEN_UNKNOWN, "", 0, NULL } | 373 | { WPS_TOKEN_UNKNOWN, "", 0, NULL } |
365 | /* the array MUST end with an empty string (first char is \0) */ | 374 | /* the array MUST end with an empty string (first char is \0) */ |
366 | }; | 375 | }; |
@@ -1461,6 +1470,12 @@ static int check_feature_tag(const char *wps_bufptr, const int type) | |||
1461 | #else | 1470 | #else |
1462 | return find_false_branch(wps_bufptr); | 1471 | return find_false_branch(wps_bufptr); |
1463 | #endif | 1472 | #endif |
1473 | case WPS_TOKEN_HAVE_RECORDING: | ||
1474 | #ifdef HAVE_RECORDING | ||
1475 | return 0; | ||
1476 | #else | ||
1477 | return find_false_branch(wps_bufptr); | ||
1478 | #endif | ||
1464 | default: /* not a tag we care about, just don't skip */ | 1479 | default: /* not a tag we care about, just don't skip */ |
1465 | return 0; | 1480 | return 0; |
1466 | } | 1481 | } |
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 46adbdc097..c599adf833 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -56,6 +56,7 @@ | |||
56 | #include "root_menu.h" | 56 | #include "root_menu.h" |
57 | #ifdef HAVE_RECORDING | 57 | #ifdef HAVE_RECORDING |
58 | #include "recording.h" | 58 | #include "recording.h" |
59 | #include "pcm_record.h" | ||
59 | #endif | 60 | #endif |
60 | 61 | ||
61 | static char* get_codectype(const struct mp3entry* id3) | 62 | static char* get_codectype(const struct mp3entry* id3) |
@@ -873,6 +874,201 @@ const char *get_token_value(struct gui_wps *gwps, | |||
873 | cfg_to_string(token->value.i,buf,buf_size); | 874 | cfg_to_string(token->value.i,buf,buf_size); |
874 | return buf; | 875 | return buf; |
875 | } | 876 | } |
877 | /* Recording tokens */ | ||
878 | case WPS_TOKEN_HAVE_RECORDING: | ||
879 | #ifdef HAVE_RECORDING | ||
880 | return "r"; | ||
881 | #else | ||
882 | return NULL; | ||
883 | #endif | ||
884 | |||
885 | #ifdef HAVE_RECORDING | ||
886 | case WPS_TOKEN_REC_FREQ: /* order from REC_FREQ_CFG_VAL_LIST */ | ||
887 | { | ||
888 | #if CONFIG_CODEC == SWCODEC | ||
889 | unsigned long samprk; | ||
890 | int rec_freq = global_settings.rec_frequency; | ||
891 | |||
892 | #ifdef SIMULATOR | ||
893 | samprk = 44100; | ||
894 | #else | ||
895 | #if defined(HAVE_SPDIF_REC) | ||
896 | if (global_settings.rec_source == AUDIO_SRC_SPDIF) | ||
897 | { | ||
898 | /* Use rate in use, not current measured rate if it changed */ | ||
899 | samprk = pcm_rec_sample_rate(); | ||
900 | rec_freq = 0; | ||
901 | while (rec_freq < SAMPR_NUM_FREQ && | ||
902 | audio_master_sampr_list[rec_freq] != samprk) | ||
903 | { | ||
904 | rec_freq++; | ||
905 | } | ||
906 | } | ||
907 | else | ||
908 | #endif | ||
909 | samprk = rec_freq_sampr[rec_freq]; | ||
910 | #endif /* SIMULATOR */ | ||
911 | if (intval) | ||
912 | { | ||
913 | switch (rec_freq) | ||
914 | { | ||
915 | REC_HAVE_96_(case REC_FREQ_96: | ||
916 | *intval = 1; | ||
917 | break;) | ||
918 | REC_HAVE_88_(case REC_FREQ_88: | ||
919 | *intval = 2; | ||
920 | break;) | ||
921 | REC_HAVE_64_(case REC_FREQ_64: | ||
922 | *intval = 3; | ||
923 | break;) | ||
924 | REC_HAVE_48_(case REC_FREQ_48: | ||
925 | *intval = 4; | ||
926 | break;) | ||
927 | REC_HAVE_44_(case REC_FREQ_44: | ||
928 | *intval = 5; | ||
929 | break;) | ||
930 | REC_HAVE_32_(case REC_FREQ_32: | ||
931 | *intval = 6; | ||
932 | break;) | ||
933 | REC_HAVE_24_(case REC_FREQ_24: | ||
934 | *intval = 7; | ||
935 | break;) | ||
936 | REC_HAVE_22_(case REC_FREQ_22: | ||
937 | *intval = 8; | ||
938 | break;) | ||
939 | REC_HAVE_16_(case REC_FREQ_16: | ||
940 | *intval = 9; | ||
941 | break;) | ||
942 | REC_HAVE_12_(case REC_FREQ_12: | ||
943 | *intval = 10; | ||
944 | break;) | ||
945 | REC_HAVE_11_(case REC_FREQ_11: | ||
946 | *intval = 11; | ||
947 | break;) | ||
948 | REC_HAVE_8_(case REC_FREQ_8: | ||
949 | *intval = 12; | ||
950 | break;) | ||
951 | } | ||
952 | *intval = rec_freq+1; | ||
953 | } | ||
954 | snprintf(buf, buf_size, "%d.%1d", samprk/1000,samprk%1000); | ||
955 | #else /* HWCODEC */ | ||
956 | |||
957 | static const char * const freq_strings[] = | ||
958 | {"--", "44", "48", "32", "22", "24", "16"}; | ||
959 | int freq = 1 + global_settings.rec_frequency; | ||
960 | #ifdef HAVE_SPDIF_REC | ||
961 | if (global_settings.rec_source == AUDIO_SRC_SPDIF) | ||
962 | { | ||
963 | /* Can't measure S/PDIF sample rate on Archos/Sim yet */ | ||
964 | freq = 0; | ||
965 | } | ||
966 | #endif /* HAVE_SPDIF_IN */ | ||
967 | if (intval) | ||
968 | *intval = freq+1; /* so the token gets a value 1<=x<=7 */ | ||
969 | snprintf(buf, buf_size, "%d\n", | ||
970 | freq_strings[global_settings.rec_frequency]); | ||
971 | #endif | ||
972 | return buf; | ||
973 | } | ||
974 | #if CONFIG_CODEC == SWCODEC | ||
975 | case WPS_TOKEN_REC_ENCODER: | ||
976 | { | ||
977 | int rec_format = global_settings.rec_format+1; /* WAV, AIFF, WV, MPEG */ | ||
978 | if (intval) | ||
979 | *intval = rec_format; | ||
980 | switch (rec_format) | ||
981 | { | ||
982 | case REC_FORMAT_PCM_WAV: | ||
983 | return "wav"; | ||
984 | case REC_FORMAT_AIFF: | ||
985 | return "aiff"; | ||
986 | case REC_FORMAT_WAVPACK: | ||
987 | return "wv"; | ||
988 | case REC_FORMAT_MPA_L3: | ||
989 | return "MP3"; | ||
990 | default: | ||
991 | return NULL; | ||
992 | } | ||
993 | break; | ||
994 | } | ||
995 | #endif | ||
996 | case WPS_TOKEN_REC_BITRATE: | ||
997 | #if CONFIG_CODEC == SWCODEC | ||
998 | if (global_settings.rec_format == REC_FORMAT_MPA_L3) | ||
999 | { | ||
1000 | if (intval) | ||
1001 | { | ||
1002 | #if 0 /* FIXME: I dont know if this is needed? */ | ||
1003 | switch (1<<global_settings.mp3_enc_config.bitrate) | ||
1004 | { | ||
1005 | case MP3_BITR_CAP_8: | ||
1006 | *intval = 1; | ||
1007 | break; | ||
1008 | case MP3_BITR_CAP_16: | ||
1009 | *intval = 2; | ||
1010 | break; | ||
1011 | case MP3_BITR_CAP_24: | ||
1012 | *intval = 3; | ||
1013 | break; | ||
1014 | case MP3_BITR_CAP_32: | ||
1015 | *intval = 4; | ||
1016 | break; | ||
1017 | case MP3_BITR_CAP_40: | ||
1018 | *intval = 5; | ||
1019 | break; | ||
1020 | case MP3_BITR_CAP_48: | ||
1021 | *intval = 6; | ||
1022 | break; | ||
1023 | case MP3_BITR_CAP_56: | ||
1024 | *intval = 7; | ||
1025 | break; | ||
1026 | case MP3_BITR_CAP_64: | ||
1027 | *intval = 8; | ||
1028 | break; | ||
1029 | case MP3_BITR_CAP_80: | ||
1030 | *intval = 9; | ||
1031 | break; | ||
1032 | case MP3_BITR_CAP_96: | ||
1033 | *intval = 10; | ||
1034 | break; | ||
1035 | case MP3_BITR_CAP_112: | ||
1036 | *intval = 11; | ||
1037 | break; | ||
1038 | case MP3_BITR_CAP_128: | ||
1039 | *intval = 12; | ||
1040 | break; | ||
1041 | case MP3_BITR_CAP_144: | ||
1042 | *intval = 13; | ||
1043 | break; | ||
1044 | case MP3_BITR_CAP_160: | ||
1045 | *intval = 14; | ||
1046 | break; | ||
1047 | case MP3_BITR_CAP_192: | ||
1048 | *intval = 15; | ||
1049 | break; | ||
1050 | } | ||
1051 | #endif | ||
1052 | } | ||
1053 | *intval = global_settings.mp3_enc_config.bitrate+1; | ||
1054 | snprintf(buf, buf_size, "%d", global_settings.mp3_enc_config.bitrate+1); | ||
1055 | return buf; | ||
1056 | } | ||
1057 | else | ||
1058 | return NULL; /* Fixme later */ | ||
1059 | #else /* CONFIG_CODEC == HWCODEC */ | ||
1060 | if (intval) | ||
1061 | *intval = global_settings.rec_quality+1; | ||
1062 | snprintf(buf, buf_size, "%d", global_settings.rec_quality); | ||
1063 | return buf; | ||
1064 | #endif | ||
1065 | case WPS_TOKEN_REC_MONO: | ||
1066 | if (intval) | ||
1067 | *intval = global_settings.rec_channels?2:1; | ||
1068 | snprintf(buf, buf_size, "%s", !global_settings.rec_channels?"m":'\0'); | ||
1069 | return buf; | ||
1070 | |||
1071 | #endif /* HAVE_RECORDING */ | ||
876 | case WPS_TOKEN_CURRENT_SCREEN: | 1072 | case WPS_TOKEN_CURRENT_SCREEN: |
877 | { | 1073 | { |
878 | int curr_screen = current_screen(); | 1074 | int curr_screen = current_screen(); |
diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h index 6d783551e6..31546b8cf6 100644 --- a/apps/gui/skin_engine/skin_tokens.h +++ b/apps/gui/skin_engine/skin_tokens.h | |||
@@ -193,6 +193,13 @@ enum wps_token_type { | |||
193 | /* Setting option */ | 193 | /* Setting option */ |
194 | WPS_TOKEN_SETTING, | 194 | WPS_TOKEN_SETTING, |
195 | WPS_TOKEN_CURRENT_SCREEN, | 195 | WPS_TOKEN_CURRENT_SCREEN, |
196 | |||
197 | /* Recording Tokens */ | ||
198 | WPS_TOKEN_HAVE_RECORDING, | ||
199 | WPS_TOKEN_REC_FREQ, | ||
200 | WPS_TOKEN_REC_ENCODER, | ||
201 | WPS_TOKEN_REC_BITRATE, /* SWCODEC: MP3 bitrate, HWCODEC: MP3 "quality" */ | ||
202 | WPS_TOKEN_REC_MONO, | ||
196 | }; | 203 | }; |
197 | 204 | ||
198 | struct wps_token { | 205 | struct wps_token { |