|
|
|
@ -549,14 +549,14 @@ void ff_init_buffer_info(AVCodecContext *s, AVFrame *frame) |
|
|
|
|
{ |
|
|
|
|
if (s->pkt) { |
|
|
|
|
frame->pkt_pts = s->pkt->pts; |
|
|
|
|
frame->pkt_pos = s->pkt->pos; |
|
|
|
|
frame->pkt_duration = s->pkt->duration; |
|
|
|
|
frame->pkt_size = s->pkt->size; |
|
|
|
|
av_frame_set_pkt_pos (frame, s->pkt->pos); |
|
|
|
|
av_frame_set_pkt_duration(frame, s->pkt->duration); |
|
|
|
|
av_frame_set_pkt_size (frame, s->pkt->size); |
|
|
|
|
} else { |
|
|
|
|
frame->pkt_pts = AV_NOPTS_VALUE; |
|
|
|
|
frame->pkt_pos = -1; |
|
|
|
|
frame->pkt_duration = 0; |
|
|
|
|
frame->pkt_size = -1; |
|
|
|
|
av_frame_set_pkt_pos (frame, -1); |
|
|
|
|
av_frame_set_pkt_duration(frame, 0); |
|
|
|
|
av_frame_set_pkt_size (frame, -1); |
|
|
|
|
} |
|
|
|
|
frame->reordered_opaque = s->reordered_opaque; |
|
|
|
|
|
|
|
|
@ -571,7 +571,7 @@ void ff_init_buffer_info(AVCodecContext *s, AVFrame *frame) |
|
|
|
|
frame->sample_rate = s->sample_rate; |
|
|
|
|
frame->format = s->sample_fmt; |
|
|
|
|
frame->channel_layout = s->channel_layout; |
|
|
|
|
frame->channels = s->channels; |
|
|
|
|
av_frame_set_channels(frame, s->channels); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -714,11 +714,11 @@ void avcodec_get_frame_defaults(AVFrame *frame) |
|
|
|
|
|
|
|
|
|
frame->pts = |
|
|
|
|
frame->pkt_dts = |
|
|
|
|
frame->pkt_pts = |
|
|
|
|
frame->best_effort_timestamp = AV_NOPTS_VALUE; |
|
|
|
|
frame->pkt_duration = 0; |
|
|
|
|
frame->pkt_pos = -1; |
|
|
|
|
frame->pkt_size = -1; |
|
|
|
|
frame->pkt_pts = AV_NOPTS_VALUE; |
|
|
|
|
av_frame_set_best_effort_timestamp(frame, AV_NOPTS_VALUE); |
|
|
|
|
av_frame_set_pkt_duration (frame, 0); |
|
|
|
|
av_frame_set_pkt_pos (frame, -1); |
|
|
|
|
av_frame_set_pkt_size (frame, -1); |
|
|
|
|
frame->key_frame = 1; |
|
|
|
|
frame->sample_aspect_ratio = (AVRational) {0, 1 }; |
|
|
|
|
frame->format = -1; /* unknown */ |
|
|
|
@ -1650,13 +1650,13 @@ static int add_metadata_from_side_data(AVCodecContext *avctx, AVFrame *frame) |
|
|
|
|
while (side_metadata < end) { |
|
|
|
|
const uint8_t *key = side_metadata; |
|
|
|
|
const uint8_t *val = side_metadata + strlen(key) + 1; |
|
|
|
|
int ret = av_dict_set(&frame->metadata, key, val, 0); |
|
|
|
|
int ret = av_dict_set(ff_frame_get_metadatap(frame), key, val, 0); |
|
|
|
|
if (ret < 0) |
|
|
|
|
break; |
|
|
|
|
side_metadata = val + strlen(val) + 1; |
|
|
|
|
} |
|
|
|
|
end: |
|
|
|
|
avctx->metadata = frame->metadata; |
|
|
|
|
avctx->metadata = av_frame_get_metadata(frame); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1692,7 +1692,7 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi |
|
|
|
|
picture->pkt_dts = avpkt->dts; |
|
|
|
|
|
|
|
|
|
if(!avctx->has_b_frames){ |
|
|
|
|
picture->pkt_pos = avpkt->pos; |
|
|
|
|
av_frame_set_pkt_pos(picture, avpkt->pos); |
|
|
|
|
} |
|
|
|
|
//FIXME these should be under if(!avctx->has_b_frames)
|
|
|
|
|
/* get_buffer is supposed to set frame parameters */ |
|
|
|
@ -1716,9 +1716,10 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi |
|
|
|
|
|
|
|
|
|
if (*got_picture_ptr){ |
|
|
|
|
avctx->frame_number++; |
|
|
|
|
picture->best_effort_timestamp = guess_correct_pts(avctx, |
|
|
|
|
picture->pkt_pts, |
|
|
|
|
picture->pkt_dts); |
|
|
|
|
av_frame_set_best_effort_timestamp(picture, |
|
|
|
|
guess_correct_pts(avctx, |
|
|
|
|
picture->pkt_pts, |
|
|
|
|
picture->pkt_dts)); |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
ret = 0; |
|
|
|
@ -1813,15 +1814,16 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, |
|
|
|
|
if (ret >= 0 && *got_frame_ptr) { |
|
|
|
|
avctx->frame_number++; |
|
|
|
|
frame->pkt_dts = avpkt->dts; |
|
|
|
|
frame->best_effort_timestamp = guess_correct_pts(avctx, |
|
|
|
|
frame->pkt_pts, |
|
|
|
|
frame->pkt_dts); |
|
|
|
|
av_frame_set_best_effort_timestamp(frame, |
|
|
|
|
guess_correct_pts(avctx, |
|
|
|
|
frame->pkt_pts, |
|
|
|
|
frame->pkt_dts)); |
|
|
|
|
if (frame->format == AV_SAMPLE_FMT_NONE) |
|
|
|
|
frame->format = avctx->sample_fmt; |
|
|
|
|
if (!frame->channel_layout) |
|
|
|
|
frame->channel_layout = avctx->channel_layout; |
|
|
|
|
if (!frame->channels) |
|
|
|
|
frame->channels = avctx->channels; |
|
|
|
|
if (!av_frame_get_channels(frame)) |
|
|
|
|
av_frame_set_channels(frame, avctx->channels); |
|
|
|
|
if (!frame->sample_rate) |
|
|
|
|
frame->sample_rate = avctx->sample_rate; |
|
|
|
|
} |
|
|
|
@ -1850,8 +1852,8 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, |
|
|
|
|
frame->pkt_pts += diff_ts; |
|
|
|
|
if(frame->pkt_dts!=AV_NOPTS_VALUE) |
|
|
|
|
frame->pkt_dts += diff_ts; |
|
|
|
|
if (frame->pkt_duration >= diff_ts) |
|
|
|
|
frame->pkt_duration -= diff_ts; |
|
|
|
|
if (av_frame_get_pkt_duration(frame) >= diff_ts) |
|
|
|
|
av_frame_set_pkt_duration(frame, av_frame_get_pkt_duration(frame) - diff_ts); |
|
|
|
|
} else { |
|
|
|
|
av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n"); |
|
|
|
|
} |
|
|
|
@ -1875,7 +1877,7 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, |
|
|
|
|
* extended_data are doing it correctly */ |
|
|
|
|
if (*got_frame_ptr) { |
|
|
|
|
planar = av_sample_fmt_is_planar(frame->format); |
|
|
|
|
channels = frame->channels; |
|
|
|
|
channels = av_frame_get_channels(frame); |
|
|
|
|
if (!(planar && channels > AV_NUM_DATA_POINTERS)) |
|
|
|
|
frame->extended_data = frame->data; |
|
|
|
|
} else { |
|
|
|
|