Decode h264 frame using android hardware accelerated decoder in gstreamer

50 views Asked by At

I am trying to make a pipeline to get h264 encoded stream using gstreamer with hardware encoding. Below is that working pipeline:

"ahcsrc ! capsfilter caps=video/x-raw,width=1280,height=720,format=YV12,framerate=30/1 "
           "! videoconvert "
           "! amcvidenc-c2mtkavcencoder bitrate=6000000 i-frame-interval=2 "
           "! h264parse "
           "! tee name=t t. ! queue "
           "! splitmuxsink muxer-factory=matroskamux name=splitmuxsink "
           "! openslessrc "
           "! audioconvert "
           "! voaacenc "
           "! splitmuxsink.audio_0 t. ! queue "
           "! appsink name=thumbnail-sink drop=1"

Now from appsink I need to capture a frame to get jpeg image by decoding that encoded stream. Below below option for appsrc element worked to capture buffer, but I could not use hardware decoder inside android gstreamer.

gchar *string = NULL;
    GError *appsrcError = NULL;
    string = g_strdup_printf ("appsrc name=appsrcth "
                              "! amcviddec-c2mtkavcdecoder "
                              "! identity dump=1 "
                              "! filesink location=/sdcard/DCIM/video/a.mp4"

    );
    data->thumbnail_appsrc = gst_parse_launch (string, &appsrcError);
    g_free (string);

    GstElement * appsrcTh = gst_bin_get_by_name (GST_BIN (data->thumbnail_appsrc), "appsrcth");
    /* configure for time-based format */
    g_assert(appsrcTh);
    if (appsrcTh != NULL) {
        g_object_set (appsrcTh, "format", GST_FORMAT_TIME, NULL);
        /* uncomment the next line to block when appsrc has buffered enough */
        /*g_object_set (appsrcTh, "block", TRUE, NULL);*/
        g_signal_connect (appsrcTh, "need-data", G_CALLBACK (start_feed), data);
        g_signal_connect (appsrcTh, "enough-data", G_CALLBACK (stop_feed), data);
    }

It is throwing below error:

gst_video_decoder_chain:<amcvideodec-c2mtkavcdecoder0> error: decoder not initialized

Can anyone help me how to use android hardware decoder to decode h264 frame buffer.

I tried to use hardware decoder in android gstreamer. below is hardware decoder element name for gstreamer. amcviddec-c2mtkavcdecoder

0

There are 0 answers