From 15394aa70543f55c54fa8a474805224f4138f76c Mon Sep 17 00:00:00 2001 From: Zaheer Abbas Merali Date: Fri, 12 Dec 2014 10:05:23 -0800 Subject: [PATCH] openh264: fix to work with released versions and master of upstream --- configure.ac | 22 +--------------------- ext/openh264/gstopenh264dec.cpp | 4 ++-- ext/openh264/gstopenh264enc.cpp | 10 ++++++---- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/configure.ac b/configure.ac index fd1ad03217..71ca13c277 100644 --- a/configure.ac +++ b/configure.ac @@ -2521,27 +2521,7 @@ AG_GST_CHECK_FEATURE(OPENEXR, [openexr library], openexr, [ dnl *** openh264 *** translit(dnm, m, l) AM_CONDITIONAL(USE_OPENH264, true) AG_GST_CHECK_FEATURE(OPENH264, [openh264 library], openh264, [ - AC_LANG_PUSH([C++]) - AG_GST_CHECK_LIBHEADER(OPENH264, openh264, WelsSnprintf, $PTHREAD_LIBS, - wels/codec_api.h, [ - AC_MSG_CHECKING([for right openh264 version/snapshot]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[ - SFrameBSInfo frame_info; - SEncParamExt enc_params; - enc_params.iInputCsp = videoFormatI420; - int *p = (int *) &frame_info.eFrameType; - *p = RC_LOW_BW_MODE; - ]])], [ - AC_MSG_RESULT(yes) - OPENH264_LIBS="-lopenh264 $PTHREAD_LIBS" - ], [ - AC_MSG_RESULT(no) - HAVE_OPENH264="no" - ]) - ]) - AC_LANG_POP([C++]) - AC_SUBST(OPENH264_LIBS) + AG_GST_PKG_CHECK_MODULES(OPENH264, openh264) ]) dnl *** OpenJPEG *** diff --git a/ext/openh264/gstopenh264dec.cpp b/ext/openh264/gstopenh264dec.cpp index 428a884a3a..e8fb3d2bbc 100644 --- a/ext/openh264/gstopenh264dec.cpp +++ b/ext/openh264/gstopenh264dec.cpp @@ -190,8 +190,8 @@ gst_openh264dec_start (GstVideoDecoder * decoder) WelsCreateDecoder (&(openh264dec->priv->decoder)); dec_param.uiTargetDqLayer = 255; - dec_param.uiEcActiveFlag = 1; - dec_param.iOutputColorFormat = videoFormatI420; + dec_param.eEcActiveIdc = ERROR_CON_FRAME_COPY; + dec_param.eOutputColorFormat = videoFormatI420; dec_param.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC; ret = openh264dec->priv->decoder->Initialize (&dec_param); diff --git a/ext/openh264/gstopenh264enc.cpp b/ext/openh264/gstopenh264enc.cpp index 89a505ed56..7e3b18e6e9 100644 --- a/ext/openh264/gstopenh264enc.cpp +++ b/ext/openh264/gstopenh264enc.cpp @@ -74,7 +74,7 @@ gst_openh264enc_rc_modes_get_type (void) static GEnumValue rc_modes_types[] = { {RC_QUALITY_MODE, "Quality mode", "quality"}, {RC_BITRATE_MODE, "Bitrate mode", "bitrate"}, - {RC_LOW_BW_MODE, "Low bandwidth mode", "bandwidth"}, + {RC_BUFFERBASED_MODE, "No bitrate control, just using buffer status", "buffer"}, {RC_OFF_MODE, "Rate control off mode", "off"}, {0, NULL, NULL}, }; @@ -407,8 +407,8 @@ gst_openh264enc_set_rate_control (GstOpenh264Enc * openh264enc, gint rc_mode) case RC_BITRATE_MODE: openh264enc->priv->rate_control = RC_BITRATE_MODE; break; - case RC_LOW_BW_MODE: - openh264enc->priv->rate_control = RC_LOW_BW_MODE; + case RC_BUFFERBASED_MODE: + openh264enc->priv->rate_control = RC_BUFFERBASED_MODE; break; case RC_OFF_MODE: openh264enc->priv->rate_control = RC_OFF_MODE; @@ -633,6 +633,7 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder, GstCaps *outcaps; GstVideoCodecState *output_state; openh264enc->priv->frame_count = 0; + int video_format = videoFormatI420; debug_caps = gst_caps_to_string (state->caps); GST_DEBUG_OBJECT (openh264enc, "gst_e26d4_enc_set_format called, caps: %s", @@ -667,7 +668,6 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder, enc_params.iTemporalLayerNum = 1; enc_params.iSpatialLayerNum = 1; enc_params.iLtrMarkPeriod = 30; - enc_params.iInputCsp = videoFormatI420; enc_params.iMultipleThreadIdc = openh264enc->priv->multi_thread; enc_params.bEnableDenoise = openh264enc->priv->enable_denoise; enc_params.uiIntraPeriod = priv->gop_size; @@ -701,6 +701,8 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder, return FALSE; } + priv->encoder->SetOption(ENCODER_OPTION_DATAFORMAT, &video_format); + memset (&bsInfo, 0, sizeof (SFrameBSInfo)); ret = priv->encoder->EncodeParameterSets (&bsInfo);