<div dir="ltr">I used swresample only to convert format but it looks simple as brick to
 me. You can feed any amount of data in and get any amount out, 
something like this (pseudocode):<br><br>while(1){<br>  int n = src_size-src_pos;<br>  if(n==0) break;<br><br>  const uint8_t* src[32];<br>  const uint8_t* dst[32];<br>  {for(int i=0; i<frame->channels; i++){ <br>    src[i] = frame->extended_data[i] + src_pos*src_linesize; <br>    dst[i] = buf_data[i] + dst_pos*dst_linesize; <br>  }}<br><br>  int r = swr_convert(swr, dst, dst_size-dst_pos, src, n);<br>  if(!r) break;<br>  dst_pos += r;<br>  src_pos += n;<br>  if(dst_pos>=out_packet_size) handle_output();<br>}<br><br>No need to know anything about format except its bytes per sample:<br>av_samples_get_buffer_size(&<div dir="ltr">src_linesize,channels,1,sample_fmt,1);</div><div class="gmail_extra"><br></div></div>