Skip to content
This repository was archived by the owner on Oct 31, 2022. It is now read-only.

Commit d632a0b

Browse files
committed
Don't slice-encode with encoders which don't benefit from it
1 parent 39f6911 commit d632a0b

File tree

5 files changed

+26
-9
lines changed

5 files changed

+26
-9
lines changed

source/DXTEncoder.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ struct HapCodecDXTEncoder {
6767
HapCodecDXTEncoder_DescribeFunction describe_function;
6868
#endif
6969
Boolean pad_source_buffers;
70+
Boolean can_slice;
7071
};
7172

7273
#define HapCodecDXTEncoderDestroy(x) if ((x) && (x)->destroy_function) (x)->destroy_function((x))

source/GLDXTEncoder.c

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ HapCodecDXTEncoderRef HapCodecGLEncoderCreate(unsigned int width, unsigned int h
125125
encoder->base.pixelformat_function = HapCodecGLEncoderWantedPixelFormat;
126126
encoder->base.encode_function = HapCodecGLEncoderEncode;
127127
encoder->base.pad_source_buffers = true;
128+
encoder->base.can_slice = false;
128129

129130
encoder->queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
130131
encoder->encoder = HapCodecGLCreateEncoder(width, height, encoder_format);

source/HapCompressor.c

+22-9
Original file line numberDiff line numberDiff line change
@@ -692,15 +692,17 @@ static void Encode_Slice(void *p, unsigned int index)
692692
}
693693
}
694694

695-
// Encode the DXT frame
696-
697-
task->encoder->encode_function(task->encoder,
698-
dxtInput,
699-
task->dxtInputBytesPerRow,
700-
task->dxtInputFormat,
701-
dxt,
702-
task->width,
703-
sliceHeight);
695+
if (task->encoder->can_slice)
696+
{
697+
// Encode the DXT frame
698+
task->encoder->encode_function(task->encoder,
699+
dxtInput,
700+
task->dxtInputBytesPerRow,
701+
task->dxtInputFormat,
702+
dxt,
703+
task->width,
704+
sliceHeight);
705+
}
704706
}
705707

706708
static void Background_Encode(void *info)
@@ -932,6 +934,17 @@ Hap_CEncodeFrame(
932934

933935
HapParallelFor(Encode_Slice, &dxtTask, glob->sliceCount);
934936

937+
if (dxtTask.encoder->can_slice == false)
938+
{
939+
dxtTask.encoder->encode_function(dxtTask.encoder,
940+
dxtTask.dxtInput,
941+
dxtTask.dxtInputBytesPerRow,
942+
dxtTask.dxtInputFormat,
943+
dxtTask.dxt,
944+
dxtTask.width,
945+
dxtTask.height);
946+
}
947+
935948
CVPixelBufferUnlockBaseAddress(sourcePixelBuffer, kHapCodecCVPixelBufferLockFlags);
936949

937950
// Detach the sourceFrame as soon as we are finished with it

source/SquishEncoder.c

+1
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ HapCodecDXTEncoderRef HapCodecSquishEncoderCreate(HapCodecSquishEncoderQuality q
192192
encoder->base.encode_function = HapCodecSquishEncoderEncode;
193193
encoder->base.destroy_function = HapCodecSquishEncoderDestroy;
194194
encoder->base.pad_source_buffers = false;
195+
encoder->base.can_slice = true;
195196

196197
switch (quality) {
197198
case HapCodecSquishEncoderWorstQuality:

source/YCoCgDXTEncoder.c

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ HapCodecDXTEncoderRef HapCodecYCoCgDXTEncoderCreate(void)
7373
encoder->describe_function = HapCodecYCoCgDXTEncoderDescribe;
7474
#endif
7575
encoder->pad_source_buffers = false;
76+
encoder->can_slice = true;
7677
}
7778
return encoder;
7879
}

0 commit comments

Comments
 (0)