Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

JPEG_INTERNAL_ERROR Encoder.cs

vikingsooner
Principiante
1.197 Visualizações
Every oncein a while Iam getting a JPEG_INTERNAL_ERROR on the WriteImageBaseline method. Is this because my buffer is smaller than what it needs? I have it set to the origonal image size.

- Matt
0 Kudos
1 Solução
Vladimir_Dudnik
Funcionário
1.197 Visualizações
it seems you have integrated code from sample to your own application. Please make sure .NET garbage collector can't move memory accessed in native IPP functions (mean you correctly use 'fixed' and 'unsafe' keywords). I have no other ideas on this issue. We can't reproduce it with our sample

Vladimir

Ver solução na publicação original

7 Respostas
Vladimir_Dudnik
Funcionário
1.197 Visualizações
How do you call IPP JPEG encoder? What are the parameters you are using?

Vladimir
vikingsooner
Principiante
1.197 Visualizações
Quoting - Vladimir Dudnik
How do you call IPP JPEG encoder? What are the parameters you are using?

Vladimir

[c-sharp]public static byte[] JPEGEncode(Bitmap image, int quality)
        {
            ExampleIP.JPEGEncoder encoder = new ExampleIP.JPEGEncoder();
            BitmapData imageData = image.LockBits(new Rectangle(0,0,image.Width,image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            byte[] trimmedArray = null;

            try
            {
                byte[] compressedJPEG = new byte[imageData.Stride * imageData.Height];
                int realSize = 0;
                ExampleIP.JERRCODE error = ExampleIP.JERRCODE.JPEG_OK;
                error = encoder.SetSource((byte*)imageData.Scan0, imageData.Stride, new IppiSize(image.Width, image.Height), 3, ExampleIP.JCOLOR.JC_BGR);
                ThrowExceptionForJPEGError(error);
                error = encoder.SetDestination(ref compressedJPEG, imageData.Stride * image.Height,
                    quality, ExampleIP.JSS.JS_411, ExampleIP.JCOLOR.JC_YCBCR, ExampleIP.JMODE.JPEG_BASELINE, 0);
                ThrowExceptionForJPEGError(error);
                error = encoder.WriteImageBaseline(ref realSize);
                ThrowExceptionForJPEGError(error);
                trimmedArray = new byte[realSize];

                Array.Copy(compressedJPEG, trimmedArray, realSize);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
            finally
            {
                image.UnlockBits(imageData);
            }

            return trimmedArray;
        }[/c-sharp]
Vladimir_Dudnik
Funcionário
1.197 Visualizações
What version of IPP do you use and are you using JPEG C# sample we provide in IPP sample package or you develop this code by your own? Could you please try the same image with original IPP sample?

Regards,
Vladimir
vikingsooner
Principiante
1.197 Visualizações
Quoting - Vladimir Dudnik
What version of IPP do you use and are you using JPEG C# sample we provide in IPP sample package or you develop this code by your own? Could you please try the same image with original IPP sample?

Regards,
Vladimir

I'm actually using the encoder.cs you guys provided in the JPEG C# sample. I don't get JPEG_INTERNAL_ERROR on every frame of video I compress just every once in a while I get that error.
vikingsooner
Principiante
1.197 Visualizações
Quoting - Vladimir Dudnik
What version of IPP do you use and are you using JPEG C# sample we provide in IPP sample package or you develop this code by your own? Could you please try the same image with original IPP sample?

Regards,
Vladimir

I'm also using Version 6 Update 1 of the library.
Vladimir_Dudnik
Funcionário
1.198 Visualizações
it seems you have integrated code from sample to your own application. Please make sure .NET garbage collector can't move memory accessed in native IPP functions (mean you correctly use 'fixed' and 'unsafe' keywords). I have no other ideas on this issue. We can't reproduce it with our sample

Vladimir

vikingsooner
Principiante
1.197 Visualizações
Quoting - Vladimir Dudnik
it seems you have integrated code from sample to your own application. Please make sure .NET garbage collector can't move memory accessed in native IPP functions (mean you correctly use 'fixed' and 'unsafe' keywords). I have no other ideas on this issue. We can't reproduce it with our sample

Vladimir


Your right. I found some errors in the encoder.cs file in the example. I've fixed them and attached the file. I'm also working on fixing the decoder.cs memory issues too.
Responder