Skip to content
This repository was archived by the owner on Sep 6, 2023. It is now read-only.
This repository was archived by the owner on Sep 6, 2023. It is now read-only.

Appsink memory leaks #112

@GoogleCodeExporter

Description

@GoogleCodeExporter
What steps will reproduce the problem?

//                   __ queue -> appsink (parse time stamp)
//                  /                                                           

                   __ queue -> xvimagesink (display stream)            
// httpsrc -> tee ->                                                            

                  /                                  __>>>> fakesink  [whenever 
not saving]
//                  \__ queue -> multipartdemux (dynamic pads) -> jpegdec -> 
ffmpegcolorspace -> autovideosink

  source.set("location", source_url);
                appsink.set("emit-signals", true);
                appsink.set("max-buffers", 1);
                appsink.set("drop", true); //Make this non-blocking. Meaning drop frames when queue is full
                appsink.set("sync", false);
...
...
...
...


   appsink.connect(new AppSink.NEW_BUFFER() {

                    @Override
                    public void newBuffer(AppSink as) {
                        // long seconds = appsink.getClock().getTime().getSeconds();
                        // System.out.print(seconds);

                        Buffer buffer = as.pullBuffer(); //.pullPreroll();



                        // Create a character ByteBuffer
                        CharBuffer cbuf = byteBuffer.asCharBuffer();


                        ByteBuffer byteBuffer = buffer.getByteBuffer();
                        byte[] bytearray = new byte[byteBuffer.remaining()];
                        byteBuffer.get(bytearray);
                        String strBuffer = new String(bytearray);
                        //InputStream is = new ByteArrayInputStream(bytearray);
                        // System.out.print(buffer.getSize()+"\n");
                        //  System.out.print(s+"\n");
                        /Pattern p = Pattern.compile("Date_time:");

                        try {

                        if (s != null) {
                        Matcher m = p.matcher(s);
                        if (m.find()) {
                        //System.out.println(is);
                        String[] result = p.split(s);
                        //System.out.printf("result = %s\n",result[1]);

                        //Pattern ts = Pattern.compile("[,\\-\\:\\.\\^TZ\\s]+");
                        Pattern ts = Pattern.compile("[\\-\\:\\.\\s]+");
                        Matcher m_ts = ts.matcher(result[1]);
                        if (m_ts.find()) {
                        String[] ts_str = ts.split(result[1]);
                        for (int i = 0; i < ts_str.length; i++) // System.out.printf("ts_str[%d]=%s\n",i,ts_str[i]);
                        {
                        //if (ts_str.length == 10) {
                        System.out.printf("\nDay=%s,", ts_str[1]);
                        System.out.printf("DD=%s,", ts_str[2]);
                        System.out.printf("MM=%s,", ts_str[3]);
                        System.out.printf("YYYY=%s,", ts_str[4]);
                        System.out.printf("HH=%s,", ts_str[5]);
                        System.out.printf("MM=%s,", ts_str[6]);
                        System.out.printf("SS=%s,", ts_str[7]);
                        System.out.printf("SSSSSS=%s", ts_str[8]);
                        System.out.printf("LocalTime=%s\n", ts_str[9]);


                        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZZZZ");
                        Date gmt = formatter.parse(ts_str[4]+"-"+ts_str[3]+"-"+ts_str[2]
                        +"T"+ts_str[5]+":"+ts_str[6]+":"+ts_str[7]+"+"+"0000");//"2011-07-19T18:23:20+0000"); ts_str[8].substring(0, 4)
                        long millisecondsSinceEpoch0 = gmt.getTime()/1000;
                        String asString = formatter.format(gmt);
                        System.out.printf(" ===== %s and \n ", asString); 
                        System.out.print(millisecondsSinceEpoch0);
                        // }
                        }

                        }
                        }

                        }

                        } catch (Exception e) {
                        System.out.println("Exception: " + e);
                        }



                        // Stream example: 

                        //Date_time: TUE:24-01-2012 18:03:10 203 LT 

                        int header_idx = strBuffer.indexOf(dateHeaderKey);
                        System.out.printf("header_idx:%s\n", header_idx);
                        if (header_idx != -1) {
                            int date_start = header_idx + dateHeaderKey.length();
                            int lt_idx = dateFormat.length();//strBuffer.indexOf(dateEndKey, date_start);
                            System.out.printf("lt_idx:%s\n", lt_idx);
                            if (lt_idx != -1) {
                                int date_end = date_start + lt_idx;
                                System.out.printf("date start: %s, end %s\n", date_start, date_end);
                                String dateStr = strBuffer.substring(date_start, date_end);
                                try {
                                    dateFormatter = new SimpleDateFormat(dateFormat);
                                    Date frameTime = dateFormatter.parse(dateStr);
                                    long millisecondsSinceEpoch0 = frameTime.getTime() / 1000;
                                    System.out.printf("date: %s\n", frameTime);
                                    System.out.printf("time: %d\n", millisecondsSinceEpoch0);
                                } catch (ParseException ex) {
                                    System.out.printf("Failed to parse: %s\n", dateStr);
                                }
                            }
                        }

                        byteBuffer.clear();
                        buffer.dispose();
                        buffer = null;

                        as = null;
                        byteBuffer = null;
                    }
                });

What is the expected output? What do you see instead?

Memory keeps increasing minute by minute

Have you tried to verify this is a gstreamer-java specific issue, and not a
problem with the gstreamer framework itself?
yes.

What version of the product are you using? On what operating system?
1.5

Please provide any additional information below.

Original issue reported on code.google.com by enthusia...@gmail.com on 12 Sep 2012 at 9:39

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions