Skip to content

Commit 5a3fe9e

Browse files
committed
Verify track related interfaces
1.Fix fail to get language code issue. 2.Add player handle to UserData for parsing audio and subtitle track.
1 parent 63fa911 commit 5a3fe9e

File tree

2 files changed

+115
-69
lines changed

2 files changed

+115
-69
lines changed

packages/video_player_avplay/tizen/src/plus_player.cc

Lines changed: 112 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -430,27 +430,31 @@ flutter::EncodableValue ParseVideoTrack(const plusplayer_track_h track) {
430430
flutter::EncodableValue("video"));
431431

432432
int track_index = 0;
433-
plusplayer_get_track_index(track, &track_index);
434-
video_track_result.insert_or_assign(flutter::EncodableValue("trackId"),
435-
flutter::EncodableValue(track_index));
433+
if (plusplayer_get_track_index(track, &track_index) ==
434+
PLUSPLAYER_ERROR_TYPE_NONE) {
435+
video_track_result.insert_or_assign(flutter::EncodableValue("trackId"),
436+
flutter::EncodableValue(track_index));
437+
}
436438

437439
const char *mimetype;
438-
plusplayer_get_track_mimetype(track, &mimetype);
439-
video_track_result.insert_or_assign(
440-
flutter::EncodableValue("mimetype"),
441-
flutter::EncodableValue(std::string(mimetype)));
440+
if (plusplayer_get_track_mimetype(track, &mimetype) ==
441+
PLUSPLAYER_ERROR_TYPE_NONE) {
442+
video_track_result.insert_or_assign(
443+
flutter::EncodableValue("mimetype"),
444+
flutter::EncodableValue(std::string(mimetype)));
445+
}
442446

443-
int width;
447+
int width = 0;
444448
plusplayer_get_track_width(track, &width);
445449
video_track_result.insert_or_assign(flutter::EncodableValue("width"),
446450
flutter::EncodableValue(width));
447451

448-
int height;
452+
int height = 0;
449453
plusplayer_get_track_height(track, &height);
450454
video_track_result.insert_or_assign(flutter::EncodableValue("height"),
451455
flutter::EncodableValue(height));
452456

453-
int bitrate;
457+
int bitrate = 0;
454458
plusplayer_get_track_bitrate(track, &bitrate);
455459
video_track_result.insert_or_assign(flutter::EncodableValue("bitrate"),
456460
flutter::EncodableValue(bitrate));
@@ -462,71 +466,96 @@ flutter::EncodableValue ParseVideoTrack(const plusplayer_track_h track) {
462466
return flutter::EncodableValue(video_track_result);
463467
}
464468

