[alsa-devel] [alsa-utils] [PATCH] Add support for no-rewind flag in aplay utility

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Wed Jan 31 01:14:04 CET 2018


On 1/30/18 11:40 AM, Takashi Sakamoto wrote:
> Hi,
> 
> On Jan 30 2018 18:34, Sriram Periyasamy wrote:
>> From: Ramesh Babu <ramesh.babu at intel.com>
>>
>> The "no-rewind" flag is introduced in alsa.
>> Application can use this flag to assure kernel driver
>> that rewind won't be exercised. Driver could use this
>> flag to alter it's buffering scheme to optimize power
>> and performance.
>>
>> Signed-off-by: Ramesh Babu <ramesh.babu at intel.com>
>> Signed-off-by: Sriram Periyasamy <sriramx.periyasamy at intel.com>
>> ---
>>   aplay/aplay.c | 14 +++++++++++++-
>>   1 file changed, 13 insertions(+), 1 deletion(-)
> 
> Current implementation of 'aplay' doesn't perform rewinding/forwarding,
> thus an additional of this option is surplus.

It helps tell the driver that rewinds won't be used and indirectly that 
the appl_ptr updates are passed to the hardware.
Removing the option or making the functionality unconditional removes 
the freedom to test with or without this option.

> 
>> diff --git a/aplay/aplay.c b/aplay/aplay.c
>> index 6b740c281f8e..b50602a59024 100644
>> --- a/aplay/aplay.c
>> +++ b/aplay/aplay.c
>> @@ -108,6 +108,7 @@ static snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
>>   static int mmap_flag = 0;
>>   static int interleaved = 1;
>>   static int nonblock = 0;
>> +static int no_rewind = 0;
>>   static volatile sig_atomic_t in_aborting = 0;
>>   static u_char *audiobuf = NULL;
>>   static snd_pcm_uframes_t chunk_size = 0;
>> @@ -229,6 +230,7 @@ _("Usage: %s [OPTION]... [FILE]...\n"
>>   "-I, --separate-channels one file for each channel\n"
>>   "-i, --interactive       allow interactive operation from stdin\n"
>>   "-m, --chmap=ch1,ch2,..  Give the channel map to override or follow\n"
>> +"-w, --no-rewind         enables no rewind mode\n"
>>   "    --disable-resample  disable automatic rate resample\n"
>>   "    --disable-channels  disable automatic channel conversions\n"
>>   "    --disable-format    disable automatic format conversions\n"
>> @@ -470,7 +472,7 @@ int main(int argc, char *argv[])
>>   {
>>   	int duration_or_sample = 0;
>>   	int option_index;
>> -	static const char short_options[] = "hnlLD:qt:c:f:r:d:s:MNF:A:R:T:B:vV:IPCi"
>> +	static const char short_options[] = "hnlLD:qt:c:f:r:d:s:w:MNF:A:R:T:B:vV:IPCi"
>>   #ifdef CONFIG_SUPPORT_CHMAP
>>   		"m:"
>>   #endif
>> @@ -514,6 +516,7 @@ int main(int argc, char *argv[])
>>   		{"process-id-file", 1, 0, OPT_PROCESS_ID_FILE},
>>   		{"use-strftime", 0, 0, OPT_USE_STRFTIME},
>>   		{"interactive", 0, 0, 'i'},
>> +		{"no-rewind", 0, 0, 'w'},
>>   		{"dump-hw-params", 0, 0, OPT_DUMP_HWPARAMS},
>>   		{"fatal-errors", 0, 0, OPT_FATAL_ERRORS},
>>   #ifdef CONFIG_SUPPORT_CHMAP
>> @@ -753,6 +756,9 @@ int main(int argc, char *argv[])
>>   		case 'i':
>>   			interactive = 1;
>>   			break;
>> +		case 'w':
>> +			no_rewind = 1;
>> +			break;
>>   		case OPT_DISABLE_RESAMPLE:
>>   			open_mode |= SND_PCM_NO_AUTO_RESAMPLE;
>>   			break;
>> @@ -1396,6 +1402,12 @@ static void set_params(void)
>>   							     &buffer_frames);
>>   	}
>>   	assert(err >= 0);
>> +
>> +	if (no_rewind) {
>> +		err = snd_pcm_hw_params_set_no_rewind(handle, params, 1);
>> +		assert(err >= 0);
>> +	}
>> +
>>   	monotonic = snd_pcm_hw_params_is_monotonic(params);
>>   	can_pause = snd_pcm_hw_params_can_pause(params);
>>   	err = snd_pcm_hw_params(handle, params);
> 
> 
> Regards
> 
> Takashi Sakamoto
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 



More information about the Alsa-devel mailing list