Community
cancel
Showing results for 
Search instead for 
Did you mean: 
vikingsooner
Beginner
117 Views

JPEG_INTERNAL_ERROR Encoder.cs

Jump to solution
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 Solution
Vladimir_Dudnik
Employee
117 Views
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

View solution in original post

7 Replies
Vladimir_Dudnik
Employee
117 Views
How do you call IPP JPEG encoder? What are the parameters you are using?

Vladimir
vikingsooner
Beginner
117 Views
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
Employee
117 Views
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
Beginner
117 Views
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
Beginner
117 Views
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
Employee
118 Views
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

View solution in original post

vikingsooner
Beginner
117 Views
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.
Reply