This commit is contained in:
danil_e71
2020-07-17 13:40:03 +03:00
parent 1f7f807dfb
commit bc2782a693
10 changed files with 32950 additions and 8 deletions

View File

@@ -31,7 +31,7 @@ func CreateEncoder() (*Encoder, error) {
func (e *Encoder) Encode(image []byte, param *Param, paramImage *ParamImage) (data []byte, err error) { func (e *Encoder) Encode(image []byte, param *Param, paramImage *ParamImage) (data []byte, err error) {
size := C.int(0) size := C.int(0)
result := C.encode(e.encoder, param.param, paramImage.param, (*C.uchar)(unsafe.Pointer(&image[0])), &size) result := C.encode(e.encoder, param.param, paramImage.param, (*C.uchar)(unsafe.Pointer(&image[0])), &size)
C.fflush(C.stdout)
if size == C.int(0) { if size == C.int(0) {
return nil, errors.New("Can't encode") return nil, errors.New("Can't encode")
} }

View File

@@ -36,7 +36,7 @@ func main() {
} }
defer decoder.Free() defer decoder.Free()
decoder.SetOutput(gpujpeg.GPUJPEG_RGB, gpujpeg.GPUJPEG_420_U8_P0P1P2) //decoder.SetOutput(gpujpeg.GPUJPEG_RGB, gpujpeg.GPUJPEG_444_U8_P012)
result, err := decoder.Decode(data) result, err := decoder.Decode(data)
if err != nil { if err != nil {

View File

Before

Width:  |  Height:  |  Size: 1024 KiB

After

Width:  |  Height:  |  Size: 1024 KiB

62
example/encode/encode.go Normal file
View File

@@ -0,0 +1,62 @@
package main
import (
"fmt"
"io/ioutil"
"os"
"time"
"github.com/Danile71/go-gpujpeg"
)
const file = "test.rgb"
func main() {
err := gpujpeg.InitDevice(0)
data, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println(err)
return
}
param := gpujpeg.SetParam()
defer param.Free()
param.SetInterleaved(1)
param.SetRestartInterval(16)
param.SetColorSpaceInternal(gpujpeg.GPUJPEG_YCBCR_BT601_256LVLS)
param.SetQuality(100)
paramImage := gpujpeg.SetImageParam()
defer paramImage.Free()
paramImage.SetCompCount(3)
paramImage.SetWidth(2442)
paramImage.SetHeight(1342)
paramImage.SetColorSpace(gpujpeg.GPUJPEG_RGB)
paramImage.SetPixelFormat(gpujpeg.GPUJPEG_U8)
// param.SetSamplingFactor(0, 4, 4)
// param.SetSamplingFactor(1, 2, 1)
// param.SetSamplingFactor(2, 2, 1)
start := time.Now()
defer func() {
fmt.Println("result", time.Since(start))
}()
encoder, err := gpujpeg.CreateEncoder()
if err != nil {
fmt.Println(err)
return
}
defer encoder.Free()
result, err := encoder.Encode(data, param, paramImage)
if err != nil {
fmt.Println(err)
return
}
ioutil.WriteFile("result.jpeg", result, os.ModePerm)
}

32880
example/encode/test.rgb Executable file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@@ -58,8 +58,8 @@ func (p *Param) SetInterleaved(i int) {
p.param.interleaved = C.int(i) p.param.interleaved = C.int(i)
} }
func (p *Param) SetColorSpaceInternal(c uint32) { func (p *Param) SetColorSpaceInternal(c ColorSpace) {
p.param.color_space_internal = c p.param.color_space_internal = uint32(c)
} }
func (p *Param) SetQuality(q int) { func (p *Param) SetQuality(q int) {

View File

@@ -14,12 +14,12 @@ gogpujpeg_encoder create_encoder() {
return gpujpeg_encoder_create(0); return gpujpeg_encoder_create(0);
} }
uint8_t * encode(gogpujpeg_encoder encoder,gogpujpeg_parameters param, gogpujpeg_image_parameters param_image,uint8_t* data ,int *image_compressed_size) { uint8_t * encode(struct gpujpeg_encoder *encoder,gogpujpeg_parameters param, gogpujpeg_image_parameters param_image,uint8_t* data ,int *image_compressed_size) {
uint8_t* image_compressed = NULL; uint8_t* image_compressed = NULL;
gpujpeg_encoder_input encoder_input; gpujpeg_encoder_input encoder_input;
gpujpeg_encoder_input_set_image(&encoder_input, data); gpujpeg_encoder_input_set_image(&encoder_input, data);
if (gpujpeg_encoder_encode(encoder, param, param_image, &encoder_input, &image_compressed,
image_compressed_size) != 0) { if (gpujpeg_encoder_encode(encoder, param, param_image, &encoder_input, &image_compressed, image_compressed_size) != 0) {
} }
return image_compressed; return image_compressed;
} }

View File

@@ -29,5 +29,5 @@ void free_gpujpeg_parameters(gogpujpeg_parameters p);
gogpujpeg_image_parameters malloc_gpujpeg_image_parameters(); gogpujpeg_image_parameters malloc_gpujpeg_image_parameters();
void free_gpujpeg_image_parameters(gogpujpeg_image_parameters p); void free_gpujpeg_image_parameters(gogpujpeg_image_parameters p);
uint8_t * encode(gogpujpeg_encoder encoder,gogpujpeg_parameters param, gogpujpeg_image_parameters param_image,uint8_t* data ,int *image_compressed_size); uint8_t * encode(struct gpujpeg_encoder *encoder,gogpujpeg_parameters param, gogpujpeg_image_parameters param_image,uint8_t* data ,int *image_compressed_size);
#endif /* WRAPPER_H */ #endif /* WRAPPER_H */