465-
flutter::EncodableValue ParseAudioTrack(const plusplayer_track_h track) {
469+
flutter::EncodableValue ParseAudioTrack(const plusplayer_track_h track,
470+
plusplayer_h handle) {
466471
flutter::EncodableMap audio_track_result = {};
467472
audio_track_result.insert_or_assign(flutter::EncodableValue("trackType"),
468473
flutter::EncodableValue("audio"));
474+
469475
int track_index = 0;
470-
plusplayer_get_track_index(track, &track_index);
471-
audio_track_result.insert_or_assign(flutter::EncodableValue("trackId"),
472-
flutter::EncodableValue(track_index));
476+
if (plusplayer_get_track_index(track, &track_index) ==
477+
PLUSPLAYER_ERROR_TYPE_NONE) {
478+
audio_track_result.insert_or_assign(flutter::EncodableValue("trackId"),
479+
flutter::EncodableValue(track_index));
480+
}
473481

474482
const char *mimetype;
475-
plusplayer_get_track_mimetype(track, &mimetype);
476-
audio_track_result.insert_or_assign(
477-
flutter::EncodableValue("mimetype"),
478-
flutter::EncodableValue(std::string(mimetype)));
483+
if (plusplayer_get_track_mimetype(track, &mimetype) ==
484+
PLUSPLAYER_ERROR_TYPE_NONE) {
485+
audio_track_result.insert_or_assign(
486+
flutter::EncodableValue("mimetype"),
487+
flutter::EncodableValue(std::string(mimetype)));
488+
}
479489

480-
const char *language_code = plusplayer_get_track_language_code(
481-
track, PLUSPLAYER_TRACK_TYPE_AUDIO, track_index);
482-
audio_track_result.insert_or_assign(
483-
flutter::EncodableValue("language"),
484-
flutter::EncodableValue(std::string(language_code)));
490+
auto language_code = plusplayer_get_track_language_code(
491+
handle, PLUSPLAYER_TRACK_TYPE_AUDIO, track_index);
492+
493+
std::string language;
494+
if (language_code) {
495+
language = std::string(language_code);
496+
free((void *)language_code);
497+
}
498+
audio_track_result.insert_or_assign(flutter::EncodableValue("language"),
499+
flutter::EncodableValue(language));
485500

486501
int channel_count;
487-
plusplayer_get_track_channels(track, &channel_count);
488-
audio_track_result.insert_or_assign(flutter::EncodableValue("channel"),
489-
flutter::EncodableValue(channel_count));
502+
if (plusplayer_get_track_channels(track, &channel_count) ==
503+
PLUSPLAYER_ERROR_TYPE_NONE) {
504+
audio_track_result.insert_or_assign(flutter::EncodableValue("channel"),
505+
flutter::EncodableValue(channel_count));
506+
}
490507

491508
int bitrate;
492-
plusplayer_get_track_bitrate(track, &bitrate);
493-
audio_track_result.insert_or_assign(flutter::EncodableValue("bitrate"),
494-
flutter::EncodableValue(bitrate));
509+
if (plusplayer_get_track_bitrate(track, &bitrate) ==
510+
PLUSPLAYER_ERROR_TYPE_NONE) {
511+
audio_track_result.insert_or_assign(flutter::EncodableValue("bitrate"),
512+
flutter::EncodableValue(bitrate));
513+
}
495514

496515
LOG_DEBUG(
497516
"[PlusPlayer] audio track info : trackId : %d, mimetype : %s, "
498517
"language_code : %s, channel : %d, bitrate : %d",
499-
track_index, mimetype, language_code, channel_count, bitrate);
518+
track_index, mimetype, language.c_str(), channel_count, bitrate);
500519

501520
return flutter::EncodableValue(audio_track_result);
502521
}
503522

504-
flutter::EncodableValue ParseSubtitleTrack(const plusplayer_track_h track) {
523+
flutter::EncodableValue ParseSubtitleTrack(const plusplayer_track_h track,
524+
plusplayer_h handle) {
505525
flutter::EncodableMap subtitle_track_result = {};
506526
subtitle_track_result.insert_or_assign(flutter::EncodableValue("trackType"),
507527
flutter::EncodableValue("text"));
508528

509529
int track_index = 0;
510-
plusplayer_get_track_index(track, &track_index);
511-
subtitle_track_result.insert_or_assign(flutter::EncodableValue("trackId"),
512-
flutter::EncodableValue(track_index));
530+
if (plusplayer_get_track_index(track, &track_index) ==
531+
PLUSPLAYER_ERROR_TYPE_NONE) {
532+
subtitle_track_result.insert_or_assign(
533+
flutter::EncodableValue("trackId"),
534+
flutter::EncodableValue(track_index));
535+
}
513536

514537
const char *mimetype;
515-
plusplayer_get_track_mimetype(track, &mimetype);
516-
subtitle_track_result.insert_or_assign(
517-
flutter::EncodableValue("mimetype"),
518-
flutter::EncodableValue(std::string(mimetype)));
538+
if (plusplayer_get_track_mimetype(track, &mimetype) ==
539+
PLUSPLAYER_ERROR_TYPE_NONE) {
540+
subtitle_track_result.insert_or_assign(
541+
flutter::EncodableValue("mimetype"),
542+
flutter::EncodableValue(std::string(mimetype)));
543+
}
519544

520545
const char *language_code = plusplayer_get_track_language_code(
521-
track, PLUSPLAYER_TRACK_TYPE_SUBTITLE, track_index);
522-
subtitle_track_result.insert_or_assign(
523-
flutter::EncodableValue("language"),
524-
flutter::EncodableValue(std::string(language_code)));
546+
handle, PLUSPLAYER_TRACK_TYPE_SUBTITLE, track_index);
547+
std::string language;
548+
if (language_code) {
549+
language = std::string(language_code);
550+
free((void *)language_code);
551+
subtitle_track_result.insert_or_assign(flutter::EncodableValue("language"),
552+
flutter::EncodableValue(language));
553+
}
525554

526555
LOG_DEBUG(
527556
"[PlusPlayer] subtitle track info : trackId : %d, mimetype : %s, "
528557
"language_code : %s",
529-
track_index, mimetype, language_code);
558+
track_index, mimetype, language.c_str());
530559
return flutter::EncodableValue(subtitle_track_result);
531560
}
532561

