int av_frame_is_writable(AVFrame *frame) { int i, ret = 1; /* assume non-refcounted frames are not writable */ if (!frame->buf[0]) return 0; for (i = 0; i < FF_ARRAY_ELEMS(frame->buf) && frame->buf[i]; i++) ret &= !!av_buffer_is_writable(frame->buf[i]); for (i = 0; i < frame->nb_extended_buf; i++) ret &= !!av_buffer_is_writable(frame->extended_buf[i]); return ret; }
int av_packet_make_writable(AVPacket *pkt) { AVBufferRef *buf = NULL; int ret; if (pkt->buf && av_buffer_is_writable(pkt->buf)) return 0; ret = packet_alloc(&buf, pkt->size); if (ret < 0) return ret; if (pkt->size) memcpy(buf->data, pkt->data, pkt->size); av_buffer_unref(&pkt->buf); pkt->buf = buf; pkt->data = buf->data; return 0; }