| @@ -26,6 +26,7 @@ · 25 unmodified lines |
| 26 | 26 | #include "libavutil/internal.h" |
| 27 | 27 | #include "libavutil/mathematics.h" |
| 28 | 28 | #include "libavutil/mem.h" |
| 29 | +#include "libavutil/rational.h" |
| 29 | 30 | |
| 30 | 31 | #include "bytestream.h" |
| 31 | 32 | #include "internal.h" |
| @@ -44,6 +45,9 @@ void av_init_packet(AVPacket *pkt) · 12 unmodified lines |
| 44 | 45 | pkt->buf = NULL; |
| 45 | 46 | pkt->side_data = NULL; |
| 46 | 47 | pkt->side_data_elems = 0; |
| 48 | + pkt->opaque = NULL; |
| 49 | + pkt->opaque_ref = NULL; |
| 50 | + pkt->time_base = av_make_q(0, 0); |
| 47 | 51 | } |
| 48 | 52 | #endif |
| 49 | 53 | |
| @@ -374,7 +378,7 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, · 324 unmodified lines |
| 374 | 378 | |
| 375 | 379 | int av_packet_copy_props(AVPacket *dst, const AVPacket *src) |
| 376 | 380 | { |
| 377 | | − int i; |
| 381 | + int i, ret; |
| 378 | 382 | |
| 379 | 383 | dst->pts = src->pts; |
| 380 | 384 | dst->dts = src->dts; |
| @@ -382,9 +386,16 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src) · 1 unmodified line |
| 382 | 386 | dst->duration = src->duration; |
| 383 | 387 | dst->flags = src->flags; |
| 384 | 388 | dst->stream_index = src->stream_index; |
| 385 | | − |
| 389 | + dst->opaque = src->opaque; |
| 390 | + dst->time_base = src->time_base; |
| 391 | + dst->opaque_ref = NULL; |
| 386 | 392 | dst->side_data = NULL; |
| 387 | 393 | dst->side_data_elems = 0; |
| 394 | + |
| 395 | + ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); |
| 396 | + if (ret < 0) |
| 397 | + return ret; |
| 398 | + |
| 388 | 399 | for (i = 0; i < src->side_data_elems; i++) { |
| 389 | 400 | enum AVPacketSideDataType type = src->side_data[i].type; |
| 390 | 401 | size_t size = src->side_data[i].size; |
| @@ -392,6 +403,7 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src) · 1 unmodified line |
| 392 | 403 | uint8_t *dst_data = av_packet_new_side_data(dst, type, size); |
| 393 | 404 | |
| 394 | 405 | if (!dst_data) { |
| 406 | + av_buffer_unref(&dst->opaque_ref); |
| 395 | 407 | av_packet_free_side_data(dst); |
| 396 | 408 | return AVERROR(ENOMEM); |
| 397 | 409 | } |
| @@ -404,6 +416,7 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src) · 6 unmodified lines |
| 404 | 416 | void av_packet_unref(AVPacket *pkt) |
| 405 | 417 | { |
| 406 | 418 | av_packet_free_side_data(pkt); |
| 419 | + av_buffer_unref(&pkt->opaque_ref); |
| 407 | 420 | av_buffer_unref(&pkt->buf); |
| 408 | 421 | get_packet_defaults(pkt); |
| 409 | 422 | } |