I use the following code to create a video from a sequence of images stored into an array (takenImages). Duration is the frame duration in seconds.
Everything is then saved to library.
My problem is that if I run with debugger on, the video is saved perfectly but if I run without debugger the video is not saved entirely (just the first frames were saved).
int timescale = duration * [takenImages count];
for (int i = 0; i < [takenImages count]; i++) {
CVPixelBufferRef buffer = NULL;
buffer = [self pixelBufferFromCGImage:[[takenImages objectAtIndex:i] CGImage]];
BOOL append_ok = NO;
int j = 0;
while (!append_ok && j < 30) {
if (adaptor.assetWriterInput.readyForMoreMediaData) {
printf("appending %d attemp %d\n", i, j);
append_ok = [adaptor appendPixelBuffer:buffer withPresentationTime:CMTimeMake(i*duration,timescale)];
} else {
printf("adaptor not ready %d, %d\n", i, j);
[NSThread sleepForTimeInterval:0.1];
}
j++;
}
if (!append_ok) {
printf("error appending image %d times %d\n", i, j);
}
}
this is an example of what I have in console after running (debugger off):
appending 0 attemp 0
appending 1 attemp 0
adaptor not ready 2, 0
adaptor not ready 2, 1
adaptor not ready 2, 2
adaptor not ready 2, 3
adaptor not ready 2, 4
adaptor not ready 2, 5
adaptor not ready 2, 6
adaptor not ready 2, 7
adaptor not ready 2, 8
adaptor not ready 2, 9
adaptor not ready 2, 10
adaptor not ready 2, 11
adaptor not ready 2, 12
adaptor not ready 2, 13
adaptor not ready 2, 14
adaptor not ready 2, 15
adaptor not ready 2, 16
adaptor not ready 2, 17
adaptor not ready 2, 18
adaptor not ready 2, 19
adaptor not ready 2, 20
adaptor not ready 2, 21
adaptor not ready 2, 22
adaptor not ready 2, 23
adaptor not ready 2, 24
adaptor not ready 2, 25
adaptor not ready 2, 26
adaptor not ready 2, 27
adaptor not ready 2, 28
adaptor not ready 2, 29
error appending image 2 times 30
adaptor not ready 3, 0
adaptor not ready 3, 1
adaptor not ready 3, 2
adaptor not ready 3, 3
adaptor not ready 3, 4
adaptor not ready 3, 5
adaptor not ready 3, 6
adaptor not ready 3, 7
adaptor not ready 3, 8
adaptor not ready 3, 9
adaptor not ready 3, 10
adaptor not ready 3, 11
adaptor not ready 3, 12
adaptor not ready 3, 13
adaptor not ready 3, 14
adaptor not ready 3, 15
adaptor not ready 3, 16
adaptor not ready 3, 17
adaptor not ready 3, 18
adaptor not ready 3, 19
adaptor not ready 3, 20
adaptor not ready 3, 21
adaptor not ready 3, 22
adaptor not ready 3, 23
adaptor not ready 3, 24
adaptor not ready 3, 25
adaptor not ready 3, 26
adaptor not ready 3, 27
adaptor not ready 3, 28
adaptor not ready 3, 29
error appending image 3 times 30
adaptor not ready 4, 0
adaptor not ready 4, 1
adaptor not ready 4, 2
adaptor not ready 4, 3
adaptor not ready 4, 4
adaptor not ready 4, 5
adaptor not ready 4, 6
adaptor not ready 4, 7
adaptor not ready 4, 8
adaptor not ready 4, 9
adaptor not ready 4, 10
adaptor not ready 4, 11
adaptor not ready 4, 12
adaptor not ready 4, 13
adaptor not ready 4, 14
adaptor not ready 4, 15
adaptor not ready 4, 16
adaptor not ready 4, 17
adaptor not ready 4, 18
adaptor not ready 4, 19
adaptor not ready 4, 20
adaptor not ready 4, 21
adaptor not ready 4, 22
adaptor not ready 4, 23
adaptor not ready 4, 24
adaptor not ready 4, 25
adaptor not ready 4, 26
adaptor not ready 4, 27
adaptor not ready 4, 28
adaptor not ready 4, 29
error appending image 4 times 30
Any suggestion?
Thanks a lot in advance.
bye
Tommaso
try this when setting the buffers.
[adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
if(buffer)
CVBufferRelease(buffer);
[NSThread sleepForTimeInterval:0.05];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With