2017-10-13 2 views
0

I videoToolBox zum Codieren und Decodieren von Daten verwendet haben, so, wenn wir Daten für decode bekam direkt passieren wir zu AVSampleBufferDisplayLayerVideoToolBox Dekodierungsbildanzeige OSX in Yosemite ist Flick

hier ist der Code-Schnipsel

-(CVPixelBufferRef)decode:(AVPacket*)vp { 

    CVPixelBufferRef outputPixelBuffer = NULL; 

    CMBlockBufferRef blockBuffer = NULL; 
    OSStatus status = CMBlockBufferCreateWithMemoryBlock(kCFAllocatorDefault, 
                  (void*)vp->data, vp->size, 
                  kCFAllocatorNull, 
                  NULL, 0, vp->size, 
                  0, &blockBuffer); 


    //NSLog(@"status is for CMBlockBufferCreateWithMemoryBlock is %d",(int)status); 
    if(status == kCMBlockBufferNoErr) { 
     CMSampleBufferRef sampleBuffer = NULL; 
     const size_t sampleSizeArray[] = {vp->size}; 
     status = CMSampleBufferCreateReady(kCFAllocatorDefault, 
              blockBuffer, 
              formatDesc , 
              1, 0, NULL, 1, sampleSizeArray, 
              &sampleBuffer); 
     // NSLog(@"status is for formatdesc is %d",(int)status); 
     if (status == kCMBlockBufferNoErr && sampleBuffer) { 
      CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES); 
      CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0); 
      CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue); 
      [displayLayer flush]; 
      if([displayLayer isReadyForMoreMediaData]) 
      { 
       [displayLayer enqueueSampleBuffer:sampleBuffer]; 
      } 

      [displayLayer setNeedsDisplay]; 

      [self performSelectorOnMainThread:@selector(setView:) withObject:[[RPCViewerAppInitializer sharedRPCViewerAppInitializer] rpcView] waitUntilDone:NO]; 
      CFRelease(blockBuffer); 
      CFRelease(sampleBuffer); 

     } 
    } 
    return outputPixelBuffer; 
} 

über Code funktioniert gut in 10.10 osx, aber in 10.10 bekomme ich auf dem Bildschirm flackern.

jede Hilfe wird spürbar sein.

+0

Lage Einstellung mich bekam antworten :) –

+0

was ist die Antwort? ! Fügen Sie es hier hinzu und markieren Sie es als beantwortet! –

+0

Ich setzte controlTimebase Eigenschaft von AVSampleBufferDisplayLayer auf Null, das war Grund, jetzt setze ich diese Eigenschaft überhaupt nicht –

Antwort

0

Diese Frage gelöst haben:

I controlTimebase Eigenschaft AVSampleBufferDisplayLayer auf Null einstellte, aus diesem Grund war, bin jetzt diese Eigenschaft nicht in allen

Verwandte Themen