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);
}
Exemple #3
0
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;
            }
        }
    }
}