перекрытие 2 QTDeviceInput в том же представлении - PullRequest
0 голосов
/ 18 августа 2011

Я программирую приложение какао, которое может редактировать потоковое видео с разных QTDeviceInputs. В этот момент я могу легко отобразить 2 QtDeviceInputs в 2 разных QTCaptureView, но мне интересно, возможно ли перекрывать (возможно, с прозрачностью) потоки из внешних кулачков в одном представлении. Какой вид я должен использовать для перекрытия видеопотоков? Как я могу перекрывать эти 2 видеопотока?

Я думаю, что должен использовать OpenGlView, но я никогда не использовал его, и мне интересно, есть ли более простой способ сделать это.


Я пытался создать 2 QTCaptureLayer следующим образом:

layer1=[[QTCaptureLayer alloc]initWithSession:session1];
layer2=[[QTCaptureLayer alloc]initWithSession:session2];

, где session1 и session2 - это 2 QTCaptureSession, которые я использую для отображения 2 QTDeviceInput. Чем я добавил слои в NSView:

 [[myView layer] addSublayer:layer1];

но ничего не изменилось. Я создал NSView "myView" в конструкторе интерфейсов и связал его с владельцем файла. Я также попытался нарисовать простой CALayer и добавить его в myView:

CALayer *layer = [CALayer layer];

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1.0f);
layer.borderColor=CGColorCreateGenericRGB(100,100,100,1.0f);
layer.borderWidth=4.0;

NSRect rect = NSMakeRect(0, 0, 1000, 1000);

layer.frame = NSRectToCGRect(rect);
layer.cornerRadius = rect.size.height/5;

// Insert the layer into the root layer
[[myView layer] addSublayer:layer];

но ничего не случилось. NSView не изменился! Что я делаю не так?


Я попытался создать 2 QTCaptureLayer следующим образом:

layer1=[[QTCaptureLayer alloc]initWithSession:session1];
layer2=[[QTCaptureLayer alloc]initWithSession:session2];

, где session1 и session2 - это 2 QTCaptureSession, которые я использую для отображения 2 QTDeviceInput. Чем я добавил слои в NSView:

 [[myView layer] addSublayer:layer1];

но ничего не изменилось. Я создал NSView "myView" в конструкторе интерфейсов и связал его с владельцем файла. Я также попытался нарисовать простой CALayer и добавить его в myView:

CALayer *layer = [CALayer layer];

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1.0f);
layer.borderColor=CGColorCreateGenericRGB(100,100,100,1.0f);
layer.borderWidth=4.0;

NSRect rect = NSMakeRect(0, 0, 1000, 1000);

layer.frame = NSRectToCGRect(rect);
layer.cornerRadius = rect.size.height/5;

// Insert the layer into the root layer
[[myView layer] addSublayer:layer];

но ничего не произошло. NSView не изменился! Что я делаю не так?

1 Ответ

0 голосов
/ 19 августа 2011

Если я правильно понимаю вашу проблему, нет необходимости прибегать к OpenGLView:

Существует класс под названием QTCaptureLayer, который должен позволить вам достичь того, чего вы хотите. Все, что вам нужно, это NSView, поддерживаемый слоем, к которому вы можете добавить свои слои захвата в качестве подслоев.

Для смешивания и аналогичных целей вы можете использовать свойства opacity, mask или compositingFilter захватывающих слоев - в зависимости от того, какого эффекта вы хотите достичь.

...