diff --git a/sys/androidmedia/gstamc-codec.h b/sys/androidmedia/gstamc-codec.h index 984dcc5151..0f57802be9 100644 --- a/sys/androidmedia/gstamc-codec.h +++ b/sys/androidmedia/gstamc-codec.h @@ -50,10 +50,10 @@ void gst_amc_buffer_free (GstAmcBuffer * buffer); gboolean gst_amc_buffer_set_position_and_limit (GstAmcBuffer * buffer, GError ** err, gint position, gint limit); -GstAmcCodec * gst_amc_codec_new (const gchar *name, GError **err); +GstAmcCodec * gst_amc_codec_new (const gchar *name, gboolean is_encoder, GError **err); void gst_amc_codec_free (GstAmcCodec * codec); -gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, GstAmcSurfaceTexture * surface_texture, gint flags, GError **err); +gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, GstAmcSurfaceTexture * surface_texture, GError **err); GstAmcFormat * gst_amc_codec_get_output_format (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_start (GstAmcCodec * codec, GError **err); diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c index c4a6458132..63253e09fd 100644 --- a/sys/androidmedia/gstamcaudiodec.c +++ b/sys/androidmedia/gstamcaudiodec.c @@ -244,7 +244,7 @@ gst_amc_audio_dec_open (GstAudioDecoder * decoder) GST_DEBUG_OBJECT (self, "Opening decoder"); - self->codec = gst_amc_codec_new (klass->codec_info->name, &err); + self->codec = gst_amc_codec_new (klass->codec_info->name, FALSE, &err); if (!self->codec) { GST_ELEMENT_ERROR_FROM_ERROR (self, err); return FALSE; @@ -964,7 +964,7 @@ gst_amc_audio_dec_set_format (GstAudioDecoder * decoder, GstCaps * caps) GST_STR_NULL (format_string)); g_free (format_string); - if (!gst_amc_codec_configure (self->codec, format, NULL, 0, &err)) { + if (!gst_amc_codec_configure (self->codec, format, NULL, &err)) { GST_ERROR_OBJECT (self, "Failed to configure codec"); GST_ELEMENT_ERROR_FROM_ERROR (self, err); return FALSE; diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c index 2865c5b38c..35d2b996c1 100644 --- a/sys/androidmedia/gstamcvideodec.c +++ b/sys/androidmedia/gstamcvideodec.c @@ -433,7 +433,7 @@ gst_amc_video_dec_open (GstVideoDecoder * decoder) GST_DEBUG_OBJECT (self, "Opening decoder"); - self->codec = gst_amc_codec_new (klass->codec_info->name, &err); + self->codec = gst_amc_codec_new (klass->codec_info->name, FALSE, &err); if (!self->codec) { GST_ELEMENT_ERROR_FROM_ERROR (self, err); return FALSE; @@ -2030,7 +2030,7 @@ gst_amc_video_dec_set_format (GstVideoDecoder * decoder, GST_STR_NULL (format_string)); g_free (format_string); - if (!gst_amc_codec_configure (self->codec, format, self->surface, 0, &err)) { + if (!gst_amc_codec_configure (self->codec, format, self->surface, &err)) { GST_ERROR_OBJECT (self, "Failed to configure codec"); GST_ELEMENT_ERROR_FROM_ERROR (self, err); return FALSE; diff --git a/sys/androidmedia/gstamcvideoenc.c b/sys/androidmedia/gstamcvideoenc.c index 8a605a4fb2..e4a668df0f 100644 --- a/sys/androidmedia/gstamcvideoenc.c +++ b/sys/androidmedia/gstamcvideoenc.c @@ -578,7 +578,7 @@ gst_amc_video_enc_open (GstVideoEncoder * encoder) GST_DEBUG_OBJECT (self, "Opening encoder"); - self->codec = gst_amc_codec_new (klass->codec_info->name, &err); + self->codec = gst_amc_codec_new (klass->codec_info->name, TRUE, &err); if (!self->codec) { GST_ELEMENT_ERROR_FROM_ERROR (self, err); return FALSE; @@ -1317,7 +1317,7 @@ gst_amc_video_enc_set_format (GstVideoEncoder * encoder, GST_STR_NULL (format_string)); g_free (format_string); - if (!gst_amc_codec_configure (self->codec, format, NULL, 1, &err)) { + if (!gst_amc_codec_configure (self->codec, format, NULL, &err)) { GST_ERROR_OBJECT (self, "Failed to configure codec"); GST_ELEMENT_ERROR_FROM_ERROR (self, err); goto quit; diff --git a/sys/androidmedia/jni/gstamc-codec-jni.c b/sys/androidmedia/jni/gstamc-codec-jni.c index b1752b5847..2069d601d0 100644 --- a/sys/androidmedia/jni/gstamc-codec-jni.c +++ b/sys/androidmedia/jni/gstamc-codec-jni.c @@ -37,6 +37,7 @@ struct _GstAmcCodec RealBuffer *input_buffers, *output_buffers; gsize n_input_buffers, n_output_buffers; GstAmcSurface *surface; + gboolean is_encoder; }; static struct @@ -440,7 +441,7 @@ gst_amc_buffer_set_position_and_limit (GstAmcBuffer * buffer_, GError ** err, } GstAmcCodec * -gst_amc_codec_new (const gchar * name, GError ** err) +gst_amc_codec_new (const gchar * name, gboolean is_encoder, GError ** err) { JNIEnv *env; GstAmcCodec *codec = NULL; @@ -457,6 +458,7 @@ gst_amc_codec_new (const gchar * name, GError ** err) } codec = g_slice_new0 (GstAmcCodec); + codec->is_encoder = is_encoder; if (!gst_amc_jni_call_static_object_method (env, err, media_codec.klass, media_codec.create_by_codec_name, &object, name_str)) @@ -514,9 +516,10 @@ gst_amc_codec_free (GstAmcCodec * codec) gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, - GstAmcSurfaceTexture * surface, gint flags, GError ** err) + GstAmcSurfaceTexture * surface, GError ** err) { JNIEnv *env; + gint flags = 0; g_return_val_if_fail (codec != NULL, FALSE); g_return_val_if_fail (format != NULL, FALSE); @@ -532,6 +535,9 @@ gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, return FALSE; } + if (codec->is_encoder) + flags = 1; + return gst_amc_jni_call_void_method (env, err, codec->object, media_codec.configure, format->object, codec->surface, NULL, flags); }