static void play_file_av(int filefd, int vfd, int afd) { unsigned char buf[BUFFY]; int count; audioSetMute(afd, 1); videoBlank(vfd, 1); if (audio && !black) { audioStop(afd); deviceClear(afd, -1); audioSetAVSync(afd, 0); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); audioPlay(afd); videoBlank(vfd, 0); } else if (audio && black) { deviceClear(afd, vfd); videoBlank(vfd, 1); audioSetAVSync(afd, 0); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); videoSelectSource(vfd, VIDEO_SOURCE_MEMORY); audioPlay(afd); videoPlay(vfd); } else { deviceClear(afd, vfd); audioSetAVSync(afd, 1); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); videoSelectSource(vfd, VIDEO_SOURCE_MEMORY); audioPlay(afd); videoPlay(vfd); videoBlank(vfd, 0); } if (dolby) { audioSetVolume(afd, 0); volset = 0; } else { audioSetVolume(afd, 255); volset = 1; } #ifndef __stub_posix_fadvise posix_fadvise(filefd, 0, 0, POSIX_FADV_SEQUENTIAL); #endif while ((count = read(filefd,buf,BUFFY)) > 0) scan_file_av(vfd,afd,buf,count); }
void settings_load() { unsigned long size = 0; file_size("settings.txt", &size); if (size < 24) { return; } char *ptr = vm_malloc(size); if (NULL == ptr) { return; } file_read("settings.txt", ptr, size, 0); cJSON *root = cJSON_Parse(ptr); if (NULL == root) { vm_free(ptr); return; } g_settings_brightness = cJSON_GetObjectItem(root, "brightness")->valueint; g_settings_sound = cJSON_GetObjectItem(root, "sound")->valueint; if (g_settings_brightness > 6) { g_settings_brightness = 6; } snprintf(g_settings_brightness_str, sizeof(g_settings_brightness_str), "%d", g_settings_brightness); if (g_settings_sound > 6) { g_settings_sound = 6; } g_settings_sound_str[0] = '0' + g_settings_sound; lcd_backlight_level(g_brightness_table[g_settings_brightness]); audioSetVolume(g_settings_sound); UG_ButtonSetText(&g_settings_window, 7, g_settings_brightness_str); UG_ButtonSetText(&g_settings_window, 4, g_settings_sound_str); vm_free(ptr); }
void audioOpen(int frequency, int stereo, int volume) { int supportedMixers, play_format=AFMT_S16_LE; if ((audio_fd = open ("/dev/dsp", O_WRONLY, 0)) == -1) die("Unable to open the audio device\n"); if (ioctl(audio_fd, SNDCTL_DSP_SETFMT,&play_format) < 0) die("Unable to set required audio format\n"); if ((mixer_fd=open("/dev/mixer",O_RDWR)) == -1) warn("Unable to open mixer device\n"); if (ioctl(mixer_fd, SOUND_MIXER_READ_DEVMASK, &supportedMixers) == -1) { warn("Unable to get mixer info assuming master volume\n"); volumeIoctl=SOUND_MIXER_WRITE_VOLUME; } else { if ((supportedMixers & SOUND_MASK_PCM) != 0) volumeIoctl=SOUND_MIXER_WRITE_PCM; else volumeIoctl=0; } /* Set 1 or 2 channels */ stereo=(stereo ? 1 : 0); if (ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo) < 0) die("Unable to set stereo/mono\n"); /* Set the output frequency */ if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &frequency) < 0) die("Unable to set frequency: %d\n",frequency); if (volume != -1) audioSetVolume(volume); if (ioctl(audio_fd, SNDCTL_DSP_GETBLKSIZE, &AUSIZ) == -1) die("Unable to get fragment size\n"); }
static int scan_file_av(int vfd, int afd, const unsigned char *buf, int buflen) { const unsigned char *const start = buf; const unsigned char *const end = buf + buflen; static unsigned int magic = 0xffffffff; static unsigned short count, len; static int fdc = -1; int m; while (buf < end) { if (count < 6) { switch (count) { case 0: m = 0; while ((magic & 0xffffff00) != 0x00000100) { if (buf >= end) goto out; magic = (magic << 8) | *buf++; m++; } if (m > 4) printf("Broken Frame found\n"); play[3] = (unsigned char)(magic & 0x000000ff); switch (play[3]) { case 0xE0 ... 0xEF: fdc = vfd; if (except[0] != play[3]) { if (except[0] == 0) except[0] = play[3]; else fdc = -1; } if (audio) fdc = -1; break; case 0xC0 ... 0xDF: fdc = afd; if (dolby) { fdc = -1; break; } if (except[1] != play[3]) { if (except[1] == 0) except[1] = play[3]; else fdc = -1; } if (!volset) { audioSetVolume(afd, 255); volset = 1; } break; case 0xBD: /* * TODO: sub filter to through out e.g. ub pictures * in Private Streams 1 _and_ get sub audio header * to set an except(ion) audio stream. * The later one requires some changes within the VDR * remux part! 2004/07/01 Werner */ fdc = afd; if (!dolby) { fdc = -1; break; } if (volset) { audioSetVolume(afd, 0); volset = 0; } break; default: fdc = -1; break; } count = 4; case 4: if (buf >= end) goto out; len = ((*buf) << 8); play[4] = (*buf); buf++; count++; case 5: if (buf >= end) goto out; len |= (*buf); len += 6; play[5] = (*buf); buf++; count++; if (fdc != -1) copy_to_dvb(vfd, afd, fdc, &play[0], count); default: break; } } while (count < len) { int rest = end - buf; if (rest <= 0) goto out; if (rest + count > len) rest = len - count; if (fdc != -1) copy_to_dvb(vfd, afd, fdc, buf, rest); count += rest; buf += rest; } /* Reset for next scan */ magic = 0xffffffff; count = len = 0; fdc = -1; play[3] = 0xff; } out: return buf - start; }
static void settings_window_callback(UG_MESSAGE *msg) { if (msg->type == MSG_TYPE_OBJECT) { if (msg->id == OBJ_TYPE_BUTTON && msg->event == OBJ_EVENT_RELEASED) { switch (msg->sub_id) { case 0: // back if (g_settings_is_changed) { g_settings_is_changed = 0; settings_save(); } UG_WindowShow(&g_home_window); break; case 3: // - if (g_settings_sound > 0) { g_settings_is_changed = 1; g_settings_sound--; audioSetVolume(g_settings_sound); g_settings_sound_str[0] = '0' + g_settings_sound; UG_ButtonSetText(&g_settings_window, 4, g_settings_sound_str); } break; case 5: // + if (g_settings_sound < 6) { g_settings_is_changed = 1; g_settings_sound++; audioSetVolume(g_settings_sound); g_settings_sound_str[0] = '0' + g_settings_sound; UG_ButtonSetText(&g_settings_window, 4, g_settings_sound_str); } break; case 6: // - if (g_settings_brightness > 0) { g_settings_is_changed = 1; g_settings_brightness--; lcd_backlight_level(g_brightness_table[g_settings_brightness]); itoa(g_settings_brightness, g_settings_brightness_str, 10); UG_ButtonSetText(&g_settings_window, 7, g_settings_brightness_str); } break; case 8: // + if (g_settings_brightness < 6) { g_settings_is_changed = 1; g_settings_brightness++; lcd_backlight_level(g_brightness_table[g_settings_brightness]); itoa(g_settings_brightness, g_settings_brightness_str, 10); UG_ButtonSetText(&g_settings_window, 7, g_settings_brightness_str); } break; default: break; } } } }