summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpcodecs/mp_image.h1
-rw-r--r--libmpcodecs/vd_ffmpeg.c11
-rw-r--r--libmpcodecs/vd_libmpeg2.c11
3 files changed, 23 insertions, 0 deletions
diff --git a/libmpcodecs/mp_image.h b/libmpcodecs/mp_image.h
index 942536ce4f..8414aa47aa 100644
--- a/libmpcodecs/mp_image.h
+++ b/libmpcodecs/mp_image.h
@@ -75,6 +75,7 @@ typedef struct mp_image_s {
unsigned int stride[MP_MAX_PLANES];
int* qscale;
int qstride;
+ int pict_type; // 0->unknown, 1->I, 2->P, 3->B
int num_planes;
/* these are only used by planar formats Y,U(Cb),V(Cr) */
int chroma_width;
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 56e4171c55..1908089570 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -630,6 +630,17 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
mpi->qscale=&quant_store[0][0];
mpi->qstride=MBC+1;
#endif
+
+ {
+ static int last_non_b_type= 0;
+
+ if(avctx->pict_type == B_TYPE)
+ mpi->pict_type= B_TYPE;
+ else{
+ mpi->pict_type= last_non_b_type;
+ last_non_b_type= avctx->pict_type;
+ }
+ }
return mpi;
}
diff --git a/libmpcodecs/vd_libmpeg2.c b/libmpcodecs/vd_libmpeg2.c
index 3f89c333bd..389a351028 100644
--- a/libmpcodecs/vd_libmpeg2.c
+++ b/libmpcodecs/vd_libmpeg2.c
@@ -290,5 +290,16 @@ while(current<end){
if(ret) mpi=ret;
// }
+ if(mpi){
+ static int last_non_b_type= 0;
+
+ if(picture->picture_coding_type == B_TYPE)
+ mpi->pict_type= B_TYPE;
+ else{
+ mpi->pict_type= last_non_b_type;
+ last_non_b_type= picture->picture_coding_type;
+ }
+ }
+
return mpi;
}