diff mbox

[FFmpeg-devel,5/6] avcodec/extract_extradata_bsf: use the parsing code from mpeg4video_split()

Message ID 20170324223147.2692-6-jamrial@gmail.com
State Accepted
Headers show

Commit Message

James Almer March 24, 2017, 10:31 p.m. UTC
It's a simplifaction of the same code, originally commited as 3b5ad8fbf77.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/extract_extradata_bsf.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Michael Niedermayer March 26, 2017, 12:50 a.m. UTC | #1
On Fri, Mar 24, 2017 at 07:31:46PM -0300, James Almer wrote:
> It's a simplifaction of the same code, originally commited as 3b5ad8fbf77.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/extract_extradata_bsf.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)

LGTM
thx

[...]
James Almer March 26, 2017, 1:40 a.m. UTC | #2
On 3/25/2017 9:50 PM, Michael Niedermayer wrote:
> On Fri, Mar 24, 2017 at 07:31:46PM -0300, James Almer wrote:
>> It's a simplifaction of the same code, originally commited as 3b5ad8fbf77.
>>
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>  libavcodec/extract_extradata_bsf.c | 12 ++++++------
>>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> LGTM
> thx

Pushed.
diff mbox

Patch

diff --git a/libavcodec/extract_extradata_bsf.c b/libavcodec/extract_extradata_bsf.c
index 57a3d51bef..12f02f6a5a 100644
--- a/libavcodec/extract_extradata_bsf.c
+++ b/libavcodec/extract_extradata_bsf.c
@@ -203,13 +203,13 @@  static int extract_extradata_mpeg4(AVBSFContext *ctx, AVPacket *pkt,
 {
     ExtractExtradataContext *s = ctx->priv_data;
     uint32_t state = UINT32_MAX;
-    int i;
+    const uint8_t *ptr = pkt->data, *end = pkt->data + pkt->size;
 
-    for (i = 0; i < pkt->size; i++) {
-        state = (state << 8) | pkt->data[i];
-        if ((state == 0x1B3 || state == 0x1B6)) {
-            if (i > 3) {
-                *size = i - 3;
+    while (ptr < end) {
+        ptr = avpriv_find_start_code(ptr, end, &state);
+        if (state == 0x1B3 || state == 0x1B6) {
+            if (ptr - pkt->data > 4) {
+                *size = ptr - 4 - pkt->data;
                 *data = av_malloc(*size + AV_INPUT_BUFFER_PADDING_SIZE);
                 if (!*data)
                     return AVERROR(ENOMEM);