Время и пространство фильма

В этой главе описываются функции панели инструментов фильма, которую Ваше приложение будет использовать для управления timebase и пространственными характеристиками фильмов, дорожек и носителей.

Работа с фильмом пространственные характеристики

Панель инструментов Фильма обеспечивает много функций, позволяющих Вашему приложению определять и изменять пространственные характеристики фильмов и дорожек. Перед использованием любого из них необходимо быть знакомы с путем, которым Панель инструментов Фильма выводит на экран фильмы. Вот некоторые подсказки для использования этих функций:

Матричные функции

Панель инструментов Фильма обеспечивает много функций, позволяющих Вам работать с матрицами трансформации. В этом разделе описываются те функции. Для описаний фиксированной точки и структур фиксированного прямоугольника, посмотрите Структуры Фиксированной точки и Фиксированного Прямоугольника.

Структуры фиксированной точки и Фиксированного Прямоугольника

Функции матрицы Панели инструментов Фильма обеспечивают два механизма для указания точек и прямоугольников. Некоторые функции работают со стандартными точками QuickDraw и прямоугольниками, использующими целочисленные значения для идентификации координат. Другие, такой как TransformFixedRect функция, работайте с точками и прямоугольниками, координаты которых выражены как числа фиксированной точки. При помощи чисел фиксированной точки в этих точках и прямоугольниках, Панель инструментов Фильма может поддерживать большую степень точности при определении графических объектов.

FixedPoint тип данных определяет фиксированную точку. FixedRect тип данных определяет фиксированный прямоугольник. Обратите внимание на то, что обе из этих структур определяют координату x перед координатой y. Это отличается от стандартных структур QuickDraw.

struct FixedPoint
{
    Fixed x;        /* point's x coordinate as fixed-point number */
    Fixed y;        /* point's y coordinate as fixed-point number */
};
typedef struct FixedPoint FixedPoint;

Поле

Описание

x

Определяет координату x точки как число фиксированной точки.

y

Определяет координату y точки как число фиксированной точки.

struct FixedRect
{
    Fixed left;         /* x coordinate of upper-left corner */
    Fixed top;          /* y coordinate of upper-left corner */
    Fixed right;        /* x coordinate of lower-right corner */
    Fixed bottom;       /* y coordinate of lower-right corner */
};
typedef struct FixedRect FixedRect;

Поле

Описание

left

Определяет x координату верхнего левого угла прямоугольника как число фиксированной точки.

top

Определяет y координату верхнего левого угла прямоугольника как число фиксированной точки.

right

Определяет x координату нижнего правого угла прямоугольника как число фиксированной точки.

bottom

Определяет y координату нижнего правого угла прямоугольника как число фиксированной точки.

Создание матового стекла дорожки

 Перечисление 1-1 обеспечивает пример того, как создать матовое стекло дорожки. CreateTrackMatte функция добавляет неинициализированное, 8 битов глубиной, полутоновое матовое стекло к дорожке. UpdateTrackMatte функция рисует серый прямоугольник ската вокруг края матового стекла и заполняет центр матового стекла с черным цветом. (Прямоугольник ската постепенно заштриховывает от света до темноты в гладких инкрементах.)

Перечисление 1-1  , Создающее матовое стекло дорожки

 
void CreateTrackMatte (Track theTrack)
{
    QDErr err;
    GWorldPtr aGW;
    Rect trackBox;
    Fixed trackHeight;
    Fixed trackWidth;
    CTabHandle grayCTab;
    GetTrackDimensions (theTrack, &trackWidth, &trackHeight);
    SetRect (&trackBox, 0, 0, FixRound (trackWidth),
                FixRound (trackHeight));
 
    grayCTab = GetCTable(40);    /* 8 bit + 32 = 8 bit gray */
    err = NewGWorld (&aGW, 8, &trackBox, grayCTab,
                        (GDHandle) nil, 0);
    DisposeCTable (grayCTab);
    if (!err && (aGW != nil))
    {
        SetTrackMatte (theTrack, aGW->portPixMap);
        DisposeGWorld (aGW);
    }
}
void UpdateTrackMatte (Track theTrack)
{
    OSErr err;
    PixMapHandle trackMatte;
    PixMapHandle savePortPix;
    Movie       theMovie;
    GWorldPtr tempGW;
    CGrafPtr savePort;
    GDHandle saveGDevice;
    Rect        matteBox;
    short       i;
 
    theMovie = GetTrackMovie (theTrack);
    trackMatte = GetTrackMatte (theTrack);
    if (trackMatte == nil)
    {
        /* track doesn't have a matte, so give it one */
        CreateTrackMatte (theTrack);
        trackMatte = GetTrackMatte (theTrack);
        if (trackMatte == nil)
            return;
    }
 
    GetGWorld (&savePort, &saveGDevice);
    matteBox = (**trackMatte).bounds;
    err = NewGWorld(&tempGW,
                       (**trackMatte).pixelSize, &matteBox,
                       (**trackMatte).pmTable, (GDHandle) nil, 0);
    if (err || (tempGW == nil)) return;
 
    SetGWorld (tempGW, nil);
    savePortPix = tempGW->portPixMap;
    LockPixels (trackMatte);
    SetPortPix (trackMatte);
 
    /* draw a gray ramp rectangle around the edge of the matte */
    for (i = 0; i < 35; i++)
    {
        RGBColor aColor;
        long        tempLong;
        tempLong = 65536 - ((65536 / 35) * (long)i);
        aColor.red = aColor.green = aColor.blue = tempLong;
        RGBForeColor(&aColor);
        FrameRect (&matteBox);
        InsetRect (&matteBox, 1, 1);
    }
    
    /* fill the center of the matte with black */
    ForeColor (blackColor);
    PaintRect (&matteBox);
    
    SetPortPix (savePortPix);
    SetGWorld (savePort, saveGDevice);
    DisposeGWorld (tempGW);
    UnlockPixels (trackMatte);
    SetTrackMatte (theTrack, trackMatte);
    DisposeMatte (trackMatte);
}

