Mercurial > mplayer.hg
view vidix/mtrr.c @ 37159:d4fbf2eb4a04
Ensure up-to-dateness of global_sub information upon request.
Some demuxers (like mpg) can detect subtitles only while playing,
which is the reason why MPlayer always - indirectly - calls
update_global_sub_size() prior to dealing with subtitles.
Functions mpctx_get_global_sub_size() and mpctx_get_global_sub_pos(),
however, merely return last determined values, thus missing information
that may have been arisen after MPlayer has checked last for subtitles
(when playback started).
Merge the two mpctx_get_global_sub_*() functions into one for easier
handling.
Retrieve global_sub pos by a mp_property_do("sub") command which
performs the necessary update of both global_sub variables, pos and
size.
Reported by Lode Leroy, lode.leroy gmail com.
author | ib |
---|---|
date | Sun, 17 Aug 2014 18:06:56 +0000 |
parents | 8b160dad46ab |
children |
line wrap: on
line source
/* * VIDIX Memory access optimization routines. * Copyright (C) 2002 Nick Kurshev * * This file is part of MPlayer. * * MPlayer is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MPlayer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with MPlayer; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "config.h" #include <stdio.h> #include <string.h> #include <errno.h> #include "dha.h" #include "AsmMacros.h" #if defined (__i386__) && defined (__NetBSD__) #include <sys/param.h> #if __NetBSD_Version__ > 105240000 #include <stdint.h> #include <stdlib.h> #include <machine/mtrr.h> #include <machine/sysarch.h> #endif #endif int mtrr_set_type(unsigned base,unsigned size,int type) { #ifdef __linux__ FILE * mtrr_fd; const char *stype; switch(type) { case MTRR_TYPE_UNCACHABLE: stype = "uncachable"; break; case MTRR_TYPE_WRCOMB: stype = "write-combining"; break; case MTRR_TYPE_WRTHROUGH: stype = "write-through"; break; case MTRR_TYPE_WRPROT: stype = "write-protect"; break; case MTRR_TYPE_WRBACK: stype = "write-back"; break; default: return EINVAL; } mtrr_fd = fopen("/proc/mtrr","wt"); if(mtrr_fd) { int wr_len = fprintf(mtrr_fd, "base=0x%08X size=0x%08X type=%s\n", base, size, stype); fclose(mtrr_fd); return wr_len > 0 ? 0 : EPERM; } return ENOSYS; #elif defined (__i386__ ) && defined (__NetBSD__) && __NetBSD_Version__ > 105240000 struct mtrr *mtrrp; int n; mtrrp = malloc(sizeof (struct mtrr)); mtrrp->base = base; mtrrp->len = size; mtrrp->type = type; mtrrp->flags = MTRR_VALID | MTRR_PRIVATE; n = 1; if (i386_set_mtrr(mtrrp, &n) < 0) { free(mtrrp); return errno; } free(mtrrp); return 0; #else /* NetBSD prior to 1.5Y doesn't have MTRR support */ return ENOSYS; #endif }