lavc: add ff_init_buffer_info()
Fixes seeking per fileposition in ffplay. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
5ec55d216e
commit
b93cb8383f
@ -55,4 +55,9 @@ int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
|
|||||||
|
|
||||||
unsigned int ff_toupper4(unsigned int x);
|
unsigned int ff_toupper4(unsigned int x);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* does needed setup of pkt_pts/pos and such for (re)get_buffer();
|
||||||
|
*/
|
||||||
|
void ff_init_buffer_info(AVCodecContext *s, AVFrame *pic);
|
||||||
|
|
||||||
#endif /* AVCODEC_INTERNAL_H */
|
#endif /* AVCODEC_INTERNAL_H */
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "internal.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
|
||||||
typedef int (action_func)(AVCodecContext *c, void *arg);
|
typedef int (action_func)(AVCodecContext *c, void *arg);
|
||||||
@ -787,6 +788,8 @@ int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f)
|
|||||||
|
|
||||||
f->owner = avctx;
|
f->owner = avctx;
|
||||||
|
|
||||||
|
ff_init_buffer_info(avctx, f);
|
||||||
|
|
||||||
if (!(avctx->active_thread_type&FF_THREAD_FRAME)) {
|
if (!(avctx->active_thread_type&FF_THREAD_FRAME)) {
|
||||||
f->thread_opaque = NULL;
|
f->thread_opaque = NULL;
|
||||||
return avctx->get_buffer(avctx, f);
|
return avctx->get_buffer(avctx, f);
|
||||||
|
@ -238,6 +238,22 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){
|
|||||||
*width=FFALIGN(*width, align);
|
*width=FFALIGN(*width, align);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ff_init_buffer_info(AVCodecContext *s, AVFrame *pic)
|
||||||
|
{
|
||||||
|
if (s->pkt) {
|
||||||
|
pic->pkt_pts = s->pkt->pts;
|
||||||
|
pic->pkt_pos = s->pkt->pos;
|
||||||
|
} else {
|
||||||
|
pic->pkt_pts = AV_NOPTS_VALUE;
|
||||||
|
pic->pkt_pos = -1;
|
||||||
|
}
|
||||||
|
pic->reordered_opaque= s->reordered_opaque;
|
||||||
|
pic->sample_aspect_ratio = s->sample_aspect_ratio;
|
||||||
|
pic->width = s->width;
|
||||||
|
pic->height = s->height;
|
||||||
|
pic->format = s->pix_fmt;
|
||||||
|
}
|
||||||
|
|
||||||
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
||||||
int i;
|
int i;
|
||||||
int w= s->width;
|
int w= s->width;
|
||||||
@ -1357,6 +1373,9 @@ unsigned int ff_toupper4(unsigned int x)
|
|||||||
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f)
|
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f)
|
||||||
{
|
{
|
||||||
f->owner = avctx;
|
f->owner = avctx;
|
||||||
|
|
||||||
|
ff_init_buffer_info(avctx, f);
|
||||||
|
|
||||||
return avctx->get_buffer(avctx, f);
|
return avctx->get_buffer(avctx, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user