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