<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><div>I meet a strange quesiton when I use ffmeg to decode aac files.</div><div><br></div><div>void avcodec_string2(char *buf, int buf_size, AVCodecContext *enc, int encode)<br>{<br>    const char *codec_type;<br>    const char *codec_name;<br>    const char *profile = NULL;<br>    int64_t bitrate;<br>    int new_line = 0;<br>    AVRational display_aspect_ratio;<br>    const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";</div><div>    if (!buf || buf_size <= 0)<br>        return;<br>    codec_type = av_get_media_type_string(enc->codec_type);<br>    codec_name = avcodec_get_name(enc->codec_id);<br>    profile = avcodec_profile_name(enc->codec_id, enc->profile);</div><div>    snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown",<br>             codec_name);<br>    buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */</div><div>    if (enc->codec && strcmp(enc->codec->name, codec_name))<br>        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name);</div><div>    if (profile)<br>        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile);</div><div>    return;<br>}</div><div>int aac_decoder_demo(char *url)  <br>{  <br>    AVFormatContext *pFormatCtx;  <br>    int             i, audioStream; <br>    AVStream *pInStream;<br>    AVCodecContext  *pCodecCtx;  <br>    AVCodec         *pCodec;  <br>    AVPacket        *packet;  <br>    uint8_t         *out_buffer;  <br>    AVFrame         *pFrame;  <br>    int ret;  <br>    uint32_t len = 0;  <br>    int got_picture;  <br>    int index = 0;  <br>    int64_t in_channel_layout;  <br>    struct SwrContext *au_convert_ctx;  <br>  <br>    FILE *pFile=fopen("../out/output.pcm", "wb"); </div><div>  <br>    av_register_all();  <br>    avformat_network_init(); </div><div><br>    //Open  <br>    pFormatCtx = avformat_alloc_context();  <br>    if(avformat_open_input(&pFormatCtx, url, NULL, NULL)!=0)<br>    {  <br>        printf("Couldn't open input stream.\n");  <br>        return -1;  <br>    }<br>    // Retrieve stream information  <br>    if(avformat_find_stream_info(pFormatCtx,NULL) < 0)<br>    {  <br>        printf("Couldn't find stream information.\n");  <br>        return -1;  <br>    }  <br>    // Dump valid information onto standard error  <br>    av_dump_format(pFormatCtx, 0, url, false);  <br>  <br>    // Find the first audio stream  <br>    audioStream = -1;  <br>    for(i = 0; i < pFormatCtx->nb_streams; i++)  <br>    {<br>        if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)<br>        {  <br>            printf("get audio stream at [%d / %d].\n", i, pFormatCtx->nb_streams); <br>            audioStream=i;             <br>            break;  <br>        }  <br>    }<br>    <br>    if(audioStream==-1)<br>    {  <br>        printf("Didn't find a audio stream.\n");  <br>        return -1;  <br>    } </div><div><br>    pInStream = pFormatCtx->streams[audioStream];<br>   <br>    // Get a pointer to the codec context for the audio stream  <br>    pCodecCtx = pInStream->codec;<br>    if (NULL == pCodecCtx)<br>    {<br>        printf("pCodecCtx is NULL\n");  <br>        return -1;<br>        <br>    }<br>    printf("AVCodecContext[Line:%d]: mediaType[%d] codecID[%d] Profile[%d] SR[%d] channels[%d] channel_layout[%d] \n", <br>           __LINE__,  pCodecCtx->codec_type, pCodecCtx->codec_id, pCodecCtx->profile, pCodecCtx->sample_rate,<br>           pCodecCtx->channels, pCodecCtx->channel_layout);</div><div>    <br>    char debugBuf[1024];<br>    my_avcodec_string(debugBuf, sizeof(debugBuf), pCodecCtx);<br>    printf("my_avcodec_string: %s\n", debugBuf);</div><div><br>    // user avcodec_string in LIB, parse OK<br>    avcodec_string(debugBuf, sizeof(debugBuf), pCodecCtx, false);<br> printf("avcodec_string: %s\n", debugBuf);<br>    <br>    avcodec_string2(debugBuf, sizeof(debugBuf), pCodecCtx, false);<br>    printf("avcodec_string2: %s\n", debugBuf);</div><div><br></div><div>    printf("AVCodecContext[Line:%d]: mediaType[%d] codecID[%d] Profile[%d] SR[%d] channels[%d] channel_layout[%d] \n", <br>           __LINE__,  pCodecCtx->codec_type, pCodecCtx->codec_id, pCodecCtx->profile, pCodecCtx->sample_rate,<br>           pCodecCtx->channels, pCodecCtx->channel_layout);</div><div>}<br></div><div><br></div><div><br></div><div>and the output is</div><div>AVCodecContext[Line:498]: mediaType[1] codecID[86018] Profile[0] <font color="#ff0000">SR[0] channels[0] channel_layout[1]</font> <br>my_avcodec_string: Audio: aac (<font color="#ff0000">Main</font>)1 channels (<font color="#ff0000">FL</font>), <font color="#ff0000">u8, 30601641984 kb/s</font><br><strong><font color="#000000">avcodec_string: Audio: aac (LC), 12000 Hz, mono, fltp, 7 kb/s</font></strong><br>avcodec_string2: Audio: aac (Main)<br>AVCodecContext[Line:517]: mediaType[1] codecID[86018] Profile[0] SR[0] channels[0] channel_layout[1]</div><div><br></div><div>Except codec_type, codec_id, others(profile, sample_rate, channels etc) is wrong.</div><div>only use avcodec_string can get right value for enc->profile, enc->sample_rate etc, any one know the reason?</div><div>thanks very much! <img src="http://mimg.163.com/jy3style/lib/htmlEditor/portrait/face/preview/face0.gif" _src="http://mimg.163.com/jy3style/lib/htmlEditor/portrait/face/preview/face0.gif"></div><div><br></div><div></div><div></div><div></div></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><p> </p></span>