Playing autolists

Updated: May 06, 2022

You can treat a single track as a playlist, meaning you can repeat playback. This is useful when your existing code uses playlists and you want to adapt it to play single songs or videos.

Note: Autolists aren't supported in the shipped version of mm-renderer. If you need this capability, contact QNX Customer Support.

The code sample here attaches an audio output, sets the repeat input parameter to enable continuous playback of a track, then attaches an autolist input that names a local audio file to treat as a playlist.

/* Code to connect to mm-renderer and create a context goes here 
   (see "Playing audio content" for an example of doing this) */
const mmr_error_info_t* errorInfo;

// Attach an audio output with a URL of "snd:" to use the preferred device
int outputID = mmr_output_attach( ctxt_audioplay, "snd:", "audio" );

if (outputID == -1) {
    errorInfo = mmr_error_info(ctxt_audioplay);
    /* Remaining error-handling code goes here */
    return EXIT_FAILURE;
}

strm_dict_t* dict_input_params = strm_dict_new();

// Enable continuous playback
if ( strm_dict_set( dict_input_params, 
                    "repeat", 
                    "track" ) < 0 ) {
    /* Error-handling code goes here */
}
else if ( mmr_input_parameters( ctxt_audioplay,
                                dict_input_params ) < 0 ) {
    errorInfo = mmr_error_info(ctxt_audioplay);
    /* Remaining error-handling code goes here */
    return EXIT_FAILURE;
}

// Attach a local audio file as an "autolist" input, to treat the 
// single track as a playlist
int inputID = mmr_input_attach( ctxt_audioplay,
                                "/fs/usb0/stillness_in_time.mp3",
                                "autolist" );

if (inputID == -1) {
    errorInfo = mmr_error_info(ctxt_audioplay);
    /* Remaining error-handling code goes here */
    return EXIT_FAILURE;
}
After attaching the input (and even after starting playback), we can adjust the repeat parameter; for example, to disable repeating. This must be done using a different function:
// Disable continuous playback
if ( strm_dict_set( dict_track_params, 
                    "repeat", 
                    "none" ) < 0 ) {
    /* Error-handling code goes here */
}
else if ( mmr_track_parameters( ctxt_audioplay,
                                1,
                                dict_track_params ) < 0 ) {
    errorInfo = mmr_error_info(ctxt_audioplay);
    /* Remaining error-handling code goes here */
    return EXIT_FAILURE;
}

The mm-renderer service uses the repeat setting defined through mmr_input_parameters() as the initial setting for any track in the input playlist. With autolist, the playlist consists of a single media file or stream, but it must still be configured as a playlist entry using mmr_track_parameters().