Commit da6506c6 authored by Anton Khirnov's avatar Anton Khirnov

lavc: move AVCodecContext.pkt to AVCodecInternal

It's a private field, not meant to be accessed from outside lavc.
parent 38ecc370
...@@ -2672,14 +2672,13 @@ typedef struct AVCodecContext { ...@@ -2672,14 +2672,13 @@ typedef struct AVCodecContext {
*/ */
int error_rate; int error_rate;
#if FF_API_CODEC_PKT
/** /**
* Current packet as passed into the decoder, to avoid having * @deprecated this field is not supposed to be accessed from outside lavc
* to pass the packet into every function. Currently only valid
* inside lavc and get/release_buffer callbacks.
* - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
* - encoding: unused
*/ */
attribute_deprecated
AVPacket *pkt; AVPacket *pkt;
#endif
/** /**
* VBV delay coded in the last frame (in periods of a 27 MHz clock). * VBV delay coded in the last frame (in periods of a 27 MHz clock).
......
...@@ -88,6 +88,12 @@ typedef struct AVCodecInternal { ...@@ -88,6 +88,12 @@ typedef struct AVCodecInternal {
FramePool *pool; FramePool *pool;
void *thread_ctx; void *thread_ctx;
/**
* Current packet as passed into the decoder, to avoid having to pass the
* packet into every function.
*/
AVPacket *pkt;
} AVCodecInternal; } AVCodecInternal;
struct AVCodecDefault { struct AVCodecDefault {
......
...@@ -608,7 +608,6 @@ int ff_frame_thread_init(AVCodecContext *avctx) ...@@ -608,7 +608,6 @@ int ff_frame_thread_init(AVCodecContext *avctx)
} }
*copy = *src; *copy = *src;
copy->pkt = &p->avpkt;
copy->internal = av_malloc(sizeof(AVCodecInternal)); copy->internal = av_malloc(sizeof(AVCodecInternal));
if (!copy->internal) { if (!copy->internal) {
...@@ -617,6 +616,7 @@ int ff_frame_thread_init(AVCodecContext *avctx) ...@@ -617,6 +616,7 @@ int ff_frame_thread_init(AVCodecContext *avctx)
} }
*copy->internal = *src->internal; *copy->internal = *src->internal;
copy->internal->thread_ctx = p; copy->internal->thread_ctx = p;
copy->internal->pkt = &p->avpkt;
if (!i) { if (!i) {
src = copy; src = copy;
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
*/ */
#include "avcodec.h" #include "avcodec.h"
#include "internal.h"
#include "raw.h" #include "raw.h"
#include "libavutil/buffer.h" #include "libavutil/buffer.h"
#include "libavutil/common.h" #include "libavutil/common.h"
...@@ -150,7 +151,7 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame, ...@@ -150,7 +151,7 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame,
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->key_frame = 1;
frame->reordered_opaque = avctx->reordered_opaque; frame->reordered_opaque = avctx->reordered_opaque;
frame->pkt_pts = avctx->pkt->pts; frame->pkt_pts = avctx->internal->pkt->pts;
if (buf_size < context->frame_size - (avctx->pix_fmt == AV_PIX_FMT_PAL8 ? if (buf_size < context->frame_size - (avctx->pix_fmt == AV_PIX_FMT_PAL8 ?
AVPALETTE_SIZE : 0)) AVPALETTE_SIZE : 0))
......
...@@ -613,7 +613,7 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags) ...@@ -613,7 +613,7 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
default: return AVERROR(EINVAL); default: return AVERROR(EINVAL);
} }
frame->pkt_pts = avctx->pkt ? avctx->pkt->pts : AV_NOPTS_VALUE; frame->pkt_pts = avctx->internal->pkt ? avctx->internal->pkt->pts : AV_NOPTS_VALUE;
frame->reordered_opaque = avctx->reordered_opaque; frame->reordered_opaque = avctx->reordered_opaque;
#if FF_API_GET_BUFFER #if FF_API_GET_BUFFER
...@@ -1402,7 +1402,7 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi ...@@ -1402,7 +1402,7 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
if ((avctx->coded_width || avctx->coded_height) && av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx)) if ((avctx->coded_width || avctx->coded_height) && av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx))
return -1; return -1;
avctx->pkt = avpkt; avctx->internal->pkt = avpkt;
ret = apply_param_change(avctx, avpkt); ret = apply_param_change(avctx, avpkt);
if (ret < 0) { if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
...@@ -1467,7 +1467,7 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, ...@@ -1467,7 +1467,7 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
*got_frame_ptr = 0; *got_frame_ptr = 0;
avctx->pkt = avpkt; avctx->internal->pkt = avpkt;
if (!avpkt->data && avpkt->size) { if (!avpkt->data && avpkt->size) {
av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n"); av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
...@@ -1522,7 +1522,7 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, ...@@ -1522,7 +1522,7 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
{ {
int ret; int ret;
avctx->pkt = avpkt; avctx->internal->pkt = avpkt;
*got_sub_ptr = 0; *got_sub_ptr = 0;
ret = avctx->codec->decode(avctx, sub, got_sub_ptr, avpkt); ret = avctx->codec->decode(avctx, sub, got_sub_ptr, avpkt);
if (*got_sub_ptr) if (*got_sub_ptr)
......
...@@ -91,5 +91,8 @@ ...@@ -91,5 +91,8 @@
#ifndef FF_API_THREAD_OPAQUE #ifndef FF_API_THREAD_OPAQUE
#define FF_API_THREAD_OPAQUE (LIBAVCODEC_VERSION_MAJOR < 56) #define FF_API_THREAD_OPAQUE (LIBAVCODEC_VERSION_MAJOR < 56)
#endif #endif
#ifndef FF_API_CODEC_PKT
#define FF_API_CODEC_PKT (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
#endif /* AVCODEC_VERSION_H */ #endif /* AVCODEC_VERSION_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment