<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
span.E-MailFormatvorlage17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hello,<o:p></o:p></p><p class=MsoNormal><span lang=EN-GB>within a previous email I asked about the best way to write audio to a file.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>I’m trying to write a screen capture software that records the screen and audio from the microphone.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB>At the moment I’m struggling with the audio part of this project. I’m not able to write any audio to an empty mp4 file, without video.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>I’m not really sure what the best way to post code is, but I’ll do my best.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>This is the code that I use to open the file. <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>Recorder</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>::init_outputfile(QString </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:gray'>filename</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> std::</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>string</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> tmp = </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:gray'>filename</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>.toStdString();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>const</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>char</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* output_file = tmp.c_str();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> avformat_alloc_output_context2(&outAVFormatContext, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, output_file);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outAVFormatContext)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in allocating av format output context"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* Returns the output format in the list of registered output formats which best matches the provided parameters, or returns NULL if there is no match. */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outputFormat = av_guess_format(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, output_file, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outputFormat)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in guessing the video format. try with correct format"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>The part where I open the output stream for audio<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>Recorder</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>::openOutputStream_audio()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> codec_id = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> stream = avformat_new_stream(outAVFormatContext, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!stream)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in creating a av format new stream"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodec = avcodec_find_encoder(AV_CODEC_ID_AAC);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outAVCodec)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in finding the av codecs. try again with correct codec"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext = avcodec_alloc_context3(outAVCodec);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outAVCodecContext)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in allocating the codec contexts"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* set property of the video file */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext = stream->codec;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->codec_id = AV_CODEC_ID_AAC;</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>// AV_CODEC_ID_MPEG4; // AV_CODEC_ID_H264 // AV_CODEC_ID_MPEG1VIDEO</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->codec_type = AVMEDIA_TYPE_AUDIO;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->channels = 2;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->channel_layout = AV_CH_LAYOUT_STEREO;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->sample_fmt = AV_SAMPLE_FMT_FLTP;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->bit_rate = 128000;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->sample_rate = 48000;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->time_base.num = 1;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->time_base.den = 48000; </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>//30; //15fps</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* Some container formats (like MP4) require global headers to be present</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'> Mark the encoder so that it behaves accordingly. */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (outAVFormatContext->oformat->flags & AVFMT_GLOBALHEADER)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret = avcodec_open2(outAVCodecContext, outAVCodec, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (ret < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in opening the avcodec"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:blue'>return</span><span style='font-size:9.5pt;font-family:Consolas;color:black'> 0;<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>Open the input stream for audio<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>Recorder</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>::openAudio()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> inAVFormatContext = avformat_alloc_context();</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>//Allocate an AVFormatContext.</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> AVInputFormat* inputFormat = av_find_input_format(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"dshow"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> value = avformat_open_input(pFormatCtx, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"audio=Mikrofon (Realtek High Definition Audio)"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, inputFormat, NULL);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (value != 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> std::cout << </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in opening input device"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (value < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nunable to find the stream information"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* select the audio stream */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret = av_find_best_stream(inAVFormatContext, AVMEDIA_TYPE_AUDIO, -1, -1, &inAVCodec, 0);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (ret < 0) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> av_log(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, AV_LOG_ERROR, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"Cannot find a audio stream in the input file\n"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>return</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> videoSteamIndex = ret;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>// assign pAVFormatContext to VideoStreamIndx</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> inAVCodecContext = avcodec_alloc_context3(inAVCodec);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!inAVCodecContext)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>return</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> AVERROR(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>ENOMEM</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> avcodec_parameters_to_context(inAVCodecContext, inAVFormatContext->streams[videoSteamIndex]->codecpar);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> value = avcodec_open2(inAVCodecContext, inAVCodec, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>//Initialize the AVCodecContext to use the given AVCodec.</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (value < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nunable to open the av codec"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>The actual magic should happen here, the transcoding and en/decode part.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB>This part is experimental so it isn’t final.<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>void</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>Recorder</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>::decode_audio()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* create empty video file */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!(outAVFormatContext->flags & </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>AVFMT_NOFILE</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (avio_open2(&outAVFormatContext->pb, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"test.mp4"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>AVIO_FLAG_WRITE</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>) < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in creating the video file"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outAVFormatContext->nb_streams)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\noutput file dose not contain any stream"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* imp: mp4 container or some advanced container file required header information*/</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> ret = avformat_write_header(outAVFormatContext, &options);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (ret < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in writing the header context"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> frameFinished;</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> value;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>AVPacket</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* inPacket = av_packet_alloc();</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>AVFrame</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* inFrame = av_frame_alloc();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> got_frame;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>SwrContext</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* swrCtx_ = </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>nullptr</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>while</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (threading)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (av_read_frame(inAVFormatContext, inPacket) >= 0) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (inPacket->stream_index == videoSteamIndex)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> len = avcodec_decode_audio4(inAVCodecContext, inFrame, &got_frame, inPacket);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (len < 0) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> fprintf(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>stderr</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"Error while decoding\n"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (got_frame) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* if a frame has been decoded, output it */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> data_size = av_get_bytes_per_sample(outAVCodecContext->sample_fmt);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (data_size < 0) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>/* This should not occur, checking just for paranoia */</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> fprintf(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>stderr</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"Failed to calculate data size\n"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (swrCtx_ == </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>nullptr</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> swrCtx_ = swr_alloc_set_opts(</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->channel_layout,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->sample_fmt,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outAVCodecContext->sample_rate,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>AV_CH_LAYOUT_STEREO</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>,</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> inAVCodecContext->sample_fmt,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> inAVCodecContext->sample_rate,<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> 0, </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#6F008A'>NULL</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> swr_init(swrCtx_);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>AVFrame</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* outFrame = av_frame_alloc();</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:green'>//Allocate an AVFrame and set its fields to default values.</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (!outFrame)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nunable to release the avframe resources for outframe"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> av_frame_copy_props(outFrame, inFrame);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outFrame->channel_layout = outAVCodecContext->channel_layout;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outFrame->format = outAVCodecContext->sample_fmt;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outFrame->sample_rate = outAVCodecContext->sample_rate;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> swr_convert_frame(swrCtx_, outFrame, inFrame);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>AVPacket</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>* outPacket = av_packet_alloc();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> got_packet_ptr;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> avcodec_encode_audio2(outAVCodecContext, outPacket, outFrame, &got_packet_ptr);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (got_packet_ptr) {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> std::cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outPacket->pts </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"; "</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outPacket->dts </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\n"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> outPacket->stream_index = videoSteamIndex;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (av_write_frame(outAVFormatContext, outPacket) != 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in writing audio frame"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }</span><span style='font-size:9.5pt;font-family:Consolas;color:green'>// End of while-loop<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:green'><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:35.4pt;text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> value = av_write_trailer(outAVFormatContext);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:blue'>if</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> (value < 0)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> cout </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:teal'><<</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:#A31515'>"\nerror in writing av trailer"</span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'> </span><span style='font-size:9.5pt;font-family:Consolas;color:black'>exit(1);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'> }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>I’m sure there is a very big design flaw in this bur I can’t find it to be honest.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB>The method </span><span lang=EN-GB style='font-size:9.5pt;font-family:Consolas;color:black'>init_outputfile(..) </span><span lang=EN-GB>should work just fine, but this is the only part I’m sure about.<br><br>I hope someone can help me as this should be a very basic flaw…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB>Sebastian Wichmann<o:p></o:p></span></p></div></body></html>