@@ -550,34 +579,42 @@ flutter::EncodableList PlusPlayer::GetTrackInfo(std::string track_type) {
550579
LOG_ERROR("[PlusPlayer] Fail to get track count");
551580
return {};
552581
}
582+
553583
if (track_count <= 0) {
554584
return {};
555585
}
586+
556587
struct UserData {
557588
flutter::EncodableList *track_selections;
558589
plusplayer_track_type_e type;
590+
plusplayer_h handle;
559591
};
592+
560593
flutter::EncodableList trackSelections = {};
561-
UserData user_data = {};
562-
user_data.track_selections = &trackSelections;
563-
user_data.type = type;
594+
UserData data = {};
595+
data.track_selections = &trackSelections;
596+
data.type = type;
597+
data.handle = player_;
564598
if (plusplayer_get_foreach_track(
565599
player_,
566600
[](plusplayer_track_h track_h, void *user_data) -> bool {
567601
UserData *data = static_cast<UserData *>(user_data);
568-
if (data->type ==
569-
plusplayer_track_type_e::PLUSPLAYER_TRACK_TYPE_VIDEO) {
570-
data->track_selections->push_back(ParseVideoTrack(track_h));
571-
} else if (data->type ==
572-
plusplayer_track_type_e::PLUSPLAYER_TRACK_TYPE_AUDIO) {
573-
data->track_selections->push_back(ParseAudioTrack(track_h));
574-
} else if (data->type == plusplayer_track_type_e::
575-
PLUSPLAYER_TRACK_TYPE_SUBTITLE) {
576-
data->track_selections->push_back(ParseSubtitleTrack(track_h));
602+
plusplayer_track_type_e type;
603+
plusplayer_get_track_type(track_h, &type);
604+
if (data->type == type) {
605+
if (type == PLUSPLAYER_TRACK_TYPE_VIDEO) {
606+
data->track_selections->push_back(ParseVideoTrack(track_h));
607+
} else if (type == PLUSPLAYER_TRACK_TYPE_AUDIO) {
608+
data->track_selections->push_back(
609+
ParseAudioTrack(track_h, data->handle));
610+
} else if (type == PLUSPLAYER_TRACK_TYPE_SUBTITLE) {
611+
data->track_selections->push_back(
612+
ParseSubtitleTrack(track_h, data->handle));
613+
}
577614
}
578615
return true;
579616
},
580-
&user_data) != PLUSPLAYER_ERROR_TYPE_NONE) {
617+
&data) != PLUSPLAYER_ERROR_TYPE_NONE) {
581618
LOG_ERROR("[PlusPlayer] Fail to get track info");
582619
return {};
583620
}
@@ -596,26 +633,35 @@ flutter::EncodableList PlusPlayer::GetActiveTrackInfo() {
596633
return {};
597634
}
598635

