Полученная поддержка обработчика носителей

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

Структура данных

GetMovieCompleteParams тип данных определяет расположение полной структуры параметра фильма, используемой MediaInitialize функция:

typedef struct {
    short               version;                /* version; always 1 */
    Movie               theMovie;               /* movie identifier */
    Track              theTrack;               /* track identifier */
    Media               theMedia;               /* media identifier */
    TimeScale           movieScale;             /* movie's time scale */
    TimeScale           mediaScale;             /* media's time scale */
    TimeValue           movieDuration;          /* movie's duration */
    TimeValue           trackDuration;          /* track's duration */
    TimeValue           mediaDuration;          /* media's duration */
    Fixed               effectiveRate;          /* media's effective rate */
    TimeBase            timeBase;               /* media's time base */
    short               volume;                 /* media's volume */
    Fixed               width;                  /* width of display area */
    Fixed              height;                 /* height of display area */
    MatrixRecord        trackMovieMatrix;       /* transformation matrix */
    CGrafPtr            moviePort;              /* movie's graphics port */
    GDHandle            movieGD;                /* movie's graphics device */
    PixMapHandle        trackMatte;             /* track's matte */
    QTAtomContainer     inputMap;          /* media's input map */
} GetMovieCompleteParams;

Поле

Описание

version

Указывает версию этой структуры. Это поле всегда устанавливается в 1.

theMovie

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

theTrack

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

theMedia

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

movieScale

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

mediaScale

Указывает масштаб времени текущих носителей. Если Панель инструментов Фильма изменяет масштаб времени Ваших носителей, панель инструментов вызывает Ваш полученный обработчик носителей MediaSetMediaTimeScale функция.

movieDuration

Содержит продолжительность фильма. Это значение выражено в масштабе времени фильма.

trackDuration

Содержит продолжительность дорожки. Это значение выражено в масштабе времени фильма.

mediaDuration

Содержит продолжительность носителей. Это значение выражено в масштабе времени носителей.

effectiveRate

Содержит действующую ставку носителей. Этот уровень связывает масштаб времени носителей с течением абсолютного времени и не обязательно соответствует уровню фильма. Это значение принимает во внимание любые основные основы времени, которые могут служить основе времени носителей. Значение этого поля указывает число единиц измерения времени (в масштабе времени носителей) та передача каждую секунду. Этот уровень представлен как 32-разрядное число фиксированной точки. Старший разряд 16 битов содержат целочисленную часть и младший разряд 16 битов, содержит дробную часть. Когда время перемещается назад для носителей, уровень отрицателен. Каждый раз, когда Панель инструментов Фильма изменяет действующую ставку Ваших носителей, она вызывает Ваш полученный обработчик носителей MediaSetRate функция.

timeBase

Идентифицирует основу времени носителей.

volume

Содержит текущий параметр громкости носителей. Это значение представлено как 16-разрядное число фиксированной точки. Старший разряд 8 битов содержит целочисленную часть; младший разряд 8 битов содержит дробную часть. Объем оценивает диапазон от-1.0 до 1,0. Отрицательные величины не играют звука, но сохраняют абсолютное значение параметра громкости. Если Панель инструментов Фильма изменяет объем Ваших носителей, она вызывает Ваш полученный обработчик носителей MediaGSetVolume функция.

width

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

height

Указывает высоту, в пикселях, прямоугольника дорожки. Это значение соответствует y координате нижнего правого угла прямоугольника и выражено как число фиксированной точки.

trackMovieMatrix

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

moviePort

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

movieGD

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

trackMatte

Идентифицирует матовую область, присвоенную дорожке, использующей Ваши носители. Это поле содержит дескриптор к пиксельной карте, содержащей матовое стекло смешения. Ваш компонент не ответственен за избавление от этого матового стекла. Если нет никакого матового стекла, это поле установлено в nil.

inputMap

Ссылка на входную карту носителей. Входная карта носителей не должна быть изменена или расположена.

Флаг менеджера компонентов

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

Функции

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

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

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

Общее управление данными

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

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

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

Если Панель инструментов Фильма вызвала SetMediaSampleDescription функция на демонстрационном описании, это использует MediaSampleDescriptionChanged функция для уведомления обработчика носителей изменения.

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

Панель инструментов Фильма использует две функции для информирования Вас об изменениях в среде времени Ваших носителей. MediaSetMediaTimeScale функция позволяет Панели инструментов Фильма изменять масштаб времени Ваших носителей. MediaSetMovieTimeScale когда масштаб времени фильма изменился, функция позволяет Панели инструментов Фильма говорить Вам.

