Поле получения Programatically и информация о кадрах
Q: Как я могу программно узнать, чередуются ли видео носители в фильме в формате QuickTime или прогрессивное сканирование?
A: Как я могу программно узнать, чередуются ли видео носители в фильме в формате QuickTime или прогрессивное сканирование?
Поле/Информация о кадрах для Носители сохранены в Описании Изображения и могут быть возвращены путем вызова ICMImageDescriptionGetProperty использование kICMImageDescriptionPropertyID_FieldInfo свойство ID.
Выяснение kICMImageDescriptionPropertyID_FieldInfo свойство возвратит информацию (при наличии) в a FieldInfoImageDescriptionExtension2 структура (см. ниже). fields переменная этой структуры будет или установлена в kQTFieldsProgressiveScan если содержание является прогрессивным, или kQTFieldsInterlaced если это чередуется.
/* Field/Frame Info */
struct FieldInfoImageDescriptionExtension2 {
UInt8 fields;
UInt8 detail;
};
/* Field Info Values */
enum {
kQTFieldsProgressiveScan = 1,
kQTFieldsInterlaced = 2
};
/* Frame Detail Values */
enum {
kQTFieldDetailUnknown = 0,
kQTFieldDetailTemporalTopFirst = 1,
kQTFieldDetailTemporalBottomFirst = 6,
kQTFieldDetailSpatialFirstLineEarly = 9,
kQTFieldDetailSpatialFirstLineLate = 14
}; |
Перечисление 1 демонстрирует использование ICMImageDescriptionGetProperty получить информацию Поля/Кадра.
Перечисление 1 функция IsInterlaced.
Boolean IsInterlaced(Track inVideoTrack)
{
Media aMedia = 0;
Boolean isInterlaced = NO; // assume progressive
FieldInfoImageDescriptionExtension2 *fieldInfo = NULL;
ImageDescriptionHandle desc = NULL;
if (0 == inVideoTrack) goto bail;
// get the tracks media
aMedia = GetTrackMedia(inVideoTrack);
if (0 == aMedia) goto bail;
// grab the image description
desc = (ImageDescriptionHandle)NewHandle(0);
if (NULL == desc) goto bail;
GetMediaSampleDescription(aMedia, 1, (SampleDescriptionHandle)desc);
// get the size of the returned property
ByteCount propertyValueSize = 0;
ComponentValueType propertyType = 0;
UInt32 propertyFlags = 0;
OSStatus status = ICMImageDescriptionGetPropertyInfo(desc,
kQTPropertyClass_ImageDescription,
kICMImageDescriptionPropertyID_FieldInfo,
&propertyType,
&propertyValueSize,
&propertyFlags);
if (noErr != status) goto bail;
// get the FieldInfo property - for more information see ImageCodec.h
fieldInfo = (FieldInfoImageDescriptionExtension2 *)calloc(1, propertyValueSize);
status = ICMImageDescriptionGetProperty(desc,
kQTPropertyClass_ImageDescription,
kICMImageDescriptionPropertyID_FieldInfo,
propertyValueSize,
fieldInfo,
NULL);
// check the value
if (noErr == status) {
isInterlaced = (fieldInfo->fields == kQTFieldsInterlaced);
}
bail:
if (NULL != desc) DisposeHandle((Handle)desc);
if (NULL != fieldInfo) free(fieldInfo);
return isInterlaced;
} |
Ссылки
История версии документа
| Дата | Примечания |
|---|---|
| 13.09.2007 | Новый документ, обсуждающий использование kICMImageDescriptionPropertyID_FieldInfo свойства для получения Поля/Информации о кадрах. |