Que fait ce bit de code dans ffmpeg.c , quel est son but?
01562 ist->next_pts = ist->pts = picture.best_effort_timestamp;
01563 if (ist->st->codec->time_base.num != 0) {
01564 int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
01565 ist->next_pts += ((int64_t)AV_TIME_BASE *
01566 ist->st->codec->time_base.num * ticks) /
01567 ist->st->codec->time_base.den;
01568 }
Il s'agit de l'horodatage de décodage (DTS) et de l'horodatage de présentation (PTS). Vous pouvez trouver une explication ici à l'intérieur d'un tutoriel .
Disons que nous avions un film et que les images étaient affichées comme suit: I B B P. Maintenant, nous devons connaître les informations dans P avant de pouvoir afficher l’une des images B. Pour cette raison, les images peuvent être stockées comme ceci: I P B B. C'est pourquoi nous avons un horodatage de décodage et un horodatage de présentation sur chaque image. L'horodatage de décodage nous indique quand nous devons décoder quelque chose, et l'horodatage de la présentation nous indique quand nous devons afficher quelque chose. Donc, dans ce cas, notre flux pourrait ressembler à ceci:
PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B
Généralement, le PTS et DTS ne différeront que lorsque le flux que nous lisons contient B images.