memset(*p + min_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
}
+void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
+{
+ uint8_t **p = ptr;
+ if (min_size > SIZE_MAX - FF_INPUT_BUFFER_PADDING_SIZE) {
+ av_freep(p);
+ *size = 0;
+ return;
+ }
+ if (!ff_fast_malloc(p, size, min_size + FF_INPUT_BUFFER_PADDING_SIZE, 1))
+ memset(*p, 0, min_size + FF_INPUT_BUFFER_PADDING_SIZE);
+}
+
/* encoder management */
static AVCodec *first_avcodec = NULL;
case PIX_FMT_YUV420P9BE:
case PIX_FMT_YUV420P10LE:
case PIX_FMT_YUV420P10BE:
+ case PIX_FMT_YUV420P12LE:
+ case PIX_FMT_YUV420P12BE:
+ case PIX_FMT_YUV420P14LE:
+ case PIX_FMT_YUV420P14BE:
case PIX_FMT_YUV422P9LE:
case PIX_FMT_YUV422P9BE:
case PIX_FMT_YUV422P10LE:
case PIX_FMT_YUV422P10BE:
+ case PIX_FMT_YUV422P12LE:
+ case PIX_FMT_YUV422P12BE:
+ case PIX_FMT_YUV422P14LE:
+ case PIX_FMT_YUV422P14BE:
case PIX_FMT_YUV444P9LE:
case PIX_FMT_YUV444P9BE:
case PIX_FMT_YUV444P10LE:
case PIX_FMT_YUV444P10BE:
+ case PIX_FMT_YUV444P12LE:
+ case PIX_FMT_YUV444P12BE:
+ case PIX_FMT_YUV444P14LE:
+ case PIX_FMT_YUV444P14BE:
case PIX_FMT_GBRP9LE:
case PIX_FMT_GBRP9BE:
case PIX_FMT_GBRP10LE:
case PIX_FMT_GBRP10BE:
+ case PIX_FMT_GBRP12LE:
+ case PIX_FMT_GBRP12BE:
+ case PIX_FMT_GBRP14LE:
+ case PIX_FMT_GBRP14BE:
w_align = 16; //FIXME assume 16 pixel per macroblock
h_align = 16 * 2; // interlaced needs 2 macroblocks height
break;
return -1;
}
- if(av_image_check_size(w, h, 0, s) || s->pix_fmt<0)
+ if(av_image_check_size(w, h, 0, s) || s->pix_fmt<0) {
+ av_log(s, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n");
return -1;
+ }
if (!avci->buffer) {
avci->buffer = av_mallocz((INTERNAL_BUFFER_SIZE+1) *
buf->linesize[i]= picture.linesize[i];
buf->base[i]= av_malloc(size[i]+16); //FIXME 16
- if(buf->base[i]==NULL) return -1;
+ if(buf->base[i]==NULL)
+ return AVERROR(ENOMEM);
memset(buf->base[i], 128, size[i]);
// no edge if EDGE EMU or not planar YUV
MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos)
MAKE_ACCESSORS(AVFrame, frame, int64_t, channel_layout)
MAKE_ACCESSORS(AVFrame, frame, int, sample_rate)
+MAKE_ACCESSORS(AVFrame, frame, AVDictionary *, metadata)
+
+MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase)
static void avcodec_get_subtitle_defaults(AVSubtitle *sub)
{
return AVERROR(EINVAL);
}
- av_assert0(!avpkt->data || avpkt->data != avctx->internal->byte_buffer);
- if (!avpkt->data || avpkt->size < size) {
- av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size);
- avpkt->data = avctx->internal->byte_buffer;
- avpkt->size = avctx->internal->byte_buffer_size;
- avpkt->destruct = NULL;
+ if (avctx) {
+ av_assert0(!avpkt->data || avpkt->data != avctx->internal->byte_buffer);
+ if (!avpkt->data || avpkt->size < size) {
+ av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size);
+ avpkt->data = avctx->internal->byte_buffer;
+ avpkt->size = avctx->internal->byte_buffer_size;
+ avpkt->destruct = NULL;
+ }
}
if (avpkt->data) {
/* check for valid frame size */
if (frame) {
if (avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) {
- if (frame->nb_samples > avctx->frame_size)
+ if (frame->nb_samples > avctx->frame_size) {
+ av_log(avctx, AV_LOG_ERROR, "more samples than frame size (avcodec_encode_audio2)\n");
return AVERROR(EINVAL);
+ }
} else if (!(avctx->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) {
if (frame->nb_samples < avctx->frame_size &&
!avctx->internal->last_audio_frame) {
avctx->internal->last_audio_frame = 1;
}
- if (frame->nb_samples != avctx->frame_size)
+ if (frame->nb_samples != avctx->frame_size) {
+ av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d) (avcodec_encode_audio2)\n", frame->nb_samples, avctx->frame_size);
return AVERROR(EINVAL);
+ }
}
}
}
if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size) {
+ uint8_t *side;
+ int side_size;
// copy to ensure we do not change avpkt
AVPacket tmp = *avpkt;
int did_split = av_packet_split_side_data(&tmp);
frame->sample_rate = avctx->sample_rate;
}
+ side= av_packet_get_side_data(avctx->pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size);
+ if(side && side_size>=10) {
+ avctx->internal->skip_samples = AV_RL32(side);
+ }
+ if (avctx->internal->skip_samples) {
+ if(frame->nb_samples <= avctx->internal->skip_samples){
+ *got_frame_ptr = 0;
+ avctx->internal->skip_samples -= frame->nb_samples;
+ } else {
+ av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples,
+ frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format);
+ if(avctx->pkt_timebase.num && avctx->sample_rate) {
+ if(frame->pkt_pts!=AV_NOPTS_VALUE)
+ frame->pkt_pts += av_rescale_q(avctx->internal->skip_samples,(AVRational){1, avctx->sample_rate}, avctx->pkt_timebase);
+ if(frame->pkt_dts!=AV_NOPTS_VALUE)
+ frame->pkt_dts += av_rescale_q(avctx->internal->skip_samples,(AVRational){1, avctx->sample_rate}, avctx->pkt_timebase);
+ }
+ frame->nb_samples -= avctx->internal->skip_samples;
+ avctx->internal->skip_samples = 0;
+ }
+ }
+
avctx->pkt = NULL;
if (did_split) {
ff_packet_free_side_data(&tmp);
#define IS_PRINT(x) \
(((x) >= '0' && (x) <= '9') || \
((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') || \
- ((x) == '.' || (x) == ' '))
+ ((x) == '.' || (x) == ' ' || (x) == '-'))
for (i = 0; i < 4; i++) {
len = snprintf(buf, buf_size,