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