Message ID | tencent_813D0519E9BB9EF34D0DA1247FAA8C3F160A@qq.com |
---|---|
State | Accepted |
Commit | 0744782de3ee37fc2b8d9db73ec15d774165b4e5 |
Headers | show |
Series | [FFmpeg-devel] avformat/mov: get the correct fragment stsd_id when decrypting the sample | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
> From: Wang Yaqiang <wangyaqiang03@kuaishou.com> > > When determining whether a packet should be decrypted, > should use the stsd_id of the fragment where the current packet is located. > > Signed-off-by: Wang Yaqiang <wangyaqiang03@kuaishou.com> > --- > libavformat/isom.h | 1 + > libavformat/mov.c | 7 ++++--- > 2 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/libavformat/isom.h b/libavformat/isom.h > index fd236b985f..64fb7065d5 100644 > --- a/libavformat/isom.h > +++ b/libavformat/isom.h > @@ -139,6 +139,7 @@ typedef struct MOVFragmentStreamInfo { > int index_base; > int index_entry; > MOVEncryptionIndex *encryption_index; > + int stsd_id; // current fragment stsd_id > } MOVFragmentStreamInfo; > > typedef struct MOVFragmentIndexItem { > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 35e2271b14..a2c6a4f2a3 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -4956,9 +4956,10 @@ static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) > av_log(c->fc, AV_LOG_TRACE, "frag flags 0x%x\n", frag->flags); > > frag_stream_info = get_current_frag_stream_info(&c->frag_index); > - if (frag_stream_info) > + if (frag_stream_info) { > frag_stream_info->next_trun_dts = AV_NOPTS_VALUE; > - > + frag_stream_info->stsd_id = frag->stsd_id; > + } > return 0; > } > > @@ -7223,7 +7224,7 @@ static int cenc_filter(MOVContext *mov, AVStream* st, MOVStreamContext *sc, AVPa > encryption_index = NULL; > if (frag_stream_info) { > // Note this only supports encryption info in the first sample descriptor. > - if (mov->fragment.stsd_id == 1) { > + if (frag_stream_info->stsd_id == 1) { > if (frag_stream_info->encryption_index) { > encrypted_index = current_index - frag_stream_info->index_base; > encryption_index = frag_stream_info->encryption_index; LGTM.
Zhao Zhili <quinkblack@foxmail.com> 于2022年9月16日周五 17:28写道: > > > > From: Wang Yaqiang <wangyaqiang03@kuaishou.com> > > > > When determining whether a packet should be decrypted, > > should use the stsd_id of the fragment where the current packet is located. > > > > Signed-off-by: Wang Yaqiang <wangyaqiang03@kuaishou.com> > > --- > > libavformat/isom.h | 1 + > > libavformat/mov.c | 7 ++++--- > > 2 files changed, 5 insertions(+), 3 deletions(-) > > > > diff --git a/libavformat/isom.h b/libavformat/isom.h > > index fd236b985f..64fb7065d5 100644 > > --- a/libavformat/isom.h > > +++ b/libavformat/isom.h > > @@ -139,6 +139,7 @@ typedef struct MOVFragmentStreamInfo { > > int index_base; > > int index_entry; > > MOVEncryptionIndex *encryption_index; > > + int stsd_id; // current fragment stsd_id > > } MOVFragmentStreamInfo; > > > > typedef struct MOVFragmentIndexItem { > > diff --git a/libavformat/mov.c b/libavformat/mov.c > > index 35e2271b14..a2c6a4f2a3 100644 > > --- a/libavformat/mov.c > > +++ b/libavformat/mov.c > > @@ -4956,9 +4956,10 @@ static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) > > av_log(c->fc, AV_LOG_TRACE, "frag flags 0x%x\n", frag->flags); > > > > frag_stream_info = get_current_frag_stream_info(&c->frag_index); > > - if (frag_stream_info) > > + if (frag_stream_info) { > > frag_stream_info->next_trun_dts = AV_NOPTS_VALUE; > > - > > + frag_stream_info->stsd_id = frag->stsd_id; > > + } > > return 0; > > } > > > > @@ -7223,7 +7224,7 @@ static int cenc_filter(MOVContext *mov, AVStream* st, MOVStreamContext *sc, AVPa > > encryption_index = NULL; > > if (frag_stream_info) { > > // Note this only supports encryption info in the first sample descriptor. > > - if (mov->fragment.stsd_id == 1) { > > + if (frag_stream_info->stsd_id == 1) { > > if (frag_stream_info->encryption_index) { > > encrypted_index = current_index - frag_stream_info->index_base; > > encryption_index = frag_stream_info->encryption_index; > > LGTM. Applied Thanks Steven
diff --git a/libavformat/isom.h b/libavformat/isom.h index fd236b985f..64fb7065d5 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -139,6 +139,7 @@ typedef struct MOVFragmentStreamInfo { int index_base; int index_entry; MOVEncryptionIndex *encryption_index; + int stsd_id; // current fragment stsd_id } MOVFragmentStreamInfo; typedef struct MOVFragmentIndexItem { diff --git a/libavformat/mov.c b/libavformat/mov.c index 35e2271b14..a2c6a4f2a3 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -4956,9 +4956,10 @@ static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) av_log(c->fc, AV_LOG_TRACE, "frag flags 0x%x\n", frag->flags); frag_stream_info = get_current_frag_stream_info(&c->frag_index); - if (frag_stream_info) + if (frag_stream_info) { frag_stream_info->next_trun_dts = AV_NOPTS_VALUE; - + frag_stream_info->stsd_id = frag->stsd_id; + } return 0; } @@ -7223,7 +7224,7 @@ static int cenc_filter(MOVContext *mov, AVStream* st, MOVStreamContext *sc, AVPa encryption_index = NULL; if (frag_stream_info) { // Note this only supports encryption info in the first sample descriptor. - if (mov->fragment.stsd_id == 1) { + if (frag_stream_info->stsd_id == 1) { if (frag_stream_info->encryption_index) { encrypted_index = current_index - frag_stream_info->index_base; encryption_index = frag_stream_info->encryption_index;