Другие полезные функции включают

  • MediaGSetActiveSegment

  • MediaInvalidateRegion

  • MediaGetNextStepTime

  • MediaTrackReferencesChanged

  • MediaTrackPropertyAtomChanged

  • MediaSetTrackInputMapReference

  • MediaGetSampleDataPointer

  • MediaReleaseSampleDataPointer

  • MediaCompare

  • MediaSetVideoParam

  • MediaGetVideoParam

  • MediaSetNonPrimarySourceData

  • MediaGetOffscreenBufferSize

  • MediaSetHints

  • MediaGetName

Графическое управление данными

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

Панель инструментов Фильма вызывает Ваш обработчик MediaSetGWorld функционируйте каждый раз, когда изменились графический порт Ваших носителей или графическое устройство. MediaSetDimensions функция позволяет Панели инструментов Фильма сообщать Вашему обработчику об изменениях в его пространственных размерностях. Каждый раз, когда или фильм или изменения матрицы дорожки, Панель инструментов Фильма вызывает Ваш MediaSetMatrix функция. Точно так же, если область отсечения Ваших носителей изменяется, Панель инструментов Фильма вызывает Ваш MediaSetClip функция.

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

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

Другие полезные функции включают

  • MediaGetDrawingRgn

  • MediaGetGraphicsMode

  • MediaSetGraphicsMode

Звуковое управление данными

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

Основная функция утилиты обработчика носителей

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

Управление прогрессивными загрузками

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

Расписание, которое возвращает Ваш полученный обработчик носителей, является двухмерной антенной решеткой длинных целых, организованной так, чтобы каждая строка в таблице содержала значения для одной ссылки на данные. Первый столбец в таблице содержит значения в течение времени в носителях, указанных startTime параметр и каждый последующий столбец содержат значения для точки в носителях, которая является позже значением, указанным timeIncrement параметр. Каждое значение длинного целого в таблице указывает смещение, в байтах, с начала ссылки на данные для той точки в носителях.

Константы

Константы, перечисленные в этом разделе, поддерживают функции, перечисленные в Функциях.

Функциональные флаги

/* flags in flags parameter of MediaSetHandlerCapabilities function */
enum {
    handlerHasSpatial               =   1<<0,   /* draws */
    handlerCanClip                  =   1<<1,   /* clips */
    handlerCanMatte                 =   1<<2,   /* reserved */
    handlerCanTransferMode          =   1<<3,   /* does transfer modes */
    handlerNeedsBuffer              =   1<<4,   /* use offscreen buffer */
    handlerNoIdle                   =   1<<5,   /* never draws */
    handlerNoScheduler              =   1<<6,   /* schedules self */
    handlerWantsTime                =   1<<7,   /* needs more time */
    handlerCGrafPortOnly            =   1<<8    /* color only */
};
 
/* values for inFlags parameter of MediaIdle function */
enum {
    mMustDraw                       =       1<<3,   /* must draw now */
    mAtEnd                          =       1<<4,   /* current time
                                         corresponds to end of movie */
    mPreflightDraw                  =       1<<5    /* must not draw */
};
 
/* values for outFlags parameter of MediaIdle function */
enum {
    mDidDraw                        =       1<<0,   /* did draw */
    mNeedsToDraw                    =       1<<2    /* needs to draw */
};

Типы компонента и характеристики

/* component type and subtype values */
#define MediaHandlerType          'mhlr'    /* derived media handler */
#define BaseMediaType             'gnrc'    /* base media handler */
 
/* constants used in the characteristic parameter of the
    MediaHasCharacteristic function */
#define VisualMediaCharacteristic 'eyes'   /* visual media characteristic */
#define AudioMediaCharacteristic  'ears'   /* audio media characteristic */

Селекторы