Работа со временем фильма

Каждый фильм в формате QuickTime имеет свою собственную основу времени. Основа времени фильма позволяет все дорожки, составляющие фильм, который будет синхронизироваться, когда проигрывается фильм. Панель инструментов Фильма обеспечивает много функций, позволяющих Вашему приложению определять и устанавливать параметры времени фильма:

Следующие разделы обсуждают те функции. Более поздние разделы в этой главе обсуждают функции Панели инструментов Фильма, позволяющие Вам работать с параметрами времени структур носителей и дорожек. Для получения информации о большем количестве функций, работающих со временем, посмотрите Функции Основы Времени.

Во время фильма

На наиболее базовом уровне Панель инструментов Фильма позволяет, Вы для обработки времени базировали данные. Также, Панель инструментов Фильма должна предоставить описание основания времени тех данных, а также определение контекста для оценки того основания времени. В QuickTime основа времени фильма упоминается как его основа времени. Геометрически, можно думать об основе времени как о векторе, определяющем направление и скорость времени для фильма. Контекст какое-то время базируется, вызывается его системой координат времени. По существу система координат времени определяет ось, на которой графически изображен вектор основы времени. Самый маленький единый блок времени, отмеченного на той оси, определяется к этому времени масштаб как модули в абсолютную секунду.

Системы координат времени

Система координат времени фильма обеспечивает контекст для оценки течения времени в фильме. При размышлении о системе координат времени как об определении оси для измерения времени только естественно, что эта ось была бы отмечена с масштабом, определяющим основную единицу измерения. В QuickTime ту систему измерения вызывают масштабом времени.

Масштаб времени QuickTime определяет число единиц измерения времени, передающих каждую секунду в данной системе координат времени. Система координат времени, имеющая масштаб времени 1 раза мер в секундах. Точно так же система координат времени, имеющая масштаб времени 60 мер sixtieths секунды. В целом каждая единица измерения времени в системе координат времени равна (1/масштаб времени) секунды. Некоторые общие масштабы времени перечислены в Таблице 1-1.

Таблица 1-1  Общие масштабы времени фильма

Масштаб времени

Абсолютное время измерилось

1

Секунды

60

Sixtieths секунды (галочки Macintosh)

1000

Миллисекунды

22254.54

Звучите выбранными в 22 кГц

 Рисунок 1-1 показывает продолжительность двух секунд в абсолютное время и эквивалентные продолжительности в общих масштабах времени, перечисленных в Таблице 1-1.

  Масштабы времени рисунка 1-1

Определенный момент времени в системе координат времени представлен с помощью временной стоимости. Временная стоимость выражена с точки зрения масштаба времени ее системы координат времени. Без масштаба подходящего времени временная стоимость бессмысленна. Например, в системе координат времени с масштабом времени 60, временная стоимость 180 переводит в 3 секунды. Поскольку все системы координат времени скрепляют к абсолютному времени (т.е. время, поскольку мы измеряем его в секундах), Панель инструментов Фильма может перевести временные стоимости из одной системы координат времени в другого.

Системы координат времени имеют конечную максимальную продолжительность, определяющую максимальную временную стоимость какое-то время система координат (минимальная временная стоимость всегда 0). Обратите внимание на то, что, поскольку фильм в формате QuickTime редактируется, изменения продолжительности.

