#define ADAPTIVE_VARIANT_DEFAULT_VALUE -1 /* auto */
- #define SPATIAL_AUDIO_CAPS "audio/x-raw,format=S16LE,channels=4"
+ #define PLAYER_BUS_MSG_DEFAULT_TIMEOUT 500 /* bus msg wait timeout */
+ #define PLAYER_BUS_MSG_PREPARE_TIMEOUT 100
+
++#define SPATIAL_AUDIO_CAPS "audio/x-raw,format=S16LE,channels=4"
+
/*---------------------------------------------------------------------------
| LOCAL CONSTANT DEFINITIONS: |
---------------------------------------------------------------------------*/
if (!player->audiodec_linked)
__mmplayer_set_audio_attrs(player, caps);
} else if (g_strrstr(klass, "Codec/Decoder/Video")) {
+
+ int video_codec_type = MM_PLAYER_VIDEO_CODEC_TYPE_DEFAULT;
+ mm_attrs_get_int_by_name(player->attrs, "video_codec_type", &video_codec_type);
+
+ LOGD("video codec type: %d", video_codec_type);
+ if (video_codec_type == MM_PLAYER_VIDEO_CODEC_TYPE_HW) {
+ /* sw codec is skipped */
+ for (idx = 0; player->ini.videocodec_element_sw[idx][0] != '\0'; idx++) {
+ if (strstr(factory_name, player->ini.videocodec_element_sw[idx])) {
+ LOGW("skipping sw codec:[%s] by codec type", factory_name);
+
+ result = GST_AUTOPLUG_SELECT_SKIP;
+ goto DONE;
+ }
+ }
+ } else if (video_codec_type == MM_PLAYER_VIDEO_CODEC_TYPE_SW) {
+ /* hw codec is skipped */
+ if (g_strrstr(factory_name, player->ini.videocodec_element_hw)) {
+ LOGW("skipping hw codec:[%s] by codec type", factory_name);
+
+ result = GST_AUTOPLUG_SELECT_SKIP;
+ goto DONE;
+ }
+ }
+
if ((strlen(player->ini.videocodec_element_hw) > 0) &&
(g_strrstr(factory_name, player->ini.videocodec_element_hw))) {
- /* prepare resource manager for video decoder */
- MMPlayerResourceState resource_state = RESOURCE_STATE_NONE;
-
- if (_mmplayer_resource_manager_get_state(&player->resource_manager[RESOURCE_TYPE_VIDEO_DECODER], &resource_state) == MM_ERROR_NONE) {
- /* prepare resource manager for video decoder */
- if ((resource_state >= RESOURCE_STATE_INITIALIZED) && (resource_state < RESOURCE_STATE_ACQUIRED)) {
- if (_mmplayer_resource_manager_prepare(&player->resource_manager[RESOURCE_TYPE_VIDEO_DECODER], RESOURCE_TYPE_VIDEO_DECODER)
- != MM_ERROR_NONE) {
- LOGW("could not prepare for video_decoder resource, skip it.");
- result = GST_AUTOPLUG_SELECT_SKIP;
- goto DONE;
- }
+
+ /* mark video decoder for acquire */
+ if (player->video_decoder_resource == NULL) {
+ if (mm_resource_manager_mark_for_acquire(player->resource_manager,
+ MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_DECODER,
+ MM_RESOURCE_MANAGER_RES_VOLUME_FULL,
+ &player->video_decoder_resource)
+ != MM_RESOURCE_MANAGER_ERROR_NONE) {
+ LOGE("could not mark video_decoder resource for acquire");
+ goto DONE;
}
+ } else {
+ LOGW("video decoder resource is already acquired, skip it.");
+ result = GST_AUTOPLUG_SELECT_SKIP;
+ goto DONE;
}
- if (_mmplayer_resource_manager_get_state(&player->resource_manager[RESOURCE_TYPE_VIDEO_DECODER], &resource_state)
- == MM_ERROR_NONE) {
- /* acquire resources for video playing */
- if (resource_state == RESOURCE_STATE_PREPARED) {
- if (_mmplayer_resource_manager_acquire(&player->resource_manager[RESOURCE_TYPE_VIDEO_DECODER])
- != MM_ERROR_NONE) {
- LOGE("could not acquire resources for video decoding\n");
- _mmplayer_resource_manager_unprepare(&player->resource_manager[RESOURCE_TYPE_VIDEO_DECODER]);
- goto DONE;
- }
- }
+ player->interrupted_by_resource = FALSE;
+ /* acquire resources for video playing */
+ if (mm_resource_manager_commit(player->resource_manager)
+ != MM_RESOURCE_MANAGER_ERROR_NONE) {
+ LOGE("could not acquire resources for video decoding\n");
+ goto DONE;
}
}
}