Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
verbose debug code/PlayVideo.c
/* |
File: PlayVideo.c |
Contains: PlayVideo demonstrates the usage of the RequestVideo sample library |
to make Display Manager calls. With PlayVideo, you can explore the |
RequestVideo API by changing bit depth and screen resolution on |
multisync displays. The purpose of this code is to provide a sample of |
how developers can change the bit depth and timing of multisync |
displays under their own control. Game developers should love this! |
After requesting a desired bit depth, horizontal, and vertical resolutions |
using the RVRequestVideoSetting() call, we then make the RVSetVideoRequest() |
call to do the deed. At exit, we call RVSetVideoAsScreenPrefs() to force the |
world to look like that described in the screen prefs. |
It is a good idea to reset the screen(s) to the original setting before exit |
since the call to RVSetVideoAsScreenPrefs() may not do the right thing under |
Display Manager 1.0 with certain video drivers. |
Written by: Eric Anderson |
Copyright: Copyright © 1995-1999 by Apple Computer, Inc., All Rights Reserved. |
You may incorporate this Apple sample source code into your program(s) without |
restriction. This Apple sample source code has been provided "AS IS" and the |
responsibility for its operation is yours. You are not permitted to redistribute |
this Apple sample source code as "Apple sample source code" after having made |
changes. If you're going to re-distribute the source, we require that you make |
it clear in the source that the code was descended from Apple sample source |
code, but that you've made changes. |
Change History (most recent first): |
7/15/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1 |
5/31/95 ewa Added RVGetCurrentVideoSetting and RVConfirmVideoRequest routines |
to make it easy to revert back to where you came from and to give |
the user a chance to confirm the new setting if the new mode was |
valid (ie: the card supports it) but not safe (the monitor may not). |
*/ |
#include "RequestVideo.h" |
#include <Memory.h> |
#include <StdIO.h> |
#include <stdlib.h> |
// routine defines |
unsigned long GetUserInputData (void); |
// routine implementations |
void main(void) |
{ |
VideoRequestRec requestRec; |
VideoRequestRec originalRec; |
short currentDepth; |
short currentHorizontal; |
short currentVertical; |
MaxApplZone(); |
printf("Welcome to ¥Guess That Video¥\n"); |
printf("\nIMPORTANT: WARNING WHEN CHANGING THE SCREEN RESOLUTION\n"); |
printf("IMPORTANT: IN A MULTI-MONITOR ENVIRONMENT\n"); |
printf("IMPORTANT: Monitor gravitation (repositioning) is not suported under\n"); |
printf("IMPORTANT: Display Manager 1.0, and there is not currently any code\n"); |
printf("IMPORTANT: written in this sample library to provide even minimal\n"); |
printf("IMPORTANT: gravitate functionality.\n"); |
printf("IMPORTANT: Currently, changing the video settings on\n"); |
printf("IMPORTANT: multi-monitor systems under the Display Manager 1.0.\n"); |
printf("IMPORTANT: will result in only the bit depth being changed.\n"); |
do |
{ |
requestRec.screenDevice = nil; // any screen |
printf("\nRequested bit depth (999 to end the game):"); |
requestRec.reqBitDepth = GetUserInputData (); // bit depth request |
if (requestRec.reqBitDepth != 999) |
{ |
// fill in the request record |
printf("Requested horizontal resolution:"); |
requestRec.reqHorizontal = GetUserInputData ();; // H request |
printf("Requested vertical resolution:"); |
requestRec.reqVertical = GetUserInputData ();; // V request |
requestRec.displayMode = nil; // must init to nil |
requestRec.depthMode = nil; // must init to nil |
requestRec.requestFlags = 1<<kAllValidModesBit; // give me the HxV over bit depth, and only safe video modes |
// make the request and set it if we have one.... |
RVRequestVideoSetting(&requestRec); |
if (requestRec.screenDevice != nil) // make sure we found a device...possible if there are no "safe" video modes |
{ |
// Get current setting |
originalRec.screenDevice = requestRec.screenDevice; // this screen |
RVGetCurrentVideoSetting(&originalRec); |
// print out the current info |
currentDepth = (*(*(requestRec.screenDevice))->gdPMap)->pixelSize; |
currentHorizontal = abs ((*(*(requestRec.screenDevice))->gdPMap)->bounds.right - (*(*(requestRec.screenDevice))->gdPMap)->bounds.left); |
currentVertical = abs ((*(*(requestRec.screenDevice))->gdPMap)->bounds.bottom - (*(*(requestRec.screenDevice))->gdPMap)->bounds.top); |
printf ("\n"); |
printf ("Info for GDevice at: %d\n", requestRec.screenDevice); |
printf ("Original depth:%d, horizontal:%d, vertical:%d\n", currentDepth, currentHorizontal, currentVertical); |
printf ("Requested depth:%d, horizontal:%d, vertical:%d\n", requestRec.reqBitDepth, requestRec.reqHorizontal, requestRec.reqVertical); |
printf ("Setting depth:%d, horizontal:%d, vertical:%d\n", requestRec.availBitDepth, requestRec.availHorizontal, requestRec.availVertical); |
// Set/Confirm/Reset the request |
RVSetVideoRequest (&requestRec); |
if (noErr != RVConfirmVideoRequest (&requestRec)) |
RVSetVideoRequest (&originalRec); |
// print out the new info |
currentDepth = (*(*(requestRec.screenDevice))->gdPMap)->pixelSize; |
currentHorizontal = abs ((*(*(requestRec.screenDevice))->gdPMap)->bounds.right - (*(*(requestRec.screenDevice))->gdPMap)->bounds.left); |
currentVertical = abs ((*(*(requestRec.screenDevice))->gdPMap)->bounds.bottom - (*(*(requestRec.screenDevice))->gdPMap)->bounds.top); |
printf ("New depth:%d, horizontal:%d, vertical:%d\n", currentDepth, currentHorizontal, currentVertical); |
} |
} |
} while (requestRec.reqBitDepth != 999); // our clue to bail |
printf("\nThank you for playing ¥Guess That Video¥\n"); |
// attempt to reset the world to screen prefs setting (may not do anything with old video drivers) |
RVSetVideoAsScreenPrefs (); |
} |
// Get user input of a number |
unsigned long GetUserInputData (void) |
{ |
long tempLong = 0; |
do scanf ("%ld", &tempLong); while (tempLong == 0); |
return (tempLong); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14