/* selectors for derived media handler components */
enum {
    kMediaInitializeSelect              = 0x501,  /* MediaInitialize */
    /* MediaSetHandlerCapabilities */
    kMediaSetHandlerCapabilitiesSelect  = 0x502,
    kMediaIdleSelect                    = 0x503,  /* MediaIdle */
    kMediaGetMediaInfoSelect            = 0x504,  /* MediaGetMediaInfo */
    kMediaPutMediaInfoSelect            = 0x505,  /* MediaPutMediaInfo */
    kMediaSetActiveSelect               = 0x506,  /* MediaSetActive */
    kMediaSetRateSelect                 = 0x507,  /* MediaSetRate */
    kMediaGGetStatusSelect              = 0x508,  /* MediaGGetStatus */
    kMediaTrackEditedSelect             = 0x509,  /* MediaTrackEdited */
    kMediaSetMediaTimeScaleSelect       = 0x50A,  /* MediaSetMediaTimeScale */
    kMediaSetMovieTimeScaleSelect       = 0x50B,  /* MediaSetMovieTimeScale */
    kMediaSetGWorldSelect               = 0x50C,  /* MediaSetGWorld */
    kMediaSetDimensionsSelect           = 0x50D,  /* MediaSetDimensions */
    kMediaSetClipSelect                 = 0x50E,  /* MediaSetClip */
    kMediaSetMatrixSelect               = 0x50F,  /* MediaSetMatrix */
    kMediaGetTrackOpaqueSelect          = 0x510,  /* MediaGetTrackOpaque */
    kMediaSetGraphicsModeSelect         = 0x511,  /* MediaSetGraphicsMode */
    kMediaGetGraphicsModeSelect         = 0x512,  /* MediaGetGraphicsMode */
    kMediaGSetVolumeSelect              = 0x513,  /* MediaGSetVolume */
    kMediaSetSoundBalanceSelect         = 0x514,  /* MediaSetSoundBalance */
    kMediaGetSoundBalanceSelect         = 0x515,  /* MediaGetSoundBalance */
    kMediaGetNextBoundsChangeSelect   = 0x516, /* MediaGetNextBoundsChange */
    kMediaGetSrcRgnSelect               = 0x517,  /* MediaGetSrcRgn */
    kMediaPrerollSelect                 = 0x518,  /* MediaPreroll */
    /* MediaSampleDescriptionChanged */
    kMediaSampleDescriptionChangedSelect = 0x519,
    kMediaHasCharacteristicSelect       = 0x51A  /* MediaHasCharacteristic */
};

Параметры видео носителей

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

enum {
    kMediaVideoParamBrightness  = 1,
    kMediaVideoParamContrast    = 2,
    kMediaVideoParamHue         = 3,
    kMediaVideoParamSharpness   = 4,
    kMediaVideoParamSaturation  = 5,
    kMediaVideoParamBlackLevel  = 6,
    kMediaVideoParamWhiteLevel  = 7
};

Срок

Определение

kMediaVideoParamBrightness

Значение яркости управляет полной яркостью оцифрованного видеоизображения. Значения яркости колеблются от 0 до 65 535, где 0 самая темная установка, и 65,535 самая легкая установка.

kMediaVideoParamContrast

Контрастные диапазоны значений от 0 до 65 535, где 0 не представляет изменения в основном изображении и больших значениях, увеличивают контраст видеоизображения (т.е. увеличивают наклон преобразования).

kMediaVideoParamHue

Оттенок подобен управлению оттенком по телевидению. Это указано в градусах с набором дополнительных цветов, на расстоянии в 180 градусов (красный, 0 градусов, зеленый +120 градусов, и синий-120 градусов). QuickTime поддерживает значения оттенка, колеблющиеся от 0 (-180 градусов переключают оттенок на нижний регистр) к 65 535 (+179 градусов переключают оттенок на нижний регистр), где 32,767 представляет 0 градусов, переключают оттенок на нижний регистр.

kMediaVideoParamSharpness

Диапазоны значений резкости от 0 до 65 535, где 0 не представляет фильтрации резкости и 65,535, представляют полную фильтрацию резкости. Более высокие значения приводят к визуальному впечатлению от увеличенной резкости изображения

kMediaVideoParamSaturation

Степень насыщения управляет интенсивностью цвета. Например, на высоких уровнях насыщенности, красных, кажется, является красным; в низкой насыщенности, красной, кажется розовым. Допустимые степени насыщения колеблются от 0 до 65 535, где 0 минимальная степень насыщения, и 65,535 указывает максимальную насыщенность.

kMediaVideoParamBlackLevel

Уровень черного относится к степени черноты в изображении. Самая высокая установка производит все-черное изображение; с другой стороны, самая низкая установка уступает мало, если таковые имеются, черный даже с черными объектами в сцене. Уровень черного оценивает диапазон от 0 до 65 535, где 0 представляет максимальное черное значение, и 65,535 представляет минимальное черное значение.

kMediaVideoParamWhiteLevel

Уровень белого относится к степени белизны в изображении. Уровень белого оценивает диапазон от 0 до 65 535, где 0 представляет минимальное белое значение, и 65,535 представляет максимальное белое значение