[0.6.84] Merge branch 'tizen_4.0' into 'tizen' 89/165389/1
authorEunhae Choi <eunhae1.choi@samsung.com>
Thu, 28 Dec 2017 13:08:41 +0000 (22:08 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Thu, 28 Dec 2017 13:12:49 +0000 (22:12 +0900)
Change-Id: I377cbf6e6906dec03fe224b58f294cc7c4b29526

1  2 
packaging/libmm-player.spec
src/include/mm_player.h
src/include/mm_player_ini.h
src/include/mm_player_priv.h
src/mm_player_attrs.c
src/mm_player_priv.c

@@@ -1,6 -1,6 +1,6 @@@
  Name:       libmm-player
  Summary:    Multimedia Framework Player Library
- Version:    0.6.83
 -Version:    0.6.86
++Version:    0.6.84
  Release:    0
  Group:      Multimedia/Libraries
  License:    Apache-2.0
Simple merge
Simple merge
Simple merge
@@@ -1098,14 -1098,15 +1098,24 @@@ _mmplayer_construct_attribute(MMHandleT
                        TRUE
                },
                {
 +                      "content_video_is_spherical",
 +                      MM_ATTRS_TYPE_INT,
 +                      MM_ATTRS_FLAG_RW,
 +                      (void *) -1,
 +                      MM_ATTRS_VALID_TYPE_INT_RANGE,
 +                      -1,
 +                      MMPLAYER_MAX_INT
 +              },
++              {
+                       "video_codec_type",
+                       MM_ATTRS_TYPE_INT,
+                       MM_ATTRS_FLAG_RW,
+                       (void *) MM_PLAYER_VIDEO_CODEC_TYPE_DEFAULT,
+                       MM_ATTRS_VALID_TYPE_INT_RANGE,
+                       MM_PLAYER_VIDEO_CODEC_TYPE_DEFAULT,
+                       MM_PLAYER_VIDEO_CODEC_TYPE_SW
+               },
        };
  
        num_of_attrs = ARRAY_SIZE(player_attrs);
  
  #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:                                                                                      |
  ---------------------------------------------------------------------------*/
@@@ -11565,31 -11352,59 +11593,56 @@@ GstCaps* caps, GstElementFactory* facto
                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;
                        }
                }
        }