Как значение увеличений масштаба времени (поскольку единица измерения времени для системы координат становится меньшей с точки зрения абсолютного времени), максимальное абсолютное время, которое может быть представлено в системе координат времени уменьшения. Например, если бы временная стоимость была представлена как 16-разрядное целое число без знака, то его максимальное значение было бы 65,535. В системе координат времени с масштабом времени 1, максимальная временная стоимость представляла бы 65 535 секунд. Однако в системе координат времени с масштабом времени 5, максимальная временная стоимость соответствовала бы 13 107 секундам. Следовательно, время продолжительность системы координат ограничивается ее масштабом времени. QuickTime использует 32-разрядные и 64-разрядные количества для представления временных стоимостей, таким образом, только необходимо волноваться о достижении максимального абсолютного времени в ситуациях, где время, продолжительность системы координат очень длинна или ее масштаб времени, является очень большим.

Основы времени

Основа времени фильма определяет свое значение текущего времени и уровень, на котором время передает для фильма. Уровень указывает скорость и направление в который путешествия во времени в фильме. Отрицательные значения уровня заставляют Вас перемещаться назад через данные фильма; продвигаются положительные значения. Основа времени также содержит ссылку на часы, обеспечивающие синхронизацию для основы времени. Часы QuickTime реализованы как компоненты, которыми управляет Менеджер компонентов.

Основы времени существуют независимо от любой определенной системы координат времени. Однако временные стоимости, извлеченные из основы времени, бессмысленны без масштаба времени. Поэтому каждый раз, когда Вы получаете временную стоимость из основы времени, необходимо указать масштаб времени результата временной стоимости. Панель инструментов Фильма переводит время временная стоимость основы в значение, которое разумно в масштабе требуемого времени.

 Рисунок 1-2 представляет систему координат времени и основу времени геометрически. Система координат времени представлена координатной осью. В этом примере система координат времени имеет масштаб времени 2; т.е. в каждую секунду существует две единицы измерения времени. Продолжительность этой системы координат времени составляет 2 секунды, который эквивалентен 4 единицам измерения времени. Основа времени объекта изображена крупной стрелкой под осью, представляющей систему координат времени. На сей раз основа имеет значение текущего времени 3 и уровень 1. Время начала является временной стоимостью, выраженной в модулях системы координат времени.

Рисунок 1-2  система координат времени и основа времени

Работа со временем дорожки

Панель инструментов Фильма обеспечивает несколько функций, позволяющих Вашему приложению определять и устанавливать параметры времени дорожки. Дорожка использует основу времени фильма, содержащего дорожку; поэтому нет никаких функций, работающих с основой времени дорожки или масштабом времени. Однако можно определить продолжительность дорожки и ее смещение от запуска фильма.

Все дорожки в фильме используют систему координат времени фильма. Т.е. масштаб времени фильма определяет основную единицу измерения времени для каждой из дорожек фильма. Каждая дорожка начинается в начале фильма, но данные дорожки не могли бы начаться до некоторой временной стоимости кроме 0. Это прошедшее время представлено пробелом. В аудиотреке пробел переводит в тишину; в видеотреке пробел не генерирует визуального изображения. Этот пробел является смещением дорожки. Каждая дорожка имеет свою собственную продолжительность. Эта продолжительность не должна соответствовать продолжительности фильма. Продолжительность фильма всегда равняется максимальной продолжительности дорожки. Эти функции помогают Вам работать со временем дорожки:

  • Можно использовать GetTrackDuration функция для определения продолжительности дорожки.

  • SetTrackOffset и GetTrackOffset функции позволяют Вам работать со смещением дорожки от запуска фильма, содержащего его.

  • TrackTimeToMediaTime функция позволяет Вам перевести время дорожки в соответствующую временную стоимость носители в дорожке.

Работа со временем носителей

Панель инструментов Фильма обеспечивает функции, позволяющие Ваше рвение с параметрами времени носители:

  • Можно использовать GetMediaDuration функция для определения продолжительности носителей.

  • GetMediaTimeScale и SetMediaTimeScale позвольте Вам определить или установить масштаб времени носителей.

Функции основы времени

Панель инструментов Фильма обеспечивает много функций, позволяющих Вам работать с основами времени. Основа времени QuickTime определяет систему координат времени фильма. Однако можно также использовать основы времени QuickTime для предоставления общих услуг синхронизации. В этом разделе описываются функции, позволяющие Ваше рвение с основами времени.

Этот раздел был разделен на следующие темы:

Создание и избавление от основ времени

