@@ -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
780827bool PlusPlayer::SetDisplayMode (int64_t display_mode) {
0 commit comments