636+
struct UserData {
637+
flutter::EncodableList *tracks;
638+
plusplayer_h handle;
639+
};
640+
599641
// Use the C API to iterate over active tracks.
600642
flutter::EncodableList active_tracks;
643+
644+
UserData data = {};
645+
data.tracks = &active_tracks;
646+
data.handle = player_;
601647
// The callback receives each active track handle.
602648
if (plusplayer_get_foreach_active_track(
603649
player_,
604650
[](plusplayer_track_h track_h, void *user_data) -> bool {
605651
plusplayer_track_type_e type;
606652
plusplayer_get_track_type(track_h, &type);
607-
flutter::EncodableList *tracks =
608-
static_cast<flutter::EncodableList *>(user_data);
653+
UserData *data = static_cast<UserData *>(user_data);
609654
if (type == PLUSPLAYER_TRACK_TYPE_AUDIO) {
610-
tracks->push_back(ParseAudioTrack(track_h));
655+
data->tracks->push_back(ParseAudioTrack(track_h, data->handle));
611656
} else if (type == PLUSPLAYER_TRACK_TYPE_VIDEO) {
612-
tracks->push_back(ParseVideoTrack(track_h));
657+
data->tracks->push_back(ParseVideoTrack(track_h));
613658
} else {
614-
tracks->push_back(ParseSubtitleTrack(track_h));
659+
data->tracks->push_back(
660+
ParseSubtitleTrack(track_h, data->handle));
615661
}
616662
return true; // Continue iteration.
617663
},
618-
&active_tracks) != PLUSPLAYER_ERROR_TYPE_NONE) {
664+
&data) != PLUSPLAYER_ERROR_TYPE_NONE) {
619665
LOG_ERROR("[PlusPlayer] Fail to get active track info");
620666
return {};
621667
}
@@ -637,8 +683,8 @@ bool PlusPlayer::SetTrackSelection(int32_t track_id, std::string track_type) {
637683
return false;
638684
}
639685

640-
if (!plusplayer_select_track(player_, ConvertTrackType(track_type),
641-
track_id)) {
686+
if (plusplayer_select_track(player_, ConvertTrackType(track_type),
687+
track_id) != PLUSPLAYER_ERROR_TYPE_NONE) {
642688
LOG_ERROR("[PlusPlayer] Player fail to select track.");
643689
return false;
644690
}
@@ -774,7 +820,8 @@ bool PlusPlayer::SetDisplayRotate(int64_t rotation) {
774820

775821
LOG_INFO("[PlusPlayer] rotation: %lld", rotation);
776822
return plusplayer_set_display_rotation(
777-
player_, static_cast<plusplayer_display_rotation_type_e>(rotation));
823+
player_, static_cast<plusplayer_display_rotation_type_e>(
824+
rotation)) != PLUSPLAYER_ERROR_TYPE_NONE;
778825
}
779826

780827
bool PlusPlayer::SetDisplayMode(int64_t display_mode) {

packages/video_player_avplay/tizen/src/plus_player_util.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ static constexpr plusplayer_track_type_e kUnknownTrackType =
1111
static_cast<plusplayer_track_type_e>(-1);
1212

1313
static const std::unordered_map<std::string, plusplayer_track_type_e>
14-
kTrackMap = {
15-
{"video", plusplayer_track_type_e::PLUSPLAYER_TRACK_TYPE_VIDEO},
16-
{"audio", plusplayer_track_type_e::PLUSPLAYER_TRACK_TYPE_AUDIO},
17-
{"text", plusplayer_track_type_e::PLUSPLAYER_TRACK_TYPE_SUBTITLE}};
14+
kTrackMap = {{"video", PLUSPLAYER_TRACK_TYPE_VIDEO},
15+
{"audio", PLUSPLAYER_TRACK_TYPE_AUDIO},
16+
{"text", PLUSPLAYER_TRACK_TYPE_SUBTITLE}};
1817

1918
static std::unordered_map<std::string, plusplayer_property_e>
2019
kConvertPropertyMap = {

0 commit comments

Comments
 (0)