X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Futils.c;h=b5b04666502229b9c242131452511f3bb529bbdc;hb=eb239a577fcf1f19cdaa7aeb6e6586a172ee59c1;hp=a638bbfc91a0b4ddc1b6aced38f239a3b6c8213c;hpb=a1977e0103d23212b842e8398baaf0269891d9e5;p=ffmpeg diff --git a/libavcodec/utils.c b/libavcodec/utils.c index a638bbfc91a..b5b04666502 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -96,7 +96,8 @@ void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size) /* encoder management */ static AVCodec *first_avcodec = NULL; -AVCodec *av_codec_next(AVCodec *c){ +AVCodec *av_codec_next(const AVCodec *c) +{ if(c) return c->next; else return first_avcodec; } @@ -112,12 +113,12 @@ static void avcodec_init(void) ff_dsputil_static_init(); } -int av_codec_is_encoder(AVCodec *codec) +int av_codec_is_encoder(const AVCodec *codec) { return codec && (codec->encode || codec->encode2); } -int av_codec_is_decoder(AVCodec *codec) +int av_codec_is_decoder(const AVCodec *codec) { return codec && codec->decode; } @@ -143,8 +144,8 @@ unsigned avcodec_get_edge_width(void) void avcodec_set_dimensions(AVCodecContext *s, int width, int height){ s->coded_width = width; s->coded_height= height; - s->width = -((-width )>>s->lowres); - s->height= -((-height)>>s->lowres); + s->width = width; + s->height = height; } #define INTERNAL_BUFFER_SIZE (32+1) @@ -197,25 +198,25 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, h_align=8; break; case PIX_FMT_YUV410P: - if(s->codec_id == CODEC_ID_SVQ1){ + if(s->codec_id == AV_CODEC_ID_SVQ1){ w_align=64; h_align=64; } case PIX_FMT_RGB555: - if(s->codec_id == CODEC_ID_RPZA){ + if(s->codec_id == AV_CODEC_ID_RPZA){ w_align=4; h_align=4; } case PIX_FMT_PAL8: case PIX_FMT_BGR8: case PIX_FMT_RGB8: - if(s->codec_id == CODEC_ID_SMC){ + if(s->codec_id == AV_CODEC_ID_SMC){ w_align=4; h_align=4; } break; case PIX_FMT_BGR24: - if((s->codec_id == CODEC_ID_MSZH) || (s->codec_id == CODEC_ID_ZLIB)){ + if((s->codec_id == AV_CODEC_ID_MSZH) || (s->codec_id == AV_CODEC_ID_ZLIB)){ w_align=4; h_align=4; } @@ -228,9 +229,8 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, *width = FFALIGN(*width , w_align); *height= FFALIGN(*height, h_align); - if(s->codec_id == CODEC_ID_H264 || s->lowres) + if (s->codec_id == AV_CODEC_ID_H264) *height+=2; // some of the optimized chroma MC reads one line too much - // which is also done in mpeg decoders with lowres > 0 for (i = 0; i < 4; i++) linesize_align[i] = STRIDE_ALIGN; @@ -292,7 +292,7 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) buf_size = av_samples_get_buffer_size(NULL, avctx->channels, frame->nb_samples, avctx->sample_fmt, - 32); + 0); if (buf_size < 0) return AVERROR(EINVAL); @@ -334,7 +334,7 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) } if ((ret = avcodec_fill_audio_frame(frame, avctx->channels, avctx->sample_fmt, buf->data[0], - buf->audio_data_size, 32))) + buf->audio_data_size, 0))) return ret; if (frame->extended_data == frame->data) @@ -357,6 +357,10 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) else frame->pkt_pts = AV_NOPTS_VALUE; frame->reordered_opaque = avctx->reordered_opaque; + frame->sample_rate = avctx->sample_rate; + frame->format = avctx->sample_fmt; + frame->channel_layout = avctx->channel_layout; + if (avctx->debug & FF_DEBUG_BUFFERS) av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p, " "internal audio buffer used\n", frame); @@ -392,11 +396,6 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic) buf = &avci->buffer[avci->buffer_count]; if(buf->base[0] && (buf->width != w || buf->height != h || buf->pix_fmt != s->pix_fmt)){ - if(s->active_thread_type&FF_THREAD_FRAME) { - av_log_missing_feature(s, "Width/height changing with frame threads is", 0); - return -1; - } - for (i = 0; i < AV_NUM_DATA_POINTERS; i++) { av_freep(&buf->base[i]); buf->data[i]= NULL; @@ -480,6 +479,10 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic) } pic->extended_data = pic->data; avci->buffer_count++; + pic->width = buf->width; + pic->height = buf->height; + pic->format = buf->pix_fmt; + pic->sample_aspect_ratio = s->sample_aspect_ratio; if(s->pkt) pic->pkt_pts= s->pkt->pts; else pic->pkt_pts= AV_NOPTS_VALUE; @@ -625,7 +628,7 @@ AVFrame *avcodec_alloc_frame(void){ return pic; } -int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) +int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) { int ret = 0; AVDictionary *tmp = NULL; @@ -715,7 +718,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD avctx->codec = codec; if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) && - avctx->codec_id == CODEC_ID_NONE) { + avctx->codec_id == AV_CODEC_ID_NONE) { avctx->codec_type = codec->type; avctx->codec_id = codec->id; } @@ -742,12 +745,6 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD if (!HAVE_THREADS && !(codec->capabilities & CODEC_CAP_AUTO_THREADS)) avctx->thread_count = 1; - if (avctx->codec->max_lowres < avctx->lowres) { - av_log(avctx, AV_LOG_ERROR, "The maximum value for lowres supported by the decoder is %d\n", - avctx->codec->max_lowres); - ret = AVERROR(EINVAL); - goto free_and_end; - } if (av_codec_is_encoder(avctx->codec)) { int i; if (avctx->codec->sample_fmts) { @@ -811,6 +808,15 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD goto free_and_end; } } + + if (av_codec_is_decoder(avctx->codec)) { + /* validate channel layout from the decoder */ + if (avctx->channel_layout && + av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) { + av_log(avctx, AV_LOG_WARNING, "channel layout does not match number of channels\n"); + avctx->channel_layout = 0; + } + } end: entangled_thread_counter--; @@ -852,41 +858,110 @@ int ff_alloc_packet(AVPacket *avpkt, int size) } } +/** + * Pad last frame with silence. + */ +static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src) +{ + AVFrame *frame = NULL; + uint8_t *buf = NULL; + int ret; + + if (!(frame = avcodec_alloc_frame())) + return AVERROR(ENOMEM); + *frame = *src; + + if ((ret = av_samples_get_buffer_size(&frame->linesize[0], s->channels, + s->frame_size, s->sample_fmt, 0)) < 0) + goto fail; + + if (!(buf = av_malloc(ret))) { + ret = AVERROR(ENOMEM); + goto fail; + } + + frame->nb_samples = s->frame_size; + if ((ret = avcodec_fill_audio_frame(frame, s->channels, s->sample_fmt, + buf, ret, 0)) < 0) + goto fail; + if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0, + src->nb_samples, s->channels, s->sample_fmt)) < 0) + goto fail; + if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples, + frame->nb_samples - src->nb_samples, + s->channels, s->sample_fmt)) < 0) + goto fail; + + *dst = frame; + + return 0; + +fail: + if (frame->extended_data != frame->data) + av_freep(&frame->extended_data); + av_freep(&buf); + av_freep(&frame); + return ret; +} + int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { + AVFrame tmp; + AVFrame *padded_frame = NULL; int ret; int user_packet = !!avpkt->data; - int nb_samples; *got_packet_ptr = 0; if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) { av_free_packet(avpkt); av_init_packet(avpkt); - avpkt->size = 0; return 0; } + /* ensure that extended_data is properly set */ + if (frame && !frame->extended_data) { + if (av_sample_fmt_is_planar(avctx->sample_fmt) && + avctx->channels > AV_NUM_DATA_POINTERS) { + av_log(avctx, AV_LOG_ERROR, "Encoding to a planar sample format, " + "with more than %d channels, but extended_data is not set.\n", + AV_NUM_DATA_POINTERS); + return AVERROR(EINVAL); + } + av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n"); + + tmp = *frame; + tmp.extended_data = tmp.data; + frame = &tmp; + } + /* check for valid frame size */ if (frame) { - nb_samples = frame->nb_samples; if (avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) { - if (nb_samples > avctx->frame_size) + if (frame->nb_samples > avctx->frame_size) return AVERROR(EINVAL); } else if (!(avctx->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) { - if (nb_samples != avctx->frame_size) + if (frame->nb_samples < avctx->frame_size && + !avctx->internal->last_audio_frame) { + ret = pad_last_frame(avctx, &padded_frame, frame); + if (ret < 0) + return ret; + + frame = padded_frame; + avctx->internal->last_audio_frame = 1; + } + + if (frame->nb_samples != avctx->frame_size) return AVERROR(EINVAL); } - } else { - nb_samples = avctx->frame_size; } - if (avctx->codec->encode2) { - ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr); - if (!ret && *got_packet_ptr) { + ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr); + if (!ret) { + if (*got_packet_ptr) { if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) { if (avpkt->pts == AV_NOPTS_VALUE) avpkt->pts = frame->pts; @@ -898,70 +973,8 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, } else { avpkt->size = 0; } - } else { - /* for compatibility with encoders not supporting encode2(), we need to - allocate a packet buffer if the user has not provided one or check - the size otherwise */ - int fs_tmp = 0; - int buf_size = avpkt->size; - if (!user_packet) { - if (avctx->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE) { - av_assert0(av_get_bits_per_sample(avctx->codec_id) != 0); - buf_size = nb_samples * avctx->channels * - av_get_bits_per_sample(avctx->codec_id) / 8; - } else { - /* this is a guess as to the required size. - if an encoder needs more than this, it should probably - implement encode2() */ - buf_size = 2 * avctx->frame_size * avctx->channels * - av_get_bytes_per_sample(avctx->sample_fmt); - buf_size += FF_MIN_BUFFER_SIZE; - } - } - if ((ret = ff_alloc_packet(avpkt, buf_size))) - return ret; - - /* Encoders using AVCodec.encode() that support - CODEC_CAP_SMALL_LAST_FRAME require avctx->frame_size to be set to - the smaller size when encoding the last frame. - This code can be removed once all encoders supporting - CODEC_CAP_SMALL_LAST_FRAME use encode2() */ - if ((avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) && - nb_samples < avctx->frame_size) { - fs_tmp = avctx->frame_size; - avctx->frame_size = nb_samples; - } - /* encode the frame */ - ret = avctx->codec->encode(avctx, avpkt->data, avpkt->size, - frame ? frame->data[0] : NULL); - if (ret >= 0) { - if (!ret) { - /* no output. if the packet data was allocated by libavcodec, - free it */ - if (!user_packet) - av_freep(&avpkt->data); - } else { - if (avctx->coded_frame) - avpkt->pts = avpkt->dts = avctx->coded_frame->pts; - /* Set duration for final small packet. This can be removed - once all encoders supporting CODEC_CAP_SMALL_LAST_FRAME use - encode2() */ - if (fs_tmp) { - avpkt->duration = ff_samples_to_time_base(avctx, - avctx->frame_size); - } - } - avpkt->size = ret; - *got_packet_ptr = (ret > 0); - ret = 0; - } - - if (fs_tmp) - avctx->frame_size = fs_tmp; - } - if (!ret) { - if (!user_packet && avpkt->data) { + if (!user_packet && avpkt->size) { uint8_t *new_data = av_realloc(avpkt->data, avpkt->size); if (new_data) avpkt->data = new_data; @@ -970,14 +983,24 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, avctx->frame_number++; } - if (ret < 0 || !*got_packet_ptr) + if (ret < 0 || !*got_packet_ptr) { av_free_packet(avpkt); + av_init_packet(avpkt); + return ret; + } /* NOTE: if we add any audio encoders which output non-keyframe packets, this needs to be moved to the encoders, but for now we can do it here to simplify things */ avpkt->flags |= AV_PKT_FLAG_KEY; + if (padded_frame) { + av_freep(&padded_frame->data[0]); + if (padded_frame->extended_data != padded_frame->data) + av_freep(&padded_frame->extended_data); + av_freep(&padded_frame); + } + return ret; } @@ -1025,7 +1048,8 @@ int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx, avctx->sample_fmt, 1); if ((ret = avcodec_fill_audio_frame(frame, avctx->channels, avctx->sample_fmt, - samples, samples_size, 1))) + (const uint8_t *) samples, + samples_size, 1))) return ret; /* fabricate frame pts from sample count. @@ -1124,7 +1148,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, else if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) avpkt->pts = avpkt->dts = frame->pts; - if (!user_packet && avpkt->data) { + if (!user_packet && avpkt->size) { uint8_t *new_data = av_realloc(avpkt->data, avpkt->size); if (new_data) avpkt->data = new_data; @@ -1387,7 +1411,7 @@ av_cold int avcodec_close(AVCodecContext *avctx) return 0; } -AVCodec *avcodec_find_encoder(enum CodecID id) +AVCodec *avcodec_find_encoder(enum AVCodecID id) { AVCodec *p, *experimental=NULL; p = first_avcodec; @@ -1417,7 +1441,7 @@ AVCodec *avcodec_find_encoder_by_name(const char *name) return NULL; } -AVCodec *avcodec_find_decoder(enum CodecID id) +AVCodec *avcodec_find_decoder(enum AVCodecID id) { AVCodec *p; p = first_avcodec; @@ -1485,12 +1509,14 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) { const char *codec_name; const char *profile = NULL; - AVCodec *p; + const AVCodec *p; char buf1[32]; int bitrate; AVRational display_aspect_ratio; - if (encode) + if (enc->codec) + p = enc->codec; + else if (encode) p = avcodec_find_encoder(enc->codec_id); else p = avcodec_find_decoder(enc->codec_id); @@ -1498,7 +1524,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) if (p) { codec_name = p->name; profile = av_get_profile_name(p, enc->profile); - } else if (enc->codec_id == CODEC_ID_MPEG2TS) { + } else if (enc->codec_id == AV_CODEC_ID_MPEG2TS) { /* fake mpeg2 transport stream codec (currently not registered) */ codec_name = "mpeg2ts"; @@ -1688,61 +1714,61 @@ void avcodec_default_free_buffers(AVCodecContext *avctx) } } -int av_get_exact_bits_per_sample(enum CodecID codec_id) +int av_get_exact_bits_per_sample(enum AVCodecID codec_id) { switch(codec_id){ - case CODEC_ID_ADPCM_CT: - case CODEC_ID_ADPCM_IMA_APC: - case CODEC_ID_ADPCM_IMA_EA_SEAD: - case CODEC_ID_ADPCM_IMA_WS: - case CODEC_ID_ADPCM_G722: - case CODEC_ID_ADPCM_YAMAHA: + case AV_CODEC_ID_ADPCM_CT: + case AV_CODEC_ID_ADPCM_IMA_APC: + case AV_CODEC_ID_ADPCM_IMA_EA_SEAD: + case AV_CODEC_ID_ADPCM_IMA_WS: + case AV_CODEC_ID_ADPCM_G722: + case AV_CODEC_ID_ADPCM_YAMAHA: return 4; - case CODEC_ID_PCM_ALAW: - case CODEC_ID_PCM_MULAW: - case CODEC_ID_PCM_S8: - case CODEC_ID_PCM_U8: - case CODEC_ID_PCM_ZORK: + case AV_CODEC_ID_PCM_ALAW: + case AV_CODEC_ID_PCM_MULAW: + case AV_CODEC_ID_PCM_S8: + case AV_CODEC_ID_PCM_U8: + case AV_CODEC_ID_PCM_ZORK: return 8; - case CODEC_ID_PCM_S16BE: - case CODEC_ID_PCM_S16LE: - case CODEC_ID_PCM_S16LE_PLANAR: - case CODEC_ID_PCM_U16BE: - case CODEC_ID_PCM_U16LE: + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_S16LE: + case AV_CODEC_ID_PCM_S16LE_PLANAR: + case AV_CODEC_ID_PCM_U16BE: + case AV_CODEC_ID_PCM_U16LE: return 16; - case CODEC_ID_PCM_S24DAUD: - case CODEC_ID_PCM_S24BE: - case CODEC_ID_PCM_S24LE: - case CODEC_ID_PCM_U24BE: - case CODEC_ID_PCM_U24LE: + case AV_CODEC_ID_PCM_S24DAUD: + case AV_CODEC_ID_PCM_S24BE: + case AV_CODEC_ID_PCM_S24LE: + case AV_CODEC_ID_PCM_U24BE: + case AV_CODEC_ID_PCM_U24LE: return 24; - case CODEC_ID_PCM_S32BE: - case CODEC_ID_PCM_S32LE: - case CODEC_ID_PCM_U32BE: - case CODEC_ID_PCM_U32LE: - case CODEC_ID_PCM_F32BE: - case CODEC_ID_PCM_F32LE: + case AV_CODEC_ID_PCM_S32BE: + case AV_CODEC_ID_PCM_S32LE: + case AV_CODEC_ID_PCM_U32BE: + case AV_CODEC_ID_PCM_U32LE: + case AV_CODEC_ID_PCM_F32BE: + case AV_CODEC_ID_PCM_F32LE: return 32; - case CODEC_ID_PCM_F64BE: - case CODEC_ID_PCM_F64LE: + case AV_CODEC_ID_PCM_F64BE: + case AV_CODEC_ID_PCM_F64LE: return 64; default: return 0; } } -int av_get_bits_per_sample(enum CodecID codec_id) +int av_get_bits_per_sample(enum AVCodecID codec_id) { switch (codec_id) { - case CODEC_ID_ADPCM_SBPRO_2: + case AV_CODEC_ID_ADPCM_SBPRO_2: return 2; - case CODEC_ID_ADPCM_SBPRO_3: + case AV_CODEC_ID_ADPCM_SBPRO_3: return 3; - case CODEC_ID_ADPCM_SBPRO_4: - case CODEC_ID_ADPCM_IMA_WAV: - case CODEC_ID_ADPCM_IMA_QT: - case CODEC_ID_ADPCM_SWF: - case CODEC_ID_ADPCM_MS: + case AV_CODEC_ID_ADPCM_SBPRO_4: + case AV_CODEC_ID_ADPCM_IMA_WAV: + case AV_CODEC_ID_ADPCM_IMA_QT: + case AV_CODEC_ID_ADPCM_SWF: + case AV_CODEC_ID_ADPCM_MS: return 4; default: return av_get_exact_bits_per_sample(codec_id); @@ -1767,91 +1793,96 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) /* codecs with a fixed packet duration */ switch (id) { - case CODEC_ID_ADPCM_ADX: return 32; - case CODEC_ID_ADPCM_IMA_QT: return 64; - case CODEC_ID_ADPCM_EA_XAS: return 128; - case CODEC_ID_AMR_NB: - case CODEC_ID_GSM: - case CODEC_ID_QCELP: - case CODEC_ID_RA_144: - case CODEC_ID_RA_288: return 160; - case CODEC_ID_IMC: return 256; - case CODEC_ID_AMR_WB: - case CODEC_ID_GSM_MS: return 320; - case CODEC_ID_MP1: return 384; - case CODEC_ID_ATRAC1: return 512; - case CODEC_ID_ATRAC3: return 1024; - case CODEC_ID_MP2: - case CODEC_ID_MUSEPACK7: return 1152; - case CODEC_ID_AC3: return 1536; + case AV_CODEC_ID_ADPCM_ADX: return 32; + case AV_CODEC_ID_ADPCM_IMA_QT: return 64; + case AV_CODEC_ID_ADPCM_EA_XAS: return 128; + case AV_CODEC_ID_AMR_NB: + case AV_CODEC_ID_GSM: + case AV_CODEC_ID_QCELP: + case AV_CODEC_ID_RA_144: + case AV_CODEC_ID_RA_288: return 160; + case AV_CODEC_ID_IMC: return 256; + case AV_CODEC_ID_AMR_WB: + case AV_CODEC_ID_GSM_MS: return 320; + case AV_CODEC_ID_MP1: return 384; + case AV_CODEC_ID_ATRAC1: return 512; + case AV_CODEC_ID_ATRAC3: return 1024; + case AV_CODEC_ID_MP2: + case AV_CODEC_ID_MUSEPACK7: return 1152; + case AV_CODEC_ID_AC3: return 1536; } if (sr > 0) { /* calc from sample rate */ - if (id == CODEC_ID_TTA) + if (id == AV_CODEC_ID_TTA) return 256 * sr / 245; if (ch > 0) { /* calc from sample rate and channels */ - if (id == CODEC_ID_BINKAUDIO_DCT) + if (id == AV_CODEC_ID_BINKAUDIO_DCT) return (480 << (sr / 22050)) / ch; } } if (ba > 0) { /* calc from block_align */ - if (id == CODEC_ID_SIPR) { + if (id == AV_CODEC_ID_SIPR) { switch (ba) { case 20: return 160; case 19: return 144; case 29: return 288; case 37: return 480; } + } else if (id == AV_CODEC_ID_ILBC) { + switch (ba) { + case 38: return 160; + case 50: return 240; + } } } if (frame_bytes > 0) { /* calc from frame_bytes only */ - if (id == CODEC_ID_TRUESPEECH) + if (id == AV_CODEC_ID_TRUESPEECH) return 240 * (frame_bytes / 32); - if (id == CODEC_ID_NELLYMOSER) + if (id == AV_CODEC_ID_NELLYMOSER) return 256 * (frame_bytes / 64); if (bps > 0) { /* calc from frame_bytes and bits_per_coded_sample */ - if (id == CODEC_ID_ADPCM_G726) + if (id == AV_CODEC_ID_ADPCM_G726) return frame_bytes * 8 / bps; } if (ch > 0) { /* calc from frame_bytes and channels */ switch (id) { - case CODEC_ID_ADPCM_4XM: - case CODEC_ID_ADPCM_IMA_ISS: + case AV_CODEC_ID_ADPCM_4XM: + case AV_CODEC_ID_ADPCM_IMA_ISS: return (frame_bytes - 4 * ch) * 2 / ch; - case CODEC_ID_ADPCM_IMA_SMJPEG: + case AV_CODEC_ID_ADPCM_IMA_SMJPEG: return (frame_bytes - 4) * 2 / ch; - case CODEC_ID_ADPCM_IMA_AMV: + case AV_CODEC_ID_ADPCM_IMA_AMV: return (frame_bytes - 8) * 2 / ch; - case CODEC_ID_ADPCM_XA: + case AV_CODEC_ID_ADPCM_XA: return (frame_bytes / 128) * 224 / ch; - case CODEC_ID_INTERPLAY_DPCM: + case AV_CODEC_ID_INTERPLAY_DPCM: return (frame_bytes - 6 - ch) / ch; - case CODEC_ID_ROQ_DPCM: + case AV_CODEC_ID_ROQ_DPCM: return (frame_bytes - 8) / ch; - case CODEC_ID_XAN_DPCM: + case AV_CODEC_ID_XAN_DPCM: return (frame_bytes - 2 * ch) / ch; - case CODEC_ID_MACE3: + case AV_CODEC_ID_MACE3: return 3 * frame_bytes / ch; - case CODEC_ID_MACE6: + case AV_CODEC_ID_MACE6: return 6 * frame_bytes / ch; - case CODEC_ID_PCM_LXF: + case AV_CODEC_ID_PCM_LXF: return 2 * (frame_bytes / (5 * ch)); } if (tag) { /* calc from frame_bytes, channels, and codec_tag */ - if (id == CODEC_ID_SOL_DPCM) { + if (id == AV_CODEC_ID_SOL_DPCM) { if (tag == 3) return frame_bytes / ch; else @@ -1863,13 +1894,13 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) /* calc from frame_bytes, channels, and block_align */ int blocks = frame_bytes / ba; switch (avctx->codec_id) { - case CODEC_ID_ADPCM_IMA_WAV: + case AV_CODEC_ID_ADPCM_IMA_WAV: return blocks * (1 + (ba - 4 * ch) / (4 * ch) * 8); - case CODEC_ID_ADPCM_IMA_DK3: + case AV_CODEC_ID_ADPCM_IMA_DK3: return blocks * (((ba - 16) * 2 / 3 * 4) / ch); - case CODEC_ID_ADPCM_IMA_DK4: + case AV_CODEC_ID_ADPCM_IMA_DK4: return blocks * (1 + (ba - 4 * ch) * 2 / ch); - case CODEC_ID_ADPCM_MS: + case AV_CODEC_ID_ADPCM_MS: return blocks * (2 + (ba - 7 * ch) * 2 / ch); } } @@ -1877,11 +1908,11 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) if (bps > 0) { /* calc from frame_bytes, channels, and bits_per_coded_sample */ switch (avctx->codec_id) { - case CODEC_ID_PCM_DVD: + case AV_CODEC_ID_PCM_DVD: return 2 * (frame_bytes / ((bps * 2 / 8) * ch)); - case CODEC_ID_PCM_BLURAY: + case AV_CODEC_ID_PCM_BLURAY: return frame_bytes / ((FFALIGN(ch, 2) * bps) / 8); - case CODEC_ID_S302M: + case AV_CODEC_ID_S302M: return 2 * (frame_bytes / ((bps + 4) / 4)) / ch; } } @@ -1958,7 +1989,7 @@ AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel) return hwaccel ? hwaccel->next : first_hwaccel; } -AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt) +AVHWAccel *ff_find_hwaccel(enum AVCodecID codec_id, enum PixelFormat pix_fmt) { AVHWAccel *hwaccel=NULL; @@ -2043,15 +2074,15 @@ void ff_thread_await_progress(AVFrame *f, int progress, int field) #endif -enum AVMediaType avcodec_get_type(enum CodecID codec_id) +enum AVMediaType avcodec_get_type(enum AVCodecID codec_id) { - if (codec_id <= CODEC_ID_NONE) + if (codec_id <= AV_CODEC_ID_NONE) return AVMEDIA_TYPE_UNKNOWN; - else if (codec_id < CODEC_ID_FIRST_AUDIO) + else if (codec_id < AV_CODEC_ID_FIRST_AUDIO) return AVMEDIA_TYPE_VIDEO; - else if (codec_id < CODEC_ID_FIRST_SUBTITLE) + else if (codec_id < AV_CODEC_ID_FIRST_SUBTITLE) return AVMEDIA_TYPE_AUDIO; - else if (codec_id < CODEC_ID_FIRST_UNKNOWN) + else if (codec_id < AV_CODEC_ID_FIRST_UNKNOWN) return AVMEDIA_TYPE_SUBTITLE; return AVMEDIA_TYPE_UNKNOWN;