diff options
author | Uoti Urpala <uau@mplayer2.org> | 2011-08-21 22:13:49 +0300 |
---|---|---|
committer | Uoti Urpala <uau@mplayer2.org> | 2011-08-21 22:20:07 +0300 |
commit | da2b884c703d6cf7ef6ee3d496d1ba884e62dd13 (patch) | |
tree | 4871ffdb376680972d88737cddab771806183bfb /libmpcodecs | |
parent | 2c5285c15106c65f161a220476a65d53e567ba96 (diff) | |
download | mpv-da2b884c703d6cf7ef6ee3d496d1ba884e62dd13.tar.bz2 mpv-da2b884c703d6cf7ef6ee3d496d1ba884e62dd13.tar.xz |
cosmetics: ad_ffmpeg.c: reformat
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/ad_ffmpeg.c | 268 |
1 files changed, 137 insertions, 131 deletions
diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c index fb2d94dbfd..cbd18fddaf 100644 --- a/libmpcodecs/ad_ffmpeg.c +++ b/libmpcodecs/ad_ffmpeg.c @@ -20,6 +20,8 @@ #include <stdlib.h> #include <unistd.h> +#include <libavcodec/avcodec.h> + #include "config.h" #include "mp_msg.h" #include "options.h" @@ -31,24 +33,19 @@ static const ad_info_t info = { - "FFmpeg/libavcodec audio decoders", - "ffmpeg", - "Nick Kurshev", - "ffmpeg.sf.net", - "" + "FFmpeg/libavcodec audio decoders", + "ffmpeg", + "Nick Kurshev", + "ffmpeg.sf.net", + "" }; LIBAD_EXTERN(ffmpeg) -#define assert(x) - -#include "libavcodec/avcodec.h" - - static int preinit(sh_audio_t *sh) { - sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; - return 1; + sh->audio_out_minsize = AVCODEC_MAX_AUDIO_FRAME_SIZE; + return 1; } /* Prefer playing audio with the samplerate given in container data @@ -56,16 +53,17 @@ static int preinit(sh_audio_t *sh) * from the codec, since if the codec isn't using the correct values for * those everything breaks anyway. */ -static int setup_format(sh_audio_t *sh_audio, const AVCodecContext *lavc_context) +static int setup_format(sh_audio_t *sh_audio, + const AVCodecContext *lavc_context) { int sample_format = sh_audio->sample_format; switch (lavc_context->sample_fmt) { - case SAMPLE_FMT_U8: sample_format = AF_FORMAT_U8; break; - case SAMPLE_FMT_S16: sample_format = AF_FORMAT_S16_NE; break; - case SAMPLE_FMT_S32: sample_format = AF_FORMAT_S32_NE; break; - case SAMPLE_FMT_FLT: sample_format = AF_FORMAT_FLOAT_NE; break; - default: - mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Unsupported sample format\n"); + case SAMPLE_FMT_U8: sample_format = AF_FORMAT_U8; break; + case SAMPLE_FMT_S16: sample_format = AF_FORMAT_S16_NE; break; + case SAMPLE_FMT_S32: sample_format = AF_FORMAT_S32_NE; break; + case SAMPLE_FMT_FLT: sample_format = AF_FORMAT_FLOAT_NE; break; + default: + mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Unsupported sample format\n"); } bool broken_srate = false; @@ -82,10 +80,10 @@ static int setup_format(sh_audio_t *sh_audio, const AVCodecContext *lavc_context if (lavc_context->channels != sh_audio->channels || samplerate != sh_audio->samplerate || sample_format != sh_audio->sample_format) { - sh_audio->channels=lavc_context->channels; - sh_audio->samplerate=samplerate; + sh_audio->channels = lavc_context->channels; + sh_audio->samplerate = samplerate; sh_audio->sample_format = sample_format; - sh_audio->samplesize=af_fmt2bits(sh_audio->sample_format)/ 8; + sh_audio->samplesize = af_fmt2bits(sh_audio->sample_format) / 8; if (broken_srate) mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Ignoring broken container sample rate for AAC with SBR\n"); @@ -100,26 +98,28 @@ static int init(sh_audio_t *sh_audio) AVCodecContext *lavc_context; AVCodec *lavc_codec; - mp_msg(MSGT_DECAUDIO,MSGL_V,"FFmpeg's libavcodec audio codec\n"); + mp_msg(MSGT_DECAUDIO, MSGL_V, "FFmpeg's libavcodec audio codec\n"); lavc_codec = avcodec_find_decoder_by_name(sh_audio->codec->dll); - if(!lavc_codec){ - mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"Cannot find codec '%s' in libavcodec...\n",sh_audio->codec->dll); - return 0; + if (!lavc_codec) { + mp_tmsg(MSGT_DECAUDIO, MSGL_ERR, + "Cannot find codec '%s' in libavcodec...\n", + sh_audio->codec->dll); + return 0; } lavc_context = avcodec_alloc_context(); - sh_audio->context=lavc_context; + sh_audio->context = lavc_context; lavc_context->drc_scale = opts->drc_level; lavc_context->sample_rate = sh_audio->samplerate; lavc_context->bit_rate = sh_audio->i_bps * 8; - if(sh_audio->wf){ - lavc_context->channels = sh_audio->wf->nChannels; - lavc_context->sample_rate = sh_audio->wf->nSamplesPerSec; - lavc_context->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; - lavc_context->block_align = sh_audio->wf->nBlockAlign; - lavc_context->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; + if (sh_audio->wf) { + lavc_context->channels = sh_audio->wf->nChannels; + lavc_context->sample_rate = sh_audio->wf->nSamplesPerSec; + lavc_context->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; + lavc_context->block_align = sh_audio->wf->nBlockAlign; + lavc_context->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; } lavc_context->request_channels = opts->audio_output_channels; lavc_context->codec_tag = sh_audio->format; //FOURCC @@ -135,8 +135,8 @@ static int init(sh_audio_t *sh_audio) } // for QDM2 - if (sh_audio->codecdata_len && sh_audio->codecdata && !lavc_context->extradata) - { + if (sh_audio->codecdata_len && sh_audio->codecdata && + !lavc_context->extradata) { lavc_context->extradata = av_malloc(sh_audio->codecdata_len + FF_INPUT_BUFFER_PADDING_SIZE); lavc_context->extradata_size = sh_audio->codecdata_len; @@ -146,52 +146,51 @@ static int init(sh_audio_t *sh_audio) /* open it */ if (avcodec_open(lavc_context, lavc_codec) < 0) { - mp_tmsg(MSGT_DECAUDIO,MSGL_ERR, "Could not open codec.\n"); + mp_tmsg(MSGT_DECAUDIO, MSGL_ERR, "Could not open codec.\n"); return 0; } - mp_msg(MSGT_DECAUDIO,MSGL_V,"INFO: libavcodec \"%s\" init OK!\n", lavc_codec->name); + mp_msg(MSGT_DECAUDIO, MSGL_V, "INFO: libavcodec \"%s\" init OK!\n", + lavc_codec->name); -// printf("\nFOURCC: 0x%X\n",sh_audio->format); - if(sh_audio->format==0x3343414D){ - // MACE 3:1 - sh_audio->ds->ss_div = 2*3; // 1 samples/packet - sh_audio->ds->ss_mul = 2*sh_audio->wf->nChannels; // 1 byte*ch/packet - } else - if(sh_audio->format==0x3643414D){ - // MACE 6:1 - sh_audio->ds->ss_div = 2*6; // 1 samples/packet - sh_audio->ds->ss_mul = 2*sh_audio->wf->nChannels; // 1 byte*ch/packet - } + if (sh_audio->format == 0x3343414D) { + // MACE 3:1 + sh_audio->ds->ss_div = 2 * 3; // 1 samples/packet + sh_audio->ds->ss_mul = 2 * sh_audio->wf->nChannels; // 1 byte*ch/packet + } else if (sh_audio->format == 0x3643414D) { + // MACE 6:1 + sh_audio->ds->ss_div = 2 * 6; // 1 samples/packet + sh_audio->ds->ss_mul = 2 * sh_audio->wf->nChannels; // 1 byte*ch/packet + } - // Decode at least 1 byte: (to get header filled) - for (int tries = 0;;) { - int x = decode_audio(sh_audio, sh_audio->a_buffer, 1, - sh_audio->a_buffer_size); - if (x > 0) { - sh_audio->a_buffer_len = x; - break; - } - if (++tries >= 5) { - mp_msg(MSGT_DECAUDIO, MSGL_ERR, - "ad_ffmpeg: initial decode failed\n"); - return 0; - } - } + // Decode at least 1 byte: (to get header filled) + for (int tries = 0;;) { + int x = decode_audio(sh_audio, sh_audio->a_buffer, 1, + sh_audio->a_buffer_size); + if (x > 0) { + sh_audio->a_buffer_len = x; + break; + } + if (++tries >= 5) { + mp_msg(MSGT_DECAUDIO, MSGL_ERR, + "ad_ffmpeg: initial decode failed\n"); + return 0; + } + } - sh_audio->i_bps=lavc_context->bit_rate/8; - if (sh_audio->wf && sh_audio->wf->nAvgBytesPerSec) - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->i_bps = lavc_context->bit_rate / 8; + if (sh_audio->wf && sh_audio->wf->nAvgBytesPerSec) + sh_audio->i_bps = sh_audio->wf->nAvgBytesPerSec; - switch (lavc_context->sample_fmt) { - case SAMPLE_FMT_U8: - case SAMPLE_FMT_S16: - case SAMPLE_FMT_S32: - case SAMPLE_FMT_FLT: - break; - default: - return 0; - } - return 1; + switch (lavc_context->sample_fmt) { + case SAMPLE_FMT_U8: + case SAMPLE_FMT_S16: + case SAMPLE_FMT_S32: + case SAMPLE_FMT_FLT: + break; + default: + return 0; + } + return 1; } static void uninit(sh_audio_t *sh) @@ -199,77 +198,84 @@ static void uninit(sh_audio_t *sh) AVCodecContext *lavc_context = sh->context; if (avcodec_close(lavc_context) < 0) - mp_tmsg(MSGT_DECVIDEO, MSGL_ERR, "Could not close codec.\n"); + mp_tmsg(MSGT_DECVIDEO, MSGL_ERR, "Could not close codec.\n"); av_freep(&lavc_context->extradata); av_freep(&lavc_context); } -static int control(sh_audio_t *sh,int cmd,void* arg, ...) +static int control(sh_audio_t *sh, int cmd, void *arg, ...) { AVCodecContext *lavc_context = sh->context; - switch(cmd){ + switch (cmd) { case ADCTRL_RESYNC_STREAM: avcodec_flush_buffers(lavc_context); ds_clear_parser(sh->ds); - return CONTROL_TRUE; + return CONTROL_TRUE; } return CONTROL_UNKNOWN; } -static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen) +static int decode_audio(sh_audio_t *sh_audio, unsigned char *buf, int minlen, + int maxlen) { - unsigned char *start=NULL; - int y,len=-1; - while(len<minlen){ - AVPacket pkt; - int len2=maxlen; - double pts; - int x=ds_get_packet_pts(sh_audio->ds,&start, &pts); - if(x<=0) { - start = NULL; - x = 0; - ds_parse(sh_audio->ds, &start, &x, MP_NOPTS_VALUE, 0); - if (x <= 0) - break; // error - } else { - int in_size = x; - int consumed = ds_parse(sh_audio->ds, &start, &x, pts, 0); - sh_audio->ds->buffer_pos -= in_size - consumed; - } - av_init_packet(&pkt); - pkt.data = start; - pkt.size = x; - if (pts != MP_NOPTS_VALUE) { - sh_audio->pts = pts; - sh_audio->pts_bytes = 0; - } - y=avcodec_decode_audio3(sh_audio->context,(int16_t*)buf,&len2,&pkt); -//printf("return:%d samples_out:%d bitstream_in:%d sample_sum:%d\n", y, len2, x, len); fflush(stdout); - // LATM may need many packets to find mux info - if (y == AVERROR(EAGAIN)) - continue; - if(y<0){ mp_msg(MSGT_DECAUDIO,MSGL_V,"lavc_audio: error\n");break; } - if(!sh_audio->parser && y<x) - sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!) - if(len2>0){ - if (((AVCodecContext *)sh_audio->context)->channels >= 5) { - int samplesize = av_get_bits_per_sample_format(((AVCodecContext *) - sh_audio->context)->sample_fmt) / 8; - reorder_channel_nch(buf, AF_CHANNEL_LAYOUT_LAVC_DEFAULT, - AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, - ((AVCodecContext *)sh_audio->context)->channels, - len2 / samplesize, samplesize); - } - //len=len2;break; - if(len<0) len=len2; else len+=len2; - buf+=len2; - maxlen -= len2; - sh_audio->pts_bytes += len2; - } - mp_dbg(MSGT_DECAUDIO,MSGL_DBG2,"Decoded %d -> %d \n",y,len2); + AVCodecContext *avctx = sh_audio->context; + + unsigned char *start = NULL; + int y, len = -1; + while (len < minlen) { + AVPacket pkt; + int len2 = maxlen; + double pts; + int x = ds_get_packet_pts(sh_audio->ds, &start, &pts); + if (x <= 0) { + start = NULL; + x = 0; + ds_parse(sh_audio->ds, &start, &x, MP_NOPTS_VALUE, 0); + if (x <= 0) + break; // error + } else { + int in_size = x; + int consumed = ds_parse(sh_audio->ds, &start, &x, pts, 0); + sh_audio->ds->buffer_pos -= in_size - consumed; + } + av_init_packet(&pkt); + pkt.data = start; + pkt.size = x; + if (pts != MP_NOPTS_VALUE) { + sh_audio->pts = pts; + sh_audio->pts_bytes = 0; + } + y = avcodec_decode_audio3(avctx, (int16_t *)buf, &len2, &pkt); + // LATM may need many packets to find mux info + if (y == AVERROR(EAGAIN)) + continue; + if (y < 0) { + mp_msg(MSGT_DECAUDIO, MSGL_V, "lavc_audio: error\n"); + break; + } + if (!sh_audio->parser && y < x) + sh_audio->ds->buffer_pos += y - x; // put back data (HACK!) + if (len2 > 0) { + if (avctx->channels >= 5) { + int samplesize = av_get_bits_per_sample_format( + avctx->sample_fmt) / 8; + reorder_channel_nch(buf, AF_CHANNEL_LAYOUT_LAVC_DEFAULT, + AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, + avctx->channels, + len2 / samplesize, samplesize); + } + if (len < 0) + len = len2; + else + len += len2; + buf += len2; + maxlen -= len2; + sh_audio->pts_bytes += len2; + } + mp_dbg(MSGT_DECAUDIO, MSGL_DBG2, "Decoded %d -> %d \n", y, len2); - if (setup_format(sh_audio, sh_audio->context)) + if (setup_format(sh_audio, avctx)) break; } - return len; + return len; } |