QuickTime for Java: A Developer's Notebook by Chris Adamson This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated May 19, 2006. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Confirmed errors: (xiv) bottom of the page; just before the heading "About the Examples"; the text states: "...download sample code, which is located at http://www.oreillly.com/catalog/9780596008222/" whereas, the examples are located at: http://examples.oreilly.com/9780596008222/ {xvi} Midway on the page; java -cp jars/qtj-notebook.jar com.oreilly.qtjnotebook.ch02.SimpleQTPlayer SimpleQTPlayer does not exist in current sample code--BasicQTPlayer does exist however. [36] BasicQTURLController.Java source; I confirmed with the author that the BasicQTURLController.Java program fails in Windows but does work properly in OS X. A bug report has been submitted to Apple. [199] 8th line; The code in the book works as shown, but needs a fix when non-zero timecodes are used. Here we go: This code works when the timecode is 00:00:00;00 -- i.e., when you construct the TimeCodeTime object as shown in the example -- but if you use other timecode values, you get incorrect values on Windows. This is because later on, when inserting the sample into the timecode track, you must use big-endian values for any data you put in a QuickTime data structure, for reasons described later (on pp. 207-8). This example doesn't do that, so when using non-zero timecodes, it works on Mac but not Windows. To expose the problem, change: TimeCodeTime tcTime = new TimeCodeTime (0, 0, 0, 0); to TimeCodeTime tcTime = new TimeCodeTime (1, 2, 3, 4); To then fix the problem, you need to apply an endian-fix to the frame number returned from timeCoder.toFrameNumber, before you add the frame number as a sample to the timecode track. An easy place to fix that is to change: frameNums[0] = frameNumber; to frameNums[0] = EndianOrder.flipNativeToBigEndian32 (frameNumber); This will create a timecode track that begins at 01:02:03;04, on both Mac and Windows.