|
|
|
@ -275,6 +275,76 @@ int av_frame_get_buffer(AVFrame *frame, int align) |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_frame_copy_props(AVFrame *dst, const AVFrame *src) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
dst->key_frame = src->key_frame; |
|
|
|
|
dst->pict_type = src->pict_type; |
|
|
|
|
dst->sample_aspect_ratio = src->sample_aspect_ratio; |
|
|
|
|
dst->pts = src->pts; |
|
|
|
|
dst->repeat_pict = src->repeat_pict; |
|
|
|
|
dst->interlaced_frame = src->interlaced_frame; |
|
|
|
|
dst->top_field_first = src->top_field_first; |
|
|
|
|
dst->palette_has_changed = src->palette_has_changed; |
|
|
|
|
dst->sample_rate = src->sample_rate; |
|
|
|
|
dst->opaque = src->opaque; |
|
|
|
|
#if FF_API_AVFRAME_LAVC |
|
|
|
|
dst->type = src->type; |
|
|
|
|
#endif |
|
|
|
|
dst->pkt_pts = src->pkt_pts; |
|
|
|
|
dst->pkt_dts = src->pkt_dts; |
|
|
|
|
dst->pkt_pos = src->pkt_pos; |
|
|
|
|
dst->pkt_size = src->pkt_size; |
|
|
|
|
dst->pkt_duration = src->pkt_duration; |
|
|
|
|
dst->reordered_opaque = src->reordered_opaque; |
|
|
|
|
dst->quality = src->quality; |
|
|
|
|
dst->best_effort_timestamp = src->best_effort_timestamp; |
|
|
|
|
dst->coded_picture_number = src->coded_picture_number; |
|
|
|
|
dst->display_picture_number = src->display_picture_number; |
|
|
|
|
dst->flags = src->flags; |
|
|
|
|
dst->decode_error_flags = src->decode_error_flags; |
|
|
|
|
dst->color_primaries = src->color_primaries; |
|
|
|
|
dst->color_trc = src->color_trc; |
|
|
|
|
dst->colorspace = src->colorspace; |
|
|
|
|
dst->color_range = src->color_range; |
|
|
|
|
dst->chroma_location = src->chroma_location; |
|
|
|
|
|
|
|
|
|
av_dict_copy(&dst->metadata, src->metadata, 0); |
|
|
|
|
|
|
|
|
|
memcpy(dst->error, src->error, sizeof(dst->error)); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < src->nb_side_data; i++) { |
|
|
|
|
const AVFrameSideData *sd_src = src->side_data[i]; |
|
|
|
|
AVFrameSideData *sd_dst; |
|
|
|
|
if ( sd_src->type == AV_FRAME_DATA_PANSCAN |
|
|
|
|
&& (src->width != dst->width || src->height != dst->height)) |
|
|
|
|
continue; |
|
|
|
|
sd_dst = av_frame_new_side_data(dst, sd_src->type, |
|
|
|
|
sd_src->size); |
|
|
|
|
if (!sd_dst) { |
|
|
|
|
wipe_side_data(dst); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
memcpy(sd_dst->data, sd_src->data, sd_src->size); |
|
|
|
|
av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dst->qscale_table = NULL; |
|
|
|
|
dst->qstride = 0; |
|
|
|
|
dst->qscale_type = 0; |
|
|
|
|
if (src->qp_table_buf) { |
|
|
|
|
dst->qp_table_buf = av_buffer_ref(src->qp_table_buf); |
|
|
|
|
if (dst->qp_table_buf) { |
|
|
|
|
dst->qscale_table = dst->qp_table_buf->data; |
|
|
|
|
dst->qstride = src->qstride; |
|
|
|
|
dst->qscale_type = src->qscale_type; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_frame_ref(AVFrame *dst, const AVFrame *src) |
|
|
|
|
{ |
|
|
|
|
int i, ret = 0; |
|
|
|
@ -460,76 +530,6 @@ int av_frame_make_writable(AVFrame *frame) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_frame_copy_props(AVFrame *dst, const AVFrame *src) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
dst->key_frame = src->key_frame; |
|
|
|
|
dst->pict_type = src->pict_type; |
|
|
|
|
dst->sample_aspect_ratio = src->sample_aspect_ratio; |
|
|
|
|
dst->pts = src->pts; |
|
|
|
|
dst->repeat_pict = src->repeat_pict; |
|
|
|
|
dst->interlaced_frame = src->interlaced_frame; |
|
|
|
|
dst->top_field_first = src->top_field_first; |
|
|
|
|
dst->palette_has_changed = src->palette_has_changed; |
|
|
|
|
dst->sample_rate = src->sample_rate; |
|
|
|
|
dst->opaque = src->opaque; |
|
|
|
|
#if FF_API_AVFRAME_LAVC |
|
|
|
|
dst->type = src->type; |
|
|
|
|
#endif |
|
|
|
|
dst->pkt_pts = src->pkt_pts; |
|
|
|
|
dst->pkt_dts = src->pkt_dts; |
|
|
|
|
dst->pkt_pos = src->pkt_pos; |
|
|
|
|
dst->pkt_size = src->pkt_size; |
|
|
|
|
dst->pkt_duration = src->pkt_duration; |
|
|
|
|
dst->reordered_opaque = src->reordered_opaque; |
|
|
|
|
dst->quality = src->quality; |
|
|
|
|
dst->best_effort_timestamp = src->best_effort_timestamp; |
|
|
|
|
dst->coded_picture_number = src->coded_picture_number; |
|
|
|
|
dst->display_picture_number = src->display_picture_number; |
|
|
|
|
dst->flags = src->flags; |
|
|
|
|
dst->decode_error_flags = src->decode_error_flags; |
|
|
|
|
dst->color_primaries = src->color_primaries; |
|
|
|
|
dst->color_trc = src->color_trc; |
|
|
|
|
dst->colorspace = src->colorspace; |
|
|
|
|
dst->color_range = src->color_range; |
|
|
|
|
dst->chroma_location = src->chroma_location; |
|
|
|
|
|
|
|
|
|
av_dict_copy(&dst->metadata, src->metadata, 0); |
|
|
|
|
|
|
|
|
|
memcpy(dst->error, src->error, sizeof(dst->error)); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < src->nb_side_data; i++) { |
|
|
|
|
const AVFrameSideData *sd_src = src->side_data[i]; |
|
|
|
|
AVFrameSideData *sd_dst; |
|
|
|
|
if ( sd_src->type == AV_FRAME_DATA_PANSCAN |
|
|
|
|
&& (src->width != dst->width || src->height != dst->height)) |
|
|
|
|
continue; |
|
|
|
|
sd_dst = av_frame_new_side_data(dst, sd_src->type, |
|
|
|
|
sd_src->size); |
|
|
|
|
if (!sd_dst) { |
|
|
|
|
wipe_side_data(dst); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
memcpy(sd_dst->data, sd_src->data, sd_src->size); |
|
|
|
|
av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dst->qscale_table = NULL; |
|
|
|
|
dst->qstride = 0; |
|
|
|
|
dst->qscale_type = 0; |
|
|
|
|
if (src->qp_table_buf) { |
|
|
|
|
dst->qp_table_buf = av_buffer_ref(src->qp_table_buf); |
|
|
|
|
if (dst->qp_table_buf) { |
|
|
|
|
dst->qscale_table = dst->qp_table_buf->data; |
|
|
|
|
dst->qstride = src->qstride; |
|
|
|
|
dst->qscale_type = src->qscale_type; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane) |
|
|
|
|
{ |
|
|
|
|
uint8_t *data; |
|
|
|
|