2013-11-04 4 views
0

I가 제공되는 버퍼가이 크기 요구보다 크고 때문에 그러나 파이 게임 충돌이 코드를 실행하는 경우 잘못된 버퍼 길이 gstreamer를

def __handle_videoframe(self, appsink): 
    """ 
    Callback method for handling a video frame 

    Arguments: 
    appsink -- the sink to which gst supplies the frame (not used) 
    """ 

    buffer = self._videosink.emit('pull-buffer')  
    (w,h) = buffer.get_caps[0]["width"],buffer.get_caps[0]["height"] 

    reqBufferLength = w * h * 3 #Required buffer lenght for a raw rgb image of these dimensions  
    print "Buffer length: " + str(len(buffer.data)) 
    print "Needed length: " + str(reqBufferLength)   

    img = pygame.image.frombuffer(buffer.data, self.vidsize, "RGB")  
    self.screen.blit(img, self.vidPos)  
    pygame.display.flip() 

있는 GStreamer

의해 공급 된 비디오 프레임을 포함하는 버퍼 객체를 처리하는 다음 함수 일치해야합니다. 나는 이것이 (아마도 대부분의 영화가 잘 돌아가는 것처럼) 재생되는 영화의 잘못된 인코딩으로 인한 것임을 알고 있습니다. 그러나이 우발 사건을 설명 할 방법이 있습니까? 올바른 크기로 버퍼의 크기를 조정하는 방법이 있습니까? 필요한 길이로 버퍼의 꼬리를 자르려고 시도한 다음 영화가 재생되지만 출력이 손상됩니다.

답변

0

좋습니다. 더 나은 해결 방법은 bufferproxies를 사용하는 것입니다. 그들은 버퍼의 길이에 대해 덜 퍼지다. 각각의 새로운 프레임 그런

img_sfc = pygame.Surface(video_dimensions, pygame.SWSURFACE, 24, (255, 65280, 16711680, 0)) 
img_buffer = img_sfc.get_buffer() 

:

img_buffer.write(buffer.data, 0) 
pygame.display.get_surface().blit(img_sfc.copy(), vid_pos) 

그리고는 짜잔, 심지어 잘못된 형식의 버퍼 문제

없이 화면에 표시
관련 문제