0015-Add-AC-3-pass-through.patch 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. From e8dac1564e09125dfb73862f71f26a69944c4881 Mon Sep 17 00:00:00 2001
  2. From: Aman Gupta <aman@tmm1.net>
  3. Date: Tue, 1 Mar 2016 16:31:13 +0100
  4. Subject: [PATCH 15/15] Add AC-3 pass-through
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
  9. ---
  10. extras/package/ios/build.sh | 2 --
  11. include/vlc/libvlc_media_player.h | 10 +++++++++
  12. lib/audio.c | 16 +++++++++++++++
  13. lib/media_player.c | 1 +
  14. modules/audio_output/audiounit_ios.m | 39 +++++++++++++++++++++++++++---------
  15. 5 files changed, 56 insertions(+), 12 deletions(-)
  16. diff --git a/extras/package/ios/build.sh b/extras/package/ios/build.sh
  17. index 8ea32c4..af7933a 100755
  18. --- a/extras/package/ios/build.sh
  19. +++ b/extras/package/ios/build.sh
  20. @@ -461,8 +461,6 @@ speex_resampler
  21. remoteosd
  22. magnify
  23. gradient
  24. -tospdif
  25. -dtstofloat32
  26. logger
  27. visual
  28. fb
  29. diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
  30. index 3a37d3b..90a27af 100644
  31. --- a/include/vlc/libvlc_media_player.h
  32. +++ b/include/vlc/libvlc_media_player.h
  33. @@ -1831,6 +1831,16 @@ LIBVLC_API int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi );
  34. LIBVLC_API int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay );
  35. /**
  36. + * Set audio spdif mode.
  37. + *
  38. + * \param p_mi media player
  39. + * \param enabled the spdif state
  40. + * \return 0 on success, -1 on error
  41. + * \version LibVLC 2.x.x or later
  42. + */
  43. +LIBVLC_API int libvlc_audio_set_spdif( libvlc_media_player_t *p_mi, bool enabled );
  44. +
  45. +/**
  46. * Get the number of equalizer presets.
  47. *
  48. * \return number of presets
  49. diff --git a/lib/audio.c b/lib/audio.c
  50. index 7901c64..3877311 100644
  51. --- a/lib/audio.c
  52. +++ b/lib/audio.c
  53. @@ -472,6 +472,22 @@ int libvlc_audio_set_channel( libvlc_media_player_t *mp, int channel )
  54. }
  55. /*****************************************************************************
  56. + * libvlc_audio_set_spdif : Enable/disable spdif mode
  57. + *****************************************************************************/
  58. +int libvlc_audio_set_spdif( libvlc_media_player_t *p_mi, bool enabled )
  59. +{
  60. + int ret = 0;
  61. +
  62. + if( var_SetBool( p_mi, "spdif", enabled ) < 0 )
  63. + {
  64. + libvlc_printerr( "Error setting 'spdif'" );
  65. + ret = -1;
  66. + }
  67. +
  68. + return ret;
  69. +}
  70. +
  71. +/*****************************************************************************
  72. * libvlc_audio_get_delay : Get the current audio delay
  73. *****************************************************************************/
  74. int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi )
  75. diff --git a/lib/media_player.c b/lib/media_player.c
  76. index 143e240..ac30787 100644
  77. --- a/lib/media_player.c
  78. +++ b/lib/media_player.c
  79. @@ -641,6 +641,7 @@ libvlc_media_player_new( libvlc_instance_t *instance )
  80. var_Create (mp, "zoom", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
  81. var_Create (mp, "aspect-ratio", VLC_VAR_STRING);
  82. var_Create (mp, "crop", VLC_VAR_STRING);
  83. + var_Create (mp, "spdif", VLC_VAR_BOOL | VLC_VAR_DOINHERIT);
  84. var_Create (mp, "deinterlace", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
  85. var_Create (mp, "deinterlace-mode", VLC_VAR_STRING);
  86. diff --git a/modules/audio_output/audiounit_ios.m b/modules/audio_output/audiounit_ios.m
  87. index cee8eab..0aa9dee 100644
  88. --- a/modules/audio_output/audiounit_ios.m
  89. +++ b/modules/audio_output/audiounit_ios.m
  90. @@ -201,16 +201,34 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
  91. if (status != noErr)
  92. msg_Warn(p_aout, "failed to set IO mode (%i)", (int)status);
  93. + AVAudioSession *instance = [AVAudioSession sharedInstance];
  94. +
  95. /* Get the current format */
  96. AudioStreamBasicDescription streamDescription;
  97. streamDescription.mSampleRate = fmt->i_rate;
  98. - fmt->i_format = VLC_CODEC_FL32;
  99. - fmt->i_physical_channels = fmt->i_original_channels = AOUT_CHANS_STEREO;
  100. streamDescription.mFormatID = kAudioFormatLinearPCM;
  101. - streamDescription.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; // FL32
  102. - streamDescription.mChannelsPerFrame = aout_FormatNbChannels(fmt);
  103. - streamDescription.mFramesPerPacket = 1;
  104. - streamDescription.mBitsPerChannel = 32;
  105. +
  106. + if (AOUT_FMT_SPDIF(fmt) && var_InheritBool(p_aout, "spdif")) {
  107. + // request spdif
  108. + fmt->i_format = VLC_CODEC_SPDIFL;
  109. + fmt->i_bytes_per_frame = AOUT_SPDIF_SIZE;
  110. + fmt->i_frame_length = A52_FRAME_NB;
  111. +
  112. + streamDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; // S16LE
  113. + streamDescription.mChannelsPerFrame = 2;
  114. + streamDescription.mFramesPerPacket = 1;
  115. + streamDescription.mBitsPerChannel = 16;
  116. + } else {
  117. + // request fl32 pcm
  118. + fmt->i_format = VLC_CODEC_FL32;
  119. + fmt->i_physical_channels = fmt->i_original_channels = AOUT_CHANS_STEREO;
  120. +
  121. + streamDescription.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; // FL32
  122. + streamDescription.mChannelsPerFrame = aout_FormatNbChannels(fmt);
  123. + streamDescription.mFramesPerPacket = 1;
  124. + streamDescription.mBitsPerChannel = 32;
  125. + }
  126. +
  127. streamDescription.mBytesPerFrame = streamDescription.mBitsPerChannel * streamDescription.mChannelsPerFrame / 8;
  128. streamDescription.mBytesPerPacket = streamDescription.mBytesPerFrame * streamDescription.mFramesPerPacket;
  129. i_param_size = sizeof(streamDescription);
  130. @@ -265,10 +283,11 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
  131. }
  132. /* setup circular buffer */
  133. - TPCircularBufferInit(&p_sys->circular_buffer, AUDIO_BUFFER_SIZE_IN_SECONDS * fmt->i_rate * fmt->i_bytes_per_frame);
  134. -
  135. - /* start audio session so playback continues if mute switch is on */
  136. - AVAudioSession *instance = [AVAudioSession sharedInstance];
  137. + if (fmt->i_format == VLC_CODEC_SPDIFL) {
  138. + TPCircularBufferInit(&p_sys->circular_buffer, 200 * AOUT_SPDIF_SIZE);
  139. + } else {
  140. + TPCircularBufferInit(&p_sys->circular_buffer, AUDIO_BUFFER_SIZE_IN_SECONDS * fmt->i_rate * fmt->i_bytes_per_frame);
  141. + }
  142. /* Set audio session to mediaplayback */
  143. NSError *error = nil;
  144. --
  145. 2.9.2