diff mbox

[FFmpeg-devel] avcodec/qtrle: set pict type information in ouptut frames

Message ID 20190829160033.10532-1-jamrial@gmail.com
State New
Headers show

Commit Message

James Almer Aug. 29, 2019, 4 p.m. UTC
Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/qtrle.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Paul B Mahol Aug. 29, 2019, 4:18 p.m. UTC | #1
On 8/29/19, James Almer <jamrial@gmail.com> wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/qtrle.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c
> index f565e0e358..ba6740f5d4 100644
> --- a/libavcodec/qtrle.c
> +++ b/libavcodec/qtrle.c
> @@ -449,6 +449,7 @@ static int qtrle_decode_frame(AVCodecContext *avctx,
>                                AVPacket *avpkt)
>  {
>      QtrleContext *s = avctx->priv_data;
> +    AVFrame *frame = data;
>      int header, start_line;
>      int height, row_ptr;
>      int has_palette = 0;
> @@ -566,6 +567,12 @@ done:
>
>      if ((ret = av_frame_ref(data, s->frame)) < 0)
>          return ret;
> +    if (avpkt->flags & AV_PKT_FLAG_KEY) {
> +        frame->pict_type = AV_PICTURE_TYPE_I;
> +        frame->key_frame = 1;
> +    } else {
> +        frame->pict_type = AV_PICTURE_TYPE_P;
> +    }
>      *got_frame      = 1;
>
>      /* always report that the buffer was completely consumed */
> --
> 2.22.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".


That info might not be correct or provided at all, so you need to
carefully inspect
data to get correct keyframe flag. Should not be hard to do.
James Almer Aug. 29, 2019, 4:34 p.m. UTC | #2
On 8/29/2019 1:18 PM, Paul B Mahol wrote:
> On 8/29/19, James Almer <jamrial@gmail.com> wrote:
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>  libavcodec/qtrle.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c
>> index f565e0e358..ba6740f5d4 100644
>> --- a/libavcodec/qtrle.c
>> +++ b/libavcodec/qtrle.c
>> @@ -449,6 +449,7 @@ static int qtrle_decode_frame(AVCodecContext *avctx,
>>                                AVPacket *avpkt)
>>  {
>>      QtrleContext *s = avctx->priv_data;
>> +    AVFrame *frame = data;
>>      int header, start_line;
>>      int height, row_ptr;
>>      int has_palette = 0;
>> @@ -566,6 +567,12 @@ done:
>>
>>      if ((ret = av_frame_ref(data, s->frame)) < 0)
>>          return ret;
>> +    if (avpkt->flags & AV_PKT_FLAG_KEY) {
>> +        frame->pict_type = AV_PICTURE_TYPE_I;
>> +        frame->key_frame = 1;
>> +    } else {
>> +        frame->pict_type = AV_PICTURE_TYPE_P;
>> +    }
>>      *got_frame      = 1;
>>
>>      /* always report that the buffer was completely consumed */
>> --
>> 2.22.0
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> 
> 
> That info might not be correct or provided at all, so you need to
> carefully inspect
> data to get correct keyframe flag. Should not be hard to do.

What would that be, !header && start_line == 0 && end_line == height?
Paul B Mahol Aug. 29, 2019, 4:56 p.m. UTC | #3
On 8/29/19, James Almer <jamrial@gmail.com> wrote:
> On 8/29/2019 1:18 PM, Paul B Mahol wrote:
>> On 8/29/19, James Almer <jamrial@gmail.com> wrote:
>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>> ---
>>>  libavcodec/qtrle.c | 7 +++++++
>>>  1 file changed, 7 insertions(+)
>>>
>>> diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c
>>> index f565e0e358..ba6740f5d4 100644
>>> --- a/libavcodec/qtrle.c
>>> +++ b/libavcodec/qtrle.c
>>> @@ -449,6 +449,7 @@ static int qtrle_decode_frame(AVCodecContext *avctx,
>>>                                AVPacket *avpkt)
>>>  {
>>>      QtrleContext *s = avctx->priv_data;
>>> +    AVFrame *frame = data;
>>>      int header, start_line;
>>>      int height, row_ptr;
>>>      int has_palette = 0;
>>> @@ -566,6 +567,12 @@ done:
>>>
>>>      if ((ret = av_frame_ref(data, s->frame)) < 0)
>>>          return ret;
>>> +    if (avpkt->flags & AV_PKT_FLAG_KEY) {
>>> +        frame->pict_type = AV_PICTURE_TYPE_I;
>>> +        frame->key_frame = 1;
>>> +    } else {
>>> +        frame->pict_type = AV_PICTURE_TYPE_P;
>>> +    }
>>>      *got_frame      = 1;
>>>
>>>      /* always report that the buffer was completely consumed */
>>> --
>>> 2.22.0
>>>
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>>
>>
>> That info might not be correct or provided at all, so you need to
>> carefully inspect
>> data to get correct keyframe flag. Should not be hard to do.
>
> What would that be, !header && start_line == 0 && end_line == height?

Nope, check input if it have skip codes.

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox

Patch

diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c
index f565e0e358..ba6740f5d4 100644
--- a/libavcodec/qtrle.c
+++ b/libavcodec/qtrle.c
@@ -449,6 +449,7 @@  static int qtrle_decode_frame(AVCodecContext *avctx,
                               AVPacket *avpkt)
 {
     QtrleContext *s = avctx->priv_data;
+    AVFrame *frame = data;
     int header, start_line;
     int height, row_ptr;
     int has_palette = 0;
@@ -566,6 +567,12 @@  done:
 
     if ((ret = av_frame_ref(data, s->frame)) < 0)
         return ret;
+    if (avpkt->flags & AV_PKT_FLAG_KEY) {
+        frame->pict_type = AV_PICTURE_TYPE_I;
+        frame->key_frame = 1;
+    } else {
+        frame->pict_type = AV_PICTURE_TYPE_P;
+    }
     *got_frame      = 1;
 
     /* always report that the buffer was completely consumed */