Следующие функции Панели инструментов Фильма помогают Вашему приложению создать и избавиться от основ времени:

  • NewTimeBase функция позволяет Вам заложить новую основу времени. Можно использовать DisposeTimeBase функция для избавления от времени базируется, как только Вы закончены с нею.

  • Основы времени полагаются или на компонент часов или на другую основу времени для их источника времени. Можно использовать SetTimeBaseMasterTimeBase функционируйте, чтобы заставить одну основу времени основываться на другой основе времени. GetTimeBaseMasterTimeBase позволяет Вам определять основную основу времени данной основы времени.

  • Можно присвоить компонент часов основе времени; те часы тогда действуют как основной тактовый генератор для основы времени. Можно использовать SetTimeBaseMasterClock функция для присвоения компонента часов основе времени. GetTimeBaseMasterClock функция позволяет Вам определить компонент часов, присваивающийся основе времени. Можно изменить смещение между основой времени и ее источником времени путем вызова SetTimeBaseZero функция.

  • Можно установить источник времени фильма путем вызова SetMovieMasterTimeBase и SetMovieMasterClock функции.

Работа со значениями основы времени

Каждый раз базируется, содержит уровень, время начала, время остановки, текущее время и некоторая информация о статусе. Панель инструментов Фильма обеспечивает много функций, позволяющих Ваше рвение с содержанием основы времени. Можно использовать эти функции:

  • GetTimeBaseTime функция позволяет Вам получить значение текущего времени основы времени. Можно установить значение текущего времени путем вызова SetTimeBaseTime функция; эта функция требует, чтобы Вы обеспечили временную структуру. Также можно установить текущее время на основе временной стоимости путем вызова SetTimeBaseValue функция.

  • Можно установить курс основы времени путем вызова GetTimeBaseRate функция. Можно установить уровень основы времени путем вызова SetTimeBaseRate функция. Можно установить действующий курс основы требуемого времени (относительно основной основы времени, которой это подчинено) путем вызова GetTimeBaseEffectiveRate функция.

  • Можно получить время начала основы времени путем вызова GetTimeBaseStartTime функция. Можно установить время начала основы времени путем вызова SetTimeBaseStartTime функция. Точно так же можно использовать GetTimeBaseStopTime и SetTimeBaseStopTime функции для работы со временем остановки основы времени.

Панель инструментов Фильма также обеспечивает функции, позволяющие Вам работать с информацией о статусе основы времени:

  • GetTimeBaseStatus функция позволяет Вам читать текущий статус основы времени.

  • GetTimeBaseFlags функция помогает Вам получить флаги управления основы времени. Можно установить эти флаги путем вызова SetTimeBaseFlags функция.

Временные структуры

Панель инструментов Фильма обеспечивает много функций, позволяющих Вам работать с временными структурами:

Все эти функции работают с временными структурами. Можно использовать временные структуры для представления или временных стоимостей или продолжительностей. Временные стоимости указывают момент времени относительно данной основы времени. Продолжительности указывают промежуток времени относительно данного масштаба времени. Продолжительности представлены временными структурами, имеющими набор основы времени к 0 (т.е. base поле во временной структуре установлено в nil).

Структура TimeRecord

Много функций управления временем требуют, чтобы Вы поместили спецификацию времени в структуру данных, названную a TimeRecord.

struct TimeRecord
{
    CompTimeValue       value;      /* time value (duration or absolute) */
    TimeScale       scale;          /* units per second */
    TimeBase        base;           /* reference to the time base */
};
typedef struct TimeRecord TimeRecord;

Поле

Описание

value

Содержит временную стоимость. Временная стоимость определяет или продолжительность или абсолютное время путем указания соответствующего числа единиц времени. На время это - число единиц измерения времени в период. В течение абсолютного времени это - число единиц измерения времени с начала системы координат времени. Модуль для этого значения определяется полем масштаба. Временная стоимость выражена как a CompTimeValue тип данных, который является 64-разрядным целочисленным количеством. Это 64-разрядное количество состоит из двух 32-разрядных целых чисел, и оно определяется Int64 тип данных.

scale

Содержит масштаб времени. Это поле указывает число единиц времени та передача каждую секунду. При указании значения 0 основа времени использует свой естественный масштаб времени.

base

Содержит ссылку на основу времени. Вы получаете основу времени путем вызова Панели инструментов Фильма GetMovieTimeBase или NewTimeBase функции. Если временная структура определяет продолжительность, установите это поле в nil. Иначе, это поле должно относиться к допустимой основе времени.

Большие временные стоимости

Можно указать временную стоимость во временной структуре как 64-разрядное целочисленное значение следующим образом:

typedef Int64 CompTimeValue;

Панель инструментов Фильма использует этот формат так, чтобы могли быть представлены чрезвычайно большие временные стоимости. Int64 тип данных определяет формат этих 64-разрядных целых чисел со знаком.

struct Int64
{
    long hi;    /* high-order 32 bits-value field in time structure */
    long lo;    /* low-order 32 bits-value field in time structure */
};
typedef struct Int64 Int64;

Поле

Описание

hi

Содержит старший разряд 32 бита значения. Старший бит представляет знак 64-разрядного целого числа.

lo

Содержит младший разряд 32 бита значения.

Функции обратного вызова основы времени

Если Ваше приложение использует основы времени QuickTime, оно может определить функции обратного вызова, связанные с определенной основой времени. Ваше приложение может тогда использовать эти функции обратного вызова для выполнения действий, инициированных временными событиями, такими как определенное достигаемое время или указанный достигнутый уровень. Функции основы времени Панели инструментов Фильма взаимодействуют с компонентами часов для планирования вызова этих функций обратного вызова; компоненты часов ответственны за вызов функции обратного вызова в ее запланированное время. Ваше приложение может использовать функции, описанные в этом разделе, чтобы установить Вашу собственную функцию обратного вызова и запланировать события обратного вызова.

Можно определить три типа событий обратного вызова. Эти типы отличает природа временного события, инициировавшего Панель инструментов Фильма для вызывания функции. Три типа

Используйте эти функции для работы с обратными вызовами основы времени:

Сводка функции времени и пространства

Вот сводка функций Панели инструментов Фильма, которые можно использовать для управления временем фильма и пространственными характеристиками.

Управление пространством фильма

Панель инструментов Фильма содержит много функций, которые Ваше приложение может использовать, чтобы определить или изменить пространственные характеристики дисплея фильмов и дорожек. Эти функции влияют на графический мир фильма, его матрицу, заключительную систему координат дисплея и границы дисплея. Они включают

  • SetTrackGWorld

  • SetMovieGWorld

  • GetMovieGWorld

  • SetMovieBox

  • GetMovieBox

  • GetMovieDisplayBoundsRgn

  • GetMovieSegmentDisplayBoundsRgn

  • SetMovieDisplayClipRgn

  • GetMovieDisplayClipRgn

  • GetTrackSegmentDisplayBoundsRgn

  • SetTrackLayer

  • GetTrackLayer

  • SetMovieMatrix

  • GetMovieMatrix

  • GetMovieBoundsRgn

  • GetTrackMovieBoundsRgn

  • GetMovieClipRgn

  • SetTrackMatrix

  • GetTrackMatrix

  • GetTrackBoundsRgn

  • SetTrackDimensions

  • GetTrackDimensions

  • SetTrackClipRgn

  • GetTrackClipRgn

  • SetTrackMatte

  • GetTrackMatte

  • DisposeMatte

  • SetMovieColorTable

  • GetMovieColorTable

Работа с матрицами

Несколько функций Панели инструментов Фильма позволяют Вам управлять матрицами трансформации.

Управление временем фильма

Несколько функций используются для работы с параметрами времени фильма. Включенный функции для получения основы времени, работы с текущим временем фильма, работы с масштабом времени, вычисления продолжительности фильма, и получения и установки скорости воспроизведения.

  • GetMovieDuration

  • SetMovieTimeValue

  • SetMovieTime

  • GetMovieTime

  • SetMovieRate

  • GetMovieRate

  • SetMovieTimeScale

  • GetMovieTimeScale

  • GetMovieTimeBase

Управление временем дорожки

Несколько функций работают с параметрами времени дорожки. Все дорожки совместно используют основу времени фильма, но каждая дорожка содержит свое собственное смещение и продолжительность. Функция также предоставлена для перевода времени дорожки в значение, надлежащее носителям дорожки.

Управление временем носителей

Три функции работают со временем носителей параметры. У каждого носители есть его собственный масштаб времени и продолжительность.

Нахождение интересных времен

Можно вызвать функции Панели инструментов Фильма для поиска фильма, дорожки или носителей для определенной выборки, таких как ключевой кадр. Функции возвращают время и продолжительность следующей выборки, удовлетворяющей критерии поиска.

  • GetMovieNextInterestingTime

  • GetTrackNextInterestingTime

  • GetMediaNextInterestingTime

Управление основой времени

Различная Панель инструментов Фильма функционирует работа с основами времени. Основа времени QuickTime определяет систему координат времени для фильма. Это может также использоваться для предоставления общих услуг синхронизации.

Большинство этих функций обсуждено в предыдущих разделах этой главы.