- Add to support for VP9 feature.
Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I669ea612f3063ca9e6fff72bbf95d91672b8505e
Name: libmm-wfd
Summary: Multimedia Framework Wifi-Display Library
-Version: 0.2.226
+Version: 0.2.227
Release: 0
Group: System/Libraries
License: Apache-2.0
/* video codec */
typedef enum {
MM_WFD_SINK_VIDEO_CODEC_NONE,
- MM_WFD_SINK_VIDEO_CODEC_H264 = 0x1b,
- MM_WFD_SINK_VIDEO_CODEC_H265 = 0x24
+ MM_WFD_SINK_VIDEO_CODEC_H265 = 0x24,
+ MM_WFD_SINK_VIDEO_CODEC_VP9 = 0x91,
+ MM_WFD_SINK_VIDEO_CODEC_H264 = 0x1b
} MMWFDSinkVideoCodec;
typedef void(*MMWFDMessageCallback)(int error_type, MMWFDSinkStateType state_type, void *user_data);
typedef enum {
WFD_VIDEO_UNKNOWN = 0,
WFD_VIDEO_H264 = (1 << 0),
- WFD_VIDEO_H265 = (1 << 1)
+ WFD_VIDEO_H265 = (1 << 1),
+ WFD_VIDEO_VP9 = (1 << 2)
} WFDVideoCodecs;
typedef enum {
WFD2_H264_CHP2 = (1 << 2), /* Constrained High Profile2 */
WFD2_H264_BP = (1 << 3), /* Baseline Profile */
WFD2_H264_MP = (1 << 4), /* Main Profile */
- WFD2_H264_HP = (1 << 5) /* High Profile */
+ WFD2_H264_HP = (1 << 5), /* High Profile */
+ WFD2_H264_PROGRESSIVE_HIGH_PROFILE = (1 << 6), /* Progressive High Profile */
+ WFD2_H264_PROGRESSIVE_HIGH_STILL_PICTURE = (1 << 7) /* Progressive High Still Picture */
} WFD2VideoH264ProfileEnum;
typedef enum {
gchar name_of_video_h264_decoder[WFD_SINK_INI_MAX_STRLEN];
gchar name_of_video_h265_parser[WFD_SINK_INI_MAX_STRLEN];
gchar name_of_video_h265_decoder[WFD_SINK_INI_MAX_STRLEN];
+ gchar name_of_video_vp9_parser[WFD_SINK_INI_MAX_STRLEN];
+ gchar name_of_video_vp9_decoder[WFD_SINK_INI_MAX_STRLEN];
gchar name_of_video_converter[WFD_SINK_INI_MAX_STRLEN];
gchar name_of_video_filter[WFD_SINK_INI_MAX_STRLEN];
gchar name_of_video_sink[WFD_SINK_INI_MAX_STRLEN];
WFD_SINK_V_D_H264_DEC,
WFD_SINK_V_D_H265_PARSE,
WFD_SINK_V_D_H265_DEC,
+ WFD_SINK_V_D_VP9_PARSE,
+ WFD_SINK_V_D_VP9_DEC,
WFD_SINK_V_D_NUM
};
#define DEFAULT_NAME_OF_VIDEO_H264_DECODER ""
#define DEFAULT_NAME_OF_VIDEO_H265_PARSER ""
#define DEFAULT_NAME_OF_VIDEO_H265_DECODER ""
+#define DEFAULT_NAME_OF_VIDEO_VP9_PARSER ""
+#define DEFAULT_NAME_OF_VIDEO_VP9_DECODER ""
#define DEFAULT_NAME_OF_VIDEO_CONVERTER ""
#define DEFAULT_NAME_OF_VIDEO_FILTER ""
#define DEFAULT_NAME_OF_VIDEO_SINK ""
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_h264_decoder, "pipeline:video h264 decoder element", DEFAULT_NAME_OF_VIDEO_H264_DECODER);
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_h265_parser, "pipeline:video h265 parser element", DEFAULT_NAME_OF_VIDEO_H265_PARSER);
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_h265_decoder, "pipeline:video h265 decoder element", DEFAULT_NAME_OF_VIDEO_H265_DECODER);
+ MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_vp9_parser, "pipeline:video vp9 parser element", DEFAULT_NAME_OF_VIDEO_VP9_PARSER);
+ MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_vp9_decoder, "pipeline:video vp9 decoder element", DEFAULT_NAME_OF_VIDEO_VP9_DECODER);
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_converter, "pipeline:video converter element", DEFAULT_NAME_OF_VIDEO_CONVERTER);
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_filter, "pipeline:video filter element", DEFAULT_NAME_OF_VIDEO_FILTER);
MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_sink, "pipeline:video sink element", DEFAULT_NAME_OF_VIDEO_SINK);
strncpy(ini->name_of_video_h264_decoder, DEFAULT_NAME_OF_VIDEO_H264_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
strncpy(ini->name_of_video_h265_parser, DEFAULT_NAME_OF_VIDEO_H265_PARSER, WFD_SINK_INI_MAX_STRLEN - 1);
strncpy(ini->name_of_video_h265_decoder, DEFAULT_NAME_OF_VIDEO_H265_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
+ strncpy(ini->name_of_video_vp9_parser, DEFAULT_NAME_OF_VIDEO_VP9_PARSER, WFD_SINK_INI_MAX_STRLEN - 1);
+ strncpy(ini->name_of_video_vp9_decoder, DEFAULT_NAME_OF_VIDEO_VP9_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
strncpy(ini->name_of_video_converter, DEFAULT_NAME_OF_VIDEO_CONVERTER, WFD_SINK_INI_MAX_STRLEN - 1);
strncpy(ini->name_of_video_filter, DEFAULT_NAME_OF_VIDEO_FILTER, WFD_SINK_INI_MAX_STRLEN - 1);
strncpy(ini->name_of_video_sink, DEFAULT_NAME_OF_VIDEO_SINK, WFD_SINK_INI_MAX_STRLEN - 1);
wfd_sink_debug("name_of_video_h264_decoder : %s", ini->name_of_video_h264_decoder);
wfd_sink_debug("name_of_video_h265_parser : %s", ini->name_of_video_h265_parser);
wfd_sink_debug("name_of_video_h265_decoder : %s", ini->name_of_video_h265_decoder);
+ wfd_sink_debug("name_of_video_vp9_parser : %s", ini->name_of_video_vp9_parser);
+ wfd_sink_debug("name_of_video_vp9_decoder : %s", ini->name_of_video_vp9_decoder);
wfd_sink_debug("name_of_video_converter : %s", ini->name_of_video_converter);
wfd_sink_debug("name_of_video_filter : %s", ini->name_of_video_filter);
wfd_sink_debug("name_of_video_sink : %s", ini->name_of_video_sink);
if (v_decodebin[WFD_SINK_V_D_H265_DEC].gst)
element_bucket = g_list_append(element_bucket, &v_decodebin[WFD_SINK_V_D_H265_DEC]);
break;
+ case MM_WFD_SINK_VIDEO_CODEC_VP9:
+ if (v_decodebin[WFD_SINK_V_D_VP9_PARSE].gst)
+ element_bucket = g_list_append(element_bucket, &v_decodebin[WFD_SINK_V_D_VP9_PARSE]);
+ if (v_decodebin[WFD_SINK_V_D_VP9_DEC].gst)
+ element_bucket = g_list_append(element_bucket, &v_decodebin[WFD_SINK_V_D_VP9_DEC]);
+ break;
default:
wfd_sink_error("video codec is not decied yet. cannot link video decpdebin...");
video_codec = WFD_VIDEO_H265;
link = TRUE;
break;
+ case MM_WFD_SINK_VIDEO_CODEC_VP9:
+ video_codec = WFD_VIDEO_VP9;
+ link = TRUE;
+ break;
case MM_WFD_SINK_VIDEO_CODEC_NONE:
default:
wfd_sink_debug("video decodebin could NOT be linked now, just create");
}
}
}
+ if (video_codec & WFD_VIDEO_VP9) {
+ /* create parser */
+ MMWFDSINK_CREATE_ELEMENT(v_decodebin, WFD_SINK_V_D_VP9_PARSE, wfd_sink->ini.name_of_video_vp9_parser, "video_vp9_parser", FALSE);
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, v_decodebin[WFD_SINK_V_D_VP9_PARSE].gst, "sink");
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, v_decodebin[WFD_SINK_V_D_VP9_PARSE].gst, "src");
+
+ /* create dec */
+ MMWFDSINK_CREATE_ELEMENT(v_decodebin, WFD_SINK_V_D_VP9_DEC, wfd_sink->ini.name_of_video_vp9_decoder, "video_vp9_dec", FALSE);
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, v_decodebin[WFD_SINK_V_D_VP9_DEC].gst, "sink");
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, v_decodebin[WFD_SINK_V_D_VP9_DEC].gst, "src");
+ if (v_decodebin[WFD_SINK_V_D_VP9_DEC].gst) {
+ if (MM_ERROR_NONE != __mm_wfd_sink_prepare_videodec(wfd_sink, v_decodebin[WFD_SINK_V_D_VP9_DEC].gst)) {
+ wfd_sink_error("failed to set video decoder property...");
+ goto CREATE_ERROR;
+ }
+ }
+ }
g_list_free(element_bucket);