[Bug 767642] g-log: We got a g_log critical issue : gst_caps_is_equal: assertion 'GST_IS_CAPS (caps1)' failed

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Fri Jun 17 09:07:48 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=767642

yvonne.chen <1992184780 at qq.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|NOTGNOME                    |---

--- Comment #6 from yvonne.chen <1992184780 at qq.com> ---
Thanks for your attention,slomo.  I reopen it first for your attention.  I am
not so familiar with the buffer handling.  Maybe the following codes related? 
Please take a moment help me to find it out.My project is blocked by it. Thanks
if (gst_structure_has_field(structure, "codec_data")) {
    extra_data_buf = (GValue *) gst_structure_get_value(structure,
"codec_data");

if (extra_data_buf) {
    info->configdata = gst_buffer_copy(gst_value_get_buffer(extra_data_buf));
            AML_DUMP_BUFFER(info->configdata, "Audio Codec Data");
    }
}
====================
int extract_adts_header(StreamInfo *info,codec_para_t *pcodec, GstBuffer
*buffer)
{
    adts_header_t hdr;
    guint8 *p = NULL;
    guint8 *buf;
    GstMapInfo map;
    if (info->configdata) {
        gst_buffer_map(info->configdata, &map, GST_MAP_READ);
        p = map.data;
        hdr.profile = (*p >> 3) - 1;                  
        hdr.sample_freq_idx = (*p & 0x7) << 1 | (*(p + 1) >> 7);                
        hdr.channel_configuration = (*(p + 1) & 0x7f) >> 3;                    
        gst_buffer_unmap(info->configdata, &map);
    } else {
        return 0;
    }

    hdr.syncword = 0xfff;
    hdr.id = 0;
    hdr.layer = 0;
    hdr.protection_absent = 1;
    hdr.private_bit = 0;
    hdr.original_copy = 0;
    hdr.home = 0;
    hdr.copyright_identification_bit = 0;
    hdr.copyright_identification_start = 0;
    hdr.aac_frame_length = 0;
    hdr.adts_buffer_fullness = 0x7ff;

    gst_buffer_map(buffer, &map, GST_MAP_WRITE);
    buf = map.data;
    if (buf) {
        buf[0] = (char) (hdr.syncword >> 4);
        buf[1] = (char) ((hdr.syncword & 0xf << 4) ;
        buf[2] = (char) ((hdr.profile << 6) ;
        buf[3] = (char) (((hdr.channel_configuration & 0x3) << 6));
        buf[4] = (char) ((hdr.aac_frame_length >> 3) & 0xff);
        buf[5] = (char) (((hdr.aac_frame_length & 0x7) << 5);
        buf[6] = (char) (((hdr.adts_buffer_fullness & 0x3f) << 2);

        gst_buffer_unmap(buffer, &map);

        gst_buffer_unref(info->configdata);

        info->configdata = gst_buffer_copy(buffer);

        gst_buffer_set_size(info->configdata, ADTS_HEADER_SIZE);


    } else {        
        return -1;
    }

    return 0;
}
=================================
gint adts_startcode(StreamInfo* info, codec_para_t *pcodec, GstBuffer *buffer)
{
    gint8 *buf ;
    int i;
    int size = ADTS_HEADER_SIZE + gst_buffer_get_size(buffer);   // 13bit valid
    size &= 0x1fff;
    guint8 *adts_header=NULL;
    GstBuffer *buffer1;
    GstMapInfo map;
    if (!info->configdata) {
        return 0;
    }

    while (buffer&&gst_buffer_get_size(buffer)>=ADTS_HEADER_SIZE) {
        buffer1 = gst_buffer_new_and_alloc(ADTS_HEADER_SIZE);
        if (buffer1) {
            gst_buffer_copy_into(buffer1, buffer, GST_BUFFER_COPY_DEEP, 0,
ADTS_HEADER_SIZE);
            gst_buffer_map(buffer1, &map, GST_MAP_READ);
            adts_header=map.data;
            //gst_buffer_unmap(buffer1, &map);

        if (((adts_header[0] << 4) != 0xFFF)     
            break;
        if (((*(adts_header + 4) & 0xFF) << 3))    
            break;
        }
        else  break;
        GST_WARNING(" AAC es has adts header,don't add again");

        gst_buffer_unmap(buffer1, &map);
        if(adts_header){
            gst_buffer_unref(buffer1);
             buffer1=NULL;
        }        
        return 0; 
    }


    if(adts_header){
        gst_buffer_unmap(buffer1, &map);    
        gst_buffer_unref(buffer1);
        buffer1=NULL;
    }

    gst_buffer_map(info->configdata, &map, GST_MAP_WRITE);
      buf = map.data;
    if (buf!=NULL) {
        buf[3] = (buf[3] & 0xfc) | (size >> 11);
        buf[4] = (size >> 3) & 0xff;
        buf[5] = ((size & 0x7) << 5);

        if ( gst_buffer_get_size(info->configdata) == ADTS_HEADER_SIZE) {
            codec_write(pcodec,buf,gst_buffer_get_size(info->configdata));
            }
    }
      gst_buffer_unmap(info->configdata, &map);

    return 